July 15, 2021
By Bogeun Kim (bokunn91@gmail.com)
웹 프로젝트 개발을 하다보면, 소스는 stateless 이되 환경별로 다르게 적용되어야 하는 자원들이 발생한다. (Database, Redis, Domain, ...)
개발 환경에서는 개발 DB 로 접근해야하고, 프로덕션 환경에서는 프로덕션 DB 로 접근해야 하듯이.
Spring Boot 에서는 이를 위해 Profiles 설정을 제공하고 있으며 프로퍼티 (application.properties, application.yml) 로 관리할 수 있다.
YAML 포맷을 활용하여 가독성이 좋으면서도 환경별로 구분되어야 할 것을 지정할 수 있다.
•
환경별 구분을 위하여 구분자 '—-' 를 활용한다.
•
Spring Boot 2.4 이후 부터는 'spring.config.activate.on-profile' 을 활용한다.
Spring Boot 2.4 이전은 'spring.profiles' 을 활용했었음
application.yml (Spring Boot 2.5.2)
# Common
management:
endpoints:
web:
exposure:
include: health
---
spring:
config:
activate:
on-profile: local
---
spring:
config:
activate:
on-profile: kr-development
---
spring:
config:
activate:
on-profile: kr-staging
---
spring:
config:
activate:
on-profile: kr-production
Shell
실제 프로젝트를 구성하고 프로덕션 수준에서 운영하다보니 로컬 > 개발 > 스테이징 > 프로덕션 수준의 단계가 필요하였다. 각 환경별로 필요한 자원을 지정하여 활용할 수 있다.
공통 자원은 상단에 공통으로 설정하면 된다.
실제로 잘 적용되었는지 출력하여 확인해보자.
프로젝트를 Run 하고 수행 시점에 따라 해당 프로퍼티를 읽어드리는 구간과 아닌 구간이 있으니 주의하자.
Ref