Spring Boot로 프로젝트를 진행하다 보면 application.yml 파일을 local, develop, product 등 서비스가 실행되는 환경이 달라 각각 다른 설정을 해야하는 경우가 있다.
예를 들어 환경별로 DB나 서버 포트 등이 다른 경우, 다른 DB를 사용하는 경우 등이 있는데 이 때 Spring Boot의 Profile을 이용하면 번거롭게 매번 설정을 수정하는 작업을 할 필요 없이 손쉽게 알맞는 설정을 적용할 수 있다.
Spring Boot 2.4 이전 버전에서는 application.yml 파일에
# application.yml
spring:
profiles:
active: dev
이런식으로 적용할 Profile(dev)을 spring.profiles.active에 등록해
이와 같은 구조로 여러 개의 application-{profile}.yml 파일을 만들어야 했다.
예시 파일
# application-dev.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db?useSSL=false&serverTimezone=Asia/Seoul&useLegacyDatetimeCode=false&allowPublicKeyRetrieval=true
username: root
password: 1234
하지만 Spring Boot 2.4 버전 이후로는 하나의 application.yml 파일에서 '---' 로 구분 할 수 있도록 기능을 제공하고 있다.
# application.yml
spring:
profiles:
active: local # default
group:
local:
- common
prod:
- common
---
spring:
config:
activate:
on-profile: common # local과 dev에서 공통으로 사용할 설정 값
kakao:
rest:
api:
key: ${KAKAO_REST_API_KEY}
---
spring:
config:
activate:
on-profile: local
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://localhost:3306/db
username: ${SPRING_DATASOURCE_USERNAME}
password: ${SPRING_DATASOURCE_PASSWORD}
jpa:
hibernate:
ddl-auto: create
show-sql: true
redis:
host: localhost
port: 6379
---
spring:
config:
activate:
on-profile: prod
위와 같이 local, prod 설정을 하나의 파일에서 작성할 수 있다.
적용 방법
그룹화
그룹화를 통해 중복 설정을 줄일 수도 있다.
local과 prod가 활성화 된다면 common Profile도 함께 활성화 되는 것이다. 이처럼 common Profile에 정의된 설정 값들은 local과 prod에서 공통으로 사용하도록 할 수 있다.
여러 개의 설정 활성화
spring:
profiles:
active: dev
group:
prod: common, prod
dev: common, dev,local
# 이하 생략
이처럼 여러 개의 설정을 활성화 시킬 수도 있다.