프로젝트를 만들다 보면 보통 아래와 같이 loc, dev, stag, prod 형태로 application.yml 또는 application.properties를 나눌 것 입니다.
spring:
main:
web-application-type: none
profiles:
active: local
batch:
job:
names: ${job.name:NONE}
--- ## loc 환경 설정
spring:
config:
activate:
on-profile: loc
--- ## dev 환경 설정
spring:
config:
activate:
on-profile: dev
--- ## stag 환경 설정
spring:
config:
activate:
on-profile: stag
--- ## prod 환경 설정
spring:
config:
activate:
on-profile: prod
오늘은 멀티 모듈로 프로젝트를 구성한 후 각 모듈에 application.yml 을 어떻게 세분화 하여 나눌 수 있는지 정리해보고자 합니다.
보통 멀티 모듈 프로젝트를 생성하면 아래와 같은 구조를 가지게 됩니다.
- Batch
- API
- Core
위와 같은 구조 말고도 각각 필요한 모듈을 더 추가해서 사용할 수도 있습니다.
위의 구조를 보면 크게 Batch, API 어플리케이션이 있고 Core라는 Domain의 특성을 가진 모듈이 있습니다.
- Batch
- application.yml
- API
- application.yml
- Core
- application.yml
각각의 모듈에 application.yml 을 작성하게 될 텐데 이때 공통으로 사용 되는 Core 모듈에서 application.yml 이라는 네이밍으로 작업 시 해당 application.yml은 읽혀지지 않게 된다. 이미 Batch 혹은 API에 동일 이름의 yml이 존재하기 때문이다.
그렇다면 어떻게 해야 할까?
나의 경우 아래와 같이 세분화를 하고 있다.
위와 같이 각 application-{시스템}.yml 을 만들고 공통으로 사용하는 부분은 Core 각 어플리케이션에서 개별적으로 사용하는 부분은 개별적으로 셋팅한다.
그리고 아래와 같이 application.yml에 처리를 해주면 된다.
spring:
profiles:
active: local
include:
- mysql
- mongo
- elastic
아래 로그를 보면 include를 통해 application-{시스템}.yml 들이 기동 시 Load가 된다.
[2022-12-14 15:15:39.225] [INFO ] [main] [Starting TicketBatchApplication using Java 11.0.16.1 on 2020051ui-MacBookPro.local with PID 49174 (/Users/a2020051/Desktop/workspace/ticket/ella-ticket-search-indexer/ticket-app-batch/build/classes/java/main started by xxx in /Users/xxx/Desktop/workspace/ticket/ella-ticket-search-indexer)] [com.interpark.TicketBatchApplication.logStarting]
[2022-12-14 15:15:39.227] [INFO ] [main] [The following profiles are active: mysql,mongo,elastic,local]
[com.interpark.TicketBatchApplication.logStartupProfileInfo]
'Spring' 카테고리의 다른 글
stream API와 for-loop 성능차이 (0) | 2022.02.07 |
---|---|
SpringBatch 전용 DB 테이블 (0) | 2022.02.07 |
SpringBatch (0) | 2022.02.07 |
application.yml로 환경 나누기 (0) | 2022.01.28 |