전 프로젝트에서는 "Profile 별로 모든 설정"을 각각 관리했는데 이번 프로젝트에서는 "공통 설정 + Profile별 설정"을 분리해서 관리한다. 프로젝트마다 환경을 다루는 방법에 차이가 존재하는데 이번 기회에 "공통 설정 + Profile별 설정"에 대해 알아볼 겸 정리하려 해 본다.
application.yml과 Profile
application.yml 혹은 application.properties는 Spring Boot 애플리케이션 구동 시 자동으로 로드되는 구성 파일이다.
Key-Value 혹은 yml 포맷을 통해 애플리케이션에서 사용할 설정 값을 정의한다.
설정 값 예시 |
서버 포트 |
DB 접속 정보 |
로그 레벨 설정 |
외부 API Token 정보 |
application-{profile}.yml
일반적으로 운영(Prod), 개발(Dev), 로컬(Local) 환경별로 서로 다른 설정이 필요할 경우, application-{profile}.yml 형식으로 파일을 구성한다.
예시 |
application-local.yml |
application-dev.yml |
application-prod.yml |
Spring Boot가 구동되면 우선 공통 설정 파일(application.yml)을 먼저 읽어 들이고, 이후 활성화된 Profile(application-{profile}.yml)을 덮어쓰는 방식으로 설정을 완료한다.
우선순위
1. Jar 내부의 application.yml
2. Jar 내부의 application-{profile}.yml
3. Jar 외부의 application.yml
4. Jar 외부의 application-{profile}.yml
profile 별 환경설정 분리 시 장단점
Profile 별로 모든 설정을 각각 관리
장점 | 단점 |
각 Profile 별로 설정이 완전히 분리되어 있어 독립적인 설정 보장을 받기 쉽다. | 공통 설정(예: 서버 포트, 로깅 레벨, Swagger 설정) 등이 변경되었을 때, 모든 Profile 파일에서 중복된 내용을 일일이 수정해야 한다. |
설정 항목이 많아질수록 유지보수가 번거롭다. |
공통 설정 + Profile별 설정 분리 관리 방법
공통 설정을 단 한 곳(application.yml)에서만 변경하면 되므로 유지보수가 편리하고, 각 Profile이 달라야 하는 설정만 추가로 관리할 수 있다.
application.yml + application-{profile}.yml
공통 설정 파일 | Profile별 설정 파일 |
application.yml, 모든 환경에서 공통적으로 사용되는 설정을 정의 | application-{profile}.yml, 환경에 따라 달라지는 설정만 정의 |
서버 포트, 로깅 설정, Swagger, 배너 등 | DB 연결 정보, 외부 API 엔드포인트, 보안 토큰 등 |
@Value 사용 예시
@Value 어노테이션을 이용하면 설정 파일에 정의된 Key를 직접 읽어 필드에 주입할 수 있다.
위 클래스는 Spring의 Bean으로 등록해야 하므로 @Component 어노테이션을 선언해야 하며, 설정 Key가 잘못되면(Spring Boot가 찾아낼 수 없으면) 애플리케이션 구동 시점에 에러가 발생할 수 있다.
@ConfigurationProperties 사용 예시
@ConfigurationProperties(prefix = "message.api")를 활용하면 객체 형태로 설정을 한꺼번에 바인딩할 수 있다.
공통 설정 로드테스트
application-dev.yml을 활성화하여 테스트할 경우 @ActiveProfiles("dev")를 사용한다.
spring.config.import
Spring Boot 2.4부터 spring.config.import 속성을 이용해 별도의 설정 파일(.properties 등)을 추가로 불러올 수 있다.
'Dev > Spring Framework' 카테고리의 다른 글
『Spring Cloud』 리전에 따라 경로에 차이가 생기면 어떻게 해결할까? (0) | 2025.01.27 |
---|---|
『Spring Boot』 선언적 트랜잭션(Declarative Transaction) (0) | 2025.01.12 |
『Spring Batch』 스프링 배치 반복 및 오류 제어 (0) | 2024.12.10 |
『Spring Batch』 스프링 배치 메타 데이터 스키마 (2) | 2024.12.09 |
『Spring Batch』 스프링 배치 도메인 이해 (0) | 2024.12.07 |