소스 코드를 개발하다 보면 환경별로 설정 파일을 나누어야 할 때가 있다.
예를 들면 DB정보나 계정정보가 있을 수 있다.
기존에 properties를 사용할 때는 application-dev.properties, application-stg.properties, application-prd.properties 형태로 여러개의 파일을 만들어 외부에서 환경을 주입 받아서 사용하였는데 이번에 컨슈머를 작업하다 보니 아주 좋은 걸 발견하여 정리한다.
이번 프로젝트에서 요구 사항은 다음과 같았다.
1. 공통 데이터 파이프라인 구축을 위한 One 소스 컨슈머 개발
2. 데이터 포맷을 통일하여 투어,티켓,도서,쇼핑의 End Point 데이터 토픽을 구독할수 있도록 개발
위의 요구사항을 보면 다행인점은 데이터 포맷은 전부 통일하기로 한 것이다. 그렇기 때문에 데이터 파싱하는 부분은 공통으로 처리를 할 수 있었다.
그렇지만, 각각의 부문별로 토픽명도 다르고 토픽그룹명도 달라야 하며 또한 우리쪽에서 데이터를 저장하는 MongoDB의 정보도 달랐다.
처음에는 설계를 좀 잘못하여 properties로 환경을 잡았었는데 투어 작업이 진행이 되면서 환경파일에 대한 고민이 커져갔다. 왜냐하면 투어의 경우 국내숙박, 액티비티, 자유여행 등등 다양한 도메인들이 존재하였고 데이터를 보내주는 팀도 세분화 되어 있어서 환경을 각 도메인 마다 만들어줘야 했기 때문이다.
그렇게 고민을 하던 중 application.yml을 활용하면 되겠다는 생각이 들었다.
application.yml에서는 아래 처럼 1개의 파일에서 '---' 으로local, dev, stag, prd 환경을 나눌수가 있다.
[application.yml]
spring:
main:
web-application-type: none
profiles:
active: local
topic:
name: 토픽명
group:
name: 토픽그룹명
---
spring:
profiles: local
kafka:
bootstrap-servers: 카프카 정보
listener:
type: batch
consumer:
max-poll-records: 250
data:
mongodb:
uri: Mongo 정보
thread:
count: 1
---
spring:
profiles: dev
kafka:
bootstrap-servers: 카프카 정보
listener:
type: batch
consumer:
max-poll-records: 250
data:
mongodb:
uri: Mongo 정보
thread:
count: 5
---
spring:
profiles: stg
kafka:
bootstrap-servers: 카프카 정보
listener:
type: batch
consumer:
max-poll-records: 250
data:
mongodb:
uri: Mongo 정보
thread:
count: 5
---
spring:
profiles: prd
kafka:
bootstrap-servers: 카프카 정보
listener:
type: batch
consumer:
max-poll-records: 250
data:
mongodb:
uri: Mongo 정보
thread:
count: 7
이렇게 1개의 설정파일에서 환경을 나누게 되어 버리니 이제는 여러개의 도메인에 대한 설정 파일을 위의 포맷으로 하나씩 추가 하였다.
- application-a.yml -> a도메인에 대한 환경파일
- application-b.yml -> b도메인에 대한 환경파일
- application-c.yml -> c도메인에 대한 환경파일
이렇게 만든 뒤에 배포 후 jar를 실행할 때 아래 처럼 실행을 하면 특정 환경에 특정 도메인의 설정값을 읽어 올 수 있다.
// config파일 외부 주입
java -jar consumer.jar --spring.profiles.active=dev --spring.config.name=./application-a.yml
'Spring' 카테고리의 다른 글
application.yml 여러개로 나누기 (0) | 2022.12.14 |
---|---|
stream API와 for-loop 성능차이 (0) | 2022.02.07 |
SpringBatch 전용 DB 테이블 (0) | 2022.02.07 |
SpringBatch (0) | 2022.02.07 |