목록으로
'언젠가 읽기' 컨텐츠는 논문이나 영문 컨텐츠 등 언젠가 읽으려고 즐겨찾기 하고선 읽지 않고 계속 미룰만한 컨텐츠를 읽고 요약하거나 소개합니다.

Spring 기반 멀티모듈 프로젝트 환경 변수 설정 방법

언젠가 읽기
2025. 2. 13. PM 2:30:13

시작하며

카카오페이에서 Spring 기반의 멀티모듈 프로젝트를 활용하여 서비스를 개발하고 있습니다. 요구사항의 증가와 도메인 확장으로 인해 여러 모듈을 추가하게 되었고, 각 모듈마다 필요한 환경변수를 설정하기 위해 yml 또는 properties 파일을 작성하고 있습니다. 그러나 입사 초기 여러 프로젝트를 리뷰하면서 팀마다 환경변수 설정 방식이 다르고, 설정 방법에 대한 취향 차이가 있음을 발견했습니다. 이 글에서는 다양한 환경변수 설정 방법을 소개하고, 최적의 방식을 선택한 과정을 공유하고자 합니다.

멀티모듈과 환경변수

멀티모듈의 정의와 장점

멀티모듈 프로젝트는 여러 개의 독립된 모듈로 구성되어 각각 독립적으로 빌드되고 배포될 수 있습니다. 이를 통해 코드의 재사용성을 높이고, 모듈 간 의존성을 명확히 하여 유지보수성을 향상시킬 수 있습니다. 예를 들어, 머니 송금 API를 사용하는 여러 API 모듈이 있을 경우, 공통된 client 모듈을 통해 구현체를 공유함으로써 코드 중복을 줄이고, API 스펙 변경 시 한 곳에서만 수정하면 전체 모듈에 반영할 수 있습니다.

멀티모듈에서의 환경변수 파일 관리

API 스펙 변경 시, 호스트, 경로, 토큰과 같은 환경변수는 yml 또는 properties 파일로 관리됩니다. 이러한 파일은 어느 모듈에 두어야 하는지, 프로필마다 다른 값을 적용하려면 어떻게 해야 하는지 고민이 필요합니다. 특히, 여러 모듈에서 재사용 가능한 환경변수 설정이 중요한데, 이를 체계적으로 관리하는 방법이 필요합니다.

환경변수 설정 방법

1. spring.config.import 를 이용한 환경변수 설정

application.yml 파일에 spring.config.import 를 추가하여 다른 모듈의 yml 파일을 불러오는 방식입니다. 직관적이지만, 파일 경로 관리가 복잡해질 수 있습니다.

2. spring.profiles.include 를 활용한 설정

프로필을 포함시켜 공통 설정을 적용할 수 있습니다. 특정 프로필이 활성화될 때 추가적인 설정 파일을 로드하는 방식으로 유연성을 높일 수 있습니다.

3. @PropertySource 를 사용한 설정

Java 애플리케이션 클래스에 @PropertySource 어노테이션을 사용하여 외부 설정 파일을 로드합니다. 코드와 설정 파일을 명확히 분리할 수 있지만, 프로파일 적용이 제한적일 수 있습니다.

4. @Profile @PropertySource 의 조합

@Profile @PropertySource 를 함께 사용하여 특정 프로필에 따라 다른 설정 파일을 로드합니다. 이를 통해 프로필별로 환경변수를 유연하게 관리할 수 있으며, 유지보수성이 높아집니다.

선택한 방법과 그 이유

저희 팀은 위의 네 가지 방법 중 @Profile @PropertySource 의 조합을 선택했습니다. 이 방법은 프로필별로 다른 설정 파일을 손쉽게 관리할 수 있어 환경변수 설정을 체계적으로 관리할 수 있습니다. 또한, 모듈 간 의존성을 명확히 하고, 유지보수성을 높이는 데 효과적이었습니다.

결론

Spring 기반의 멀티모듈 프로젝트에서 환경변수 설정은 프로젝트의 복잡성을 줄이고 유지보수성을 높이는 데 중요한 역할을 합니다. 다양한 설정 방법을 비교 분석하여 최적의 방식을 선택함으로써 효율적인 환경변수 관리를 실현할 수 있습니다. 팀 내 일관된 설정 방식을 도입하여 프로젝트의 안정성과 확장성을 확보할 수 있었습니다.

참고 자료

  • Spring Documentation
  • 멀티모듈 프로젝트 관리 가이드
  • 효과적인 환경변수 관리 전략