local, dev, prod 환경에 맞게 build 되어서 배포되어져야 하는 경우가 있다.
그렇지 않으면, 매번 파일을 application.properties or application.yaml(yml)에 덮어써서 빌드/배포 해야하는 번거로움이 생긴다.
이번에 사이드 프로젝트하면서 직접 설정한 방법에 대해서 공유한다.
Springboot에서는 따로 config 읽는 classpath에 대해 따로 설정하지 않는다면, 위와 같이 자동으로 읽게 된다. (classpath root or classpath /config/)
custom하기에는 다른 개발자들이 다른 사이트에서 가져와서 새로운 config를 넣거나 적용시에, 다시 한번 더 확인 해야할 부분들이 생길 까봐. 기존 automatically find되는 경로를 사용했다. (/config/)
/config/ 디렉토리 아래에다가 application.yml을 둔 이유는 spring rest docs와 같이 classpath 아래에 또 여러가지 관련 file들이 생성 되기 때문에, config 관련 설정과 명확히 구분 짓기 위해 /config/ 디렉토리 아래에다가 두었다.
위와 같은 디렉토리 구조로 설정 되어 있다.
각 파일들을 보면,
- application.yml
spring:
profiles:
group:
"local": "local, common"
"dev": "dev, common"
"prod": "prod, common"
- application-common.yml
spring:
config:
activate:
on-profile: common
server:
port: 8080
servlet:
encoding:
charset: utf-8
tomcat:
uri-encoding: utf-8
- application-local.yml
spring:
config:
activate:
on-profile: local
application.yml : profile에 따라 어떤 yml파일을 로딩시킬지 그룹핑하여, 설정된 profile들을 읽도록 함
application-common.yml : profile과 상관없이, 즉, 환경과 상관없이 모든 환경에 적용되어져야할 내용
application-local.yml : 각 환경에 맞게 적용되어져야할 내용
위와 같이 분리하여, 좀 더 가독성있게 profile에 따라 config를 읽을 수 있도록 설정하였다.
active 된 log를 보면 local과 common이 로딩 된 것을 확인할 수 있다.
'SPRING' 카테고리의 다른 글
Secrets Manager + SpringBoot (0) | 2023.07.25 |
---|---|
Custom Annotation 기반으로 Session 정보 가져오기 (0) | 2023.05.02 |
Spring 웹 계층 (0) | 2023.04.24 |
JPA Annotation (0) | 2023.04.24 |
Lombok Annontation (0) | 2023.04.06 |