[ Spring ] 외부 설정 파일과 프로파일
Spring 에서는 다른 환경에서 같은 어플리케이션 코드로 동작할 수 있도록 외부에서 설정을 할 수 있도록 제공해 준다.
로컬, 개발, 상용 등의 환경에서 그에 맞는 설정 파일을 참조하여, 설정 값을 코드에서 읽어 사용을 한다는 뜻이다.
프로파일( Profile )
프로그래밍적으로 활성화 되는, 논리적 그루핑의 이름이라고 할 수 있다.
위에서 언급 한 것 처럼, 일반적으로 개발 환경에 따라 프로파일 명을 지정하여 주로 사용을 한다.
프로파일은 코드 단에서 빈에 정의를 할 수 있고, 설정 파일에도 정의를 할 수 있다.
이러한 프로파일은 한번에 하나 이상의 프로파일을 활성화 할 수 있다.
프로파일 활성화는, 프로그래밍 방식, 환경변수( SPRING_PROFILES_ACTIVE ), JVM -D옵션( -Dspring.profiles.active= ) 등 으로 할 수 있다.
만약 프로파일을 지정하지 않으면, default 프로파일이 활성화 된다.
설정파일( properties )
환경에 따라 달리 사용하는 설정 파일의 값들은 호스트 이름, 로그 Path, Database 접속 정보 등이 될 수 있다.
그리고 이러한 파일은 properties, YAML 파일을 사용할 수 있다.
Property 값은 @Value 를 사용해서 빈에 직접적으로 주입할 수도 있다.
( @EnableConfigurationProperties + @ConfigurationProperties + POJO instance 조합으로 설정파일 값을 저장하는 POJO instance를 정의 할 수도 있다. )
여러 방식으로 property를 설정할 수 있기 때문에, 주어진 순서에 따라 값이 overriding이 가능하다.
구체적인 순서는 참조 url에 문서를 참조하면 된다.( 1번이 최우선순위로 적용 된다 )
몇 가지만 살펴 본다면, Command Line Arguments > OS 환경 변수 > application-{profile}.properties > application.properties 순으로 우선순위가 적용된다.( 좌측이 더 높은 우선 순위로 값을 사용 한다. )
어플리케이션을 개발 할 때, 주로 application.yml ( or application.properties )을 주로 사용하니 이 파일에 대해 알아보겠다.
개발 환경이 로컬, 개발, 사용기가 있다고 했을 때, profile을 local, dev, prod라고 하자.
그러면 아래와 같이 property 파일을 생성할 수 있다.
- local : application.yml
- dev : application-dev.yml
- prod : application-prod.yml
( 필자는, application.yml 을 로컬에 필요한 설정 값과 default로 사용할 설정 값을 저장하고 있다. )
설정 파일은 실행하는 profile 이름에 매칭 되는 파일의 값을 읽어 사용을 하고, 파일명은 application-{profile}.yml 형식이다.
그리고, application-{profile}.yml 의 값이 application.yml 보다 우선순위가 더 높아 위와 같이 파일명을 사용한다.
참조