관리 메뉴

피터의 개발이야기

[Spring] Spring Boot 설정 로드 우선순위 본문

Programming/Spring

[Spring] Spring Boot 설정 로드 우선순위

기록하는 백앤드개발자 2025. 3. 13. 00:53
반응형

ㅁ 들어가며

Spring Boot에서 application.yaml 파일을 사용하여 base-info를 지정하고 프로파일에 따라 다르게 설정하는 과정에서 헷갈리는 부분이 있었다. Spring Boot 설정 시 프로파일에 따라 설정 로드 우선 순위가 있었다. 단일 파일에서 active profile에 따른 선택적 설정방법과  application.yaml과 application-{profile}.yaml이 모두 존재할 경우 설정의 우선 순위에 대해서 정리하였다. 예를 들어 base-info를 기준으로 설명하였다.

 

핵심
프로파일별 설정 파일은 기본 설정 파일보다 항상 우선적으로 적용되며, 기본 정보에 오버라이딩하여 최종적으로  active profile에 따른 설정을 우선 시 한다.

 


ㅁ active profile에 따른 선택적 설정방법

# 공통 설정
base-info:
  company: MyCompany
  version: 1.0

---
spring:
  config:
    activate:
      on-profile: dev

base-info:
  environment: Development
  debug-mode: true

---
spring:
  config:
    activate:
      on-profile: prod

base-info:
  environment: Production
  debug-mode: false

ㅇ Spring Boot에서 application.yaml 파일에 공통 base-info 설정을 정의

ㅇ 프로파일별 '---'으로 설정을 구분하면, 각 프로파일에 대한 base-info 설정을 오버라이드된다.

ㅇ 설정 예시 

 - 공통:  base-info는 모든 프로파일에 적용

 - dev: environment가 Development로, debug-mode가 true로 설정

 - prod: environment가 Production으로, debug-mode가 false로 설정

 

 ㅁ 프로파일 활성화 방법

# cmd
java -jar myapp.jar --spring.profiles.active=dev

# 환경변수
export SPRING_PROFILES_ACTIVE=dev

# application.yaml
spring:
  profiles:
    active: dev

 


 

ㅁ Spring Boot 설정 파일 로드 우선순위

ㅇ Spring Boot에서 application.yaml과 프로파일별 설정 파일(application-sandbox.yaml)이 모두 존재할 경우, 활성화된 프로파일에 따라 프로파일별 설정 파일의 값이 우선적으로 로드된다.

 

  1. 기본 설정 파일 (application.yaml)
    모든 환경에서 공통적으로 사용되는 기본값을 정의한다.
  2. 프로파일별 설정 파일 (application-{profile}.yaml)
    특정 프로파일이 활성화되었을 때 해당 프로파일의 값을 사용한다.
    이 값은 기본 설정 파일의 값을 오버라이드한다.
  3. 외부 설정 파일
    애플리케이션 외부에서 제공된 설정 파일이 있다면 내부 설정보다 우선한다.
  4. 명령줄 인자
    실행 시 전달된 명령줄 인자가 가장 높은 우선순위를 가진다.

 

ㅁ 예시

base-info:
  company: DefaultCompany
  environment: DefaultEnvironment

ㅇ application.yaml

 

base-info:
  company: SandboxCompany
  environment: SandboxEnvironment

ㅇ application-sandbox.yaml

 

spring:
  profiles:
    active: sandbox

ㅇ sandbox로 profile을 활성화 하면, application-sandbox.yaml을 로드한다.

ㅇ application.yaml에 정의된 base-info는 기본값으로 사용되지만, 동일한 키가 application-sandbox.yaml에 존재하면 해당 값이 오버라이드된다.

ㅇ 최종적으로 base-info.company는 SandboxCompany, base-info.environment는 SandboxEnvironment로 설정된다.

프로파일별 설정 파일은 기본 설정 파일보다 항상 우선적으로 적용된다.
ㅇ 동일한 키를 여러 곳에서 정의한 경우, 가장 높은 우선순위의 값이 최종적으로 사용된다.

 

 

ㅁ 마무리

 설정 정보가 방대한 경우 하나의 application.yaml로 편집하기 어려울 때가 있다. 이런 경우 profile 파일로 분리하여 설정 가독성을 높일 . 수 있지만, 우선순위를 잘못 적용하면 올바른 설정에 반영되지 않을 수 있다. 프로파일별 설정은 기본 설정파일보다 우선적으로 적용되는 점을 제대로 몰라서 헷갈렸는데, 이번 글을 통해 설정 우선순위를 정리할 수 있었다. 

 

ㅁ 함께 보면 좋은 사이트

[Spring] Profle 적용 방법 및 우선 순위

[Spring Boot] application.yml 설정 파일 우선순위에 대한 내용 정리

반응형
Comments