스프링 부트 - 핵심 원리와 활용 - 섹션6. 외부설정과 프로필1
CS/김영한 스프링 강의

스프링 부트 - 핵심 원리와 활용 - 섹션6. 외부설정과 프로필1

.jar 파일로 빌드해서 서버에 올리는걸 해봤는데, 같은 코드지만 개발용 서버, 라이브 서버에 따라 안에 들어있는 ip주소 값 등은 바뀌어야 한다. 옛날엔 이런 기능이 없어서 해당 변수만 살짝 바꿔서 빌드하는 방식으로 2번 빌드했다. 하지만 이젠 아니다.

 

같은 코드에서도 다른 변수를 주입하게 하려면, 코드 내에서 외부 파일을 읽어와 이걸 변수에 할당하는 방법이 있다. 그래서 외부 설정이라고 하는거고, 외부 파일을 읽어들여 사용한다. 위 처럼 크게 4가지 방법이 있다는데 3가지 방법을 알아볼거다.

 

일단 os 환경변수

위 환경변수를 가져오는걸 자바에서 제공해준다.

 

하지만 이건 말 그대로 os 속성이라 다른 프로그램에서도 사용할 수 있다.

그래서 자바에서만 사용가능하게 하는 자바 시스템 속성을 보자.

 

 

실행할 때 뒤에 -D~~~=~~~ 로 하여 JVM이 읽을 수 있는 변수를 정해줄 수 있다. 자바 안에서도 속성을 set로 정의할 수 있지만 외부에서 읽어오는걸로써 필요한건데 굳이 할 필요가 있을까?

 

 

커맨드 라인 방법은 학생 때 배웠던 main 함수 안의 args 매개변수. 그 띄워쓰기로 구분하고 그냥 쌩 string 있는거..

 

 

 

key value쌍으로 되어있지 않아 직접 split으로 나눠서 분리해주고 해야하기 때문에 불편하다.

그래서 스프링이 알아서 해주는데, 업그레이드 버전인 커맨드 라인 옵션 인수를 보자.

 

 

짝대기 두개 --로 한건 알아서 파싱해준다. 자바 표준은 아니고 스프링이 자체적으로 만든거다.

 

이걸 메인 메소드가 아니어도 스프링 빈에 등록시켜서 어디에서든지 사용할 수 있다.

 

 

 

 

다 같이 key, value 형식으로 읽어들이는데 근데 뭔가 os에서 부르는것과 vm에서 부르는거, 프로그램 인수에서 부르는거 다 함수가 다르다.

 

이걸 통일시켜주는게 클래스 추상화. 스프링엔 당연히 있다.

Environment라고 있는데 안에서 노가다를 하며 다 미리 작성해놓았다. 당연히 겹칠 수 있기 때문에 우선순위를 정해놓았다.

 

 

 

겹칠경우, 더 유연하게 바꿀 수 있는 순서, 더 좁은 범위 순서대로 적용된다.

 

 

이 변수들도 너무 많아지면 파일로써 관리하는게 편리해지는데, 그래서 코드는 같고 파일은 다른걸 드디어 한다.

이건 아까 위에서 봤던 변수 읽는 순서 중 맨 마지막.

실제 빌드한 뒤, properties 설정파일 넣고 실행하면 알아서 파일 읽어 변수로 저장한다.

 

문제는 이론상 운영서버엔 이거, 개발 서버엔 저거 하면서 다른 변수로 할당할 순 있지만 이름이 저걸로 같아야 하는 규약 등으로 관리도 힘들어진다.

그래서 내부 파일을 분리할 수 있게 만들어놓았다.

 

resources 폴더에 application-적용할거.properties를 넣고, 실행할 때 환경변수만 바꾸면 된다.

 

 

 

 

스프링이 커맨드 라인 옵션 뿐 아니라 자바 시스템 속성도 지원하기 때문에, 빌드한 뒤 나온 .jar 파일에서도 실행 가능하다.

 

 

프로필용 파일을 따로 두는게 불편하다고 해서 하나로 합칠수도 있다.

 

 

프로파일을 아무것도 지정안하면 default가 지정되는데, default가 아무것도 지정되지 않으면 그냥 null값이다.

그래서 default를 지정해주자. local을 default로 해도 좋다.

 

 

 

 

적용 우선순위는.. 엄밀하게 다 정해져 있지만, 범위가 좁고 변경이 유연한 것이 우선순위가 더 높다고 생각하면 된다.

Core Features (spring.io)

 

Core Features

Spring Boot uses Commons Logging for all internal logging but leaves the underlying log implementation open. Default configurations are provided for Java Util Logging, Log4j2, and Logback. In each case, loggers are pre-configured to use console output with

docs.spring.io

Core Features (spring.io)

 

Core Features

Spring Boot uses Commons Logging for all internal logging but leaves the underlying log implementation open. Default configurations are provided for Java Util Logging, Log4j2, and Logback. In each case, loggers are pre-configured to use console output with

docs.spring.io