Spring

[ Spring ] 외부 설정 파일과 프로파일

구티맨 2020. 6. 3. 09:24

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 보다 우선순위가 더 높아 위와 같이 파일명을 사용한다.

 

참조

https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config