우리가 개발하다보면 테스트서버의 DB, 운영서버의 DB는 다르게 둬야한다. 이때 이 다른 주소를 어떻게 바꿔낄까?
옛날에는 진짜 테스트서버 DB주소 넣고 빌드 -> jar1
운영서버 DB주소코드바꾸고 빌드 -> jar2
이런식으로 2개를 따로 사용기도 했는데 이러면 중간에 어떤일이 발생할지 아무도 모르고 번거롭다.
그래서 실행시점 외부설정값 주입을 하게된다.
유지보수하기 좋은 애플리케이션 개발의 가장 기본 원칙은 변하는 것과 변하지 않는 것을 분리하는 것이다.
일반적으로 jar같은 파일을 실행할때 외부설정을 읽어드릴수 있게 하는 방법은 4가지가 있다.
윈도우 set
MAC,리눅스 printenv
윈도우에서 결과
C:\Users\aa>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\aa\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
USERNAME=aa
USERPROFILE=C:\Users\aa
windir=C:\WINDOWS
등등...
이런 값들 실제로 등록할 수 있고 자바에서 읽을 수 있음
@Slf4j
public class OsEnv {
public static void main(String[] args) {
Map<String, String> envMap = System.getenv();
for (String key : envMap.keySet()) {
log.info("env {}={}", key, System.getenv(key));
}
}
}
이런식으로 사용하면 위의 값들 키밸류 값으로 다 읽을 수 있어서 OS에 직접 주소 변수 등록해서 자바에서 꺼내서 쓸 수 있는것
다만 이 방식은 같은 컴퓨터에서 스프링을 실행하든, 파이썬을 실행하든, 노드를 실행하든 모두 같은 변수 꺼내서 쓰는것임
나는 자바안에서만 유효한 외부설정을 사용하고싶다 하면 다른방법 사용해야함