Spring Profiles를 통한 환경별 설정
Spring에서는 spring.profiles.active
라는 프로퍼티를 이용해 현재 활성화된 프로파일(환경)을 지정할 수 있습니다. 이를 활용하면 개발(development
), 운영(production
), 로컬(local
) 등 다양한 환경마다 다른 설정파일을 로드하거나 다양한 빈 설정을 적용할 수 있습니다.
주의사항
- Maven Profile과는 별개의 개념이므로 혼동하지 않도록 주의하세요. Maven Profile은 빌드 시점에 적용되는 것이며, Spring Profile은 런타임 시점에 활성화되는 설정입니다.
Maven Profile 설정은 관련 문서를 참고하세요.
프로파일 설정 방법
다음은 spring.profiles.active
값을 설정하는 여러 가지 방법입니다.
빌드 시 JVM 프로퍼티를 통한 설정
java -jar -Dspring.profiles.active=dev my-app.jar
위와 같이 실행 시에
-D
옵션으로 프로파일을 지정할 수 있습니다.web.xml을 통한 설정
web.xml
파일 내context-param
을 통해 프로파일을 지정할 수 있습니다.<context-param> <param-name>spring.profiles.active</param-name> <param-value>production</param-value> </context-param>
Tomcat 기동 스크립트(catalina.sh)에서 설정
catalina.sh
내JAVA_OPTS
설정에 프로파일을 추가합니다.JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=local"
Tomcat의 catalina.properties를 통한 설정
catalina.properties
파일에 다음과 같이 추가할 수 있습니다. 이때-D
를 빼고 작성해야 합니다.spring.profiles.active=dev
중복된 설정에 대한 우선순위
경험적으로 확인한 결과, web.xml
에 설정한 프로파일이 최우선적으로 적용됩니다. 즉, Tomcat 설정 파일 등에 프로파일이 지정되어 있더라도 web.xml
이 우선하기 때문에, 웹 애플리케이션 내부에 지정된 프로파일이 있다면 외부 설정은 무시될 수 있습니다.
프로파일별 Properties 파일 로딩
spring.profiles.active
에 따라 다른 properties 파일을 읽도록 설정할 수 있습니다. 예를 들어 development.properties
, production.properties
를 classpath
아래에 두고, 활성화된 프로파일에 따라 알맞은 파일을 로드하도록 할 수 있습니다.
아래 예제에서는 PropertiesFactoryBean
을 사용하여 활성화된 프로파일에 맞춰 프로퍼티를 동적으로 로딩합니다.
<bean id="config" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:/#{systemProperties['spring.profiles.active']}.properties</value>
</list>
</property>
</bean>
예를 들어, spring.profiles.active=dev
로 설정되어 있다면 dev.properties
파일을 로딩하게 됩니다.
추가 팁: 로컬(Spring) 환경 설정을 Tomcat에서 사용할 경우
로컬 개발 환경에서 Tomcat을 이용해 어플리케이션을 기동하는 경우에도 spring.profiles.active
를 적용할 수 있습니다. 이 경우 Eclipse IDE에서 Tomcat 실행 환경 설정을 통해 프로파일을 지정하거나, 위에서 언급한 catalina.sh
, catalina.properties
등을 활용할 수 있습니다.
참고 자료:
위와 같이 Spring Profiles를 활용하면 환경별로 서로 다른 설정을 간편하게 관리할 수 있으며, 개발-테스트-운영 환경 전환 시 유연한 대응이 가능합니다.
'Java > Spring' 카테고리의 다른 글
스프링의 트랜잭션 처리 (0) | 2022.02.27 |
---|---|
Spring 에서 런타임 환경에서 프로퍼티 값을 변경하는 방법 (0) | 2021.12.18 |
Spring 내에서 리소스 불러오기 (0) | 2016.11.18 |
스프링 Properties 파일을 이용해서 설정하기 (0) | 2016.11.18 |
Mybatis + Myabtis Spring 사용시 마이바티스 설정파일 사용법 (0) | 2016.11.14 |