본문 바로가기

오류 해결

스프링 프로파일(Spring Profiles) 설정

스프링 프로파일 설정

스프링 프로젝트를 빌드할 때 프로파일을 나누는 방법은 pom.xml에서 빌드 설정을 전부 해주는 것이다. 각 local, alpha, release 등에 사용되는 resources들을 폴더로 나누어 구분지어서 사용한다.

resources_local
└ application.properties

resources_alpha
└ application.properties

resources_stage
└ application.properties

resources_release
└ application.properties

하지만 프로퍼티 파일을 나누지않고 사용해야 하는 경우가 발생했다. 빌드 시에 사용되는 Jenkins Job이 REAL과 STAGE가 동일하게 사용하고 있는 문제가 있었다. 물론 빌드 파라미터를 그때그때 바꿔주어서 배포하는 방법이 있겠지만, 이미 만들어져있는 자동화 CI/CD 도구에서 원클릭으로 해결하는 것이 아닌 중간에 한번 설정해주는 것은 영 불편한감이 없지않아 있었다.

 

때문에 maven 빌드 뿐만 아니라, 스프링 내 옵션에서도 프로파일을 설정해줘야 했다. 문제였던 REAL과 STAGE가 동일한 빌드를 수행하는 것은 resources_release를 사용하는 것은 똑같지만 프로퍼티 내부에서 사용하는 값이 바뀌도록 만들었다. 이 방법엔 두가지 설정이 필요했다.

 

먼저 스프링부트 자체 프로퍼티도 수정을 해야 했다. springboot.props에서는 VM옵션에 -Dspring.profiles.active=stage라는 옵션을 사용하여 스프링 프로파일이 stage임을 명시해주었다. 그 다음은 resources_release 폴더 내의 application.properties다. 파일 자체를 분리할 수 없기 때문에 스프링부트에서 제공하는 스프링옵션으로 분리해야 했다. 이 때 사용한 옵션이 spring.config.activate.on-profile옵션이다.

spring.config.activate.on-profile=stage
external.url=http://************.com
---
spring.config.activate.on-profile=default
external.url=http://************.com

springboot.props에서 사용한 프로파일 명을 on-profile로 설정함으로써 해당 프로파일 명일 때 external.url을 사용하도록 했다. 만일 stage를 사용하지 않을 경우 default로 설정되어 있는 external.url을 사용하게 될 것 이다.