일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- CloudWatch
- 기록으로 실력을 쌓자
- aws
- docker
- APM
- PETERICA
- Pinpoint
- 정보처리기사 실기 기출문제
- Java
- tucker의 go 언어 프로그래밍
- AI
- Linux
- Elasticsearch
- kotlin querydsl
- 오블완
- minikube
- kotlin
- Kubernetes
- mysql 튜닝
- CKA 기출문제
- CKA
- 코틀린 코루틴의 정석
- 티스토리챌린지
- Spring
- go
- AWS EKS
- golang
- kotlin coroutine
- 공부
- 정보처리기사실기 기출문제
- Today
- Total
피터의 개발이야기
[Spring] Spring Boot 설정 로드 우선순위 본문
ㅁ 들어가며
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)이 모두 존재할 경우, 활성화된 프로파일에 따라 프로파일별 설정 파일의 값이 우선적으로 로드된다.
- 기본 설정 파일 (application.yaml)
모든 환경에서 공통적으로 사용되는 기본값을 정의한다. - 프로파일별 설정 파일 (application-{profile}.yaml)
특정 프로파일이 활성화되었을 때 해당 프로파일의 값을 사용한다.
이 값은 기본 설정 파일의 값을 오버라이드한다. - 외부 설정 파일
애플리케이션 외부에서 제공된 설정 파일이 있다면 내부 설정보다 우선한다. - 명령줄 인자
실행 시 전달된 명령줄 인자가 가장 높은 우선순위를 가진다.
ㅁ 예시
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 파일로 분리하여 설정 가독성을 높일 . 수 있지만, 우선순위를 잘못 적용하면 올바른 설정에 반영되지 않을 수 있다. 프로파일별 설정은 기본 설정파일보다 우선적으로 적용되는 점을 제대로 몰라서 헷갈렸는데, 이번 글을 통해 설정 우선순위를 정리할 수 있었다.
ㅁ 함께 보면 좋은 사이트
'Programming > Spring' 카테고리의 다른 글
[Spring] MultipartFile.transferTo(): 파일 업로드의 효율적 방법 (1) | 2025.02.13 |
---|---|
[Spring] netty tcpClient 설정방법, Read Timeout을 1초로 설정했는데 1.5초가 걸리는 이유 (0) | 2025.02.07 |
[Spring] @Cacheable 사용법 (1) | 2024.11.27 |
[Spring] JIB으로 JAVA 애플리케이션 컨테이너화하기 (2) | 2024.11.15 |
[Spring] RestTemplate의 Connection Timeout 설정과 에러 패턴 (0) | 2024.11.14 |