application-{profile}.yml 전략 + 비밀키 분리
설정은 환경별로 다르고, 비밀키는 코드 저장소에 두면 안 됩니다.
스프링 프로파일과 외부화 설정을 조합해, 안전하고 재현 가능한 환경 구성을 만듭니다.
폴더 구조
src/main/resources/
application.yml
application-dev.yml
application-staging.yml
application-prod.yml
프로파일 병합 규칙
application.yml이 기본값, application-prod.yml이 오버레이합니다. --spring.profiles.active=prod로 활성화합니다.
예시
# application.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/app
username: app
server:
port: 8080
# application-prod.yml
spring:
datasource:
url: jdbc:postgresql://prod-db:5432/app
server:
port: 8080
logging:
level:
root: INFO
비밀키 분리
- 환경변수:
SPRING_DATASOURCE_PASSWORD - 커맨드라인:
--spring.datasource.password=... - 외부 파일:
--spring.config.additional-location=file:/etc/app/ - Vault/KMS: 런타임에 주입(Cloud Config, AWS Parameter Store 등)
도커/쿠버네티스 예시
# Docker
docker run -e SPRING_PROFILES_ACTIVE=prod \
-e SPRING_DATASOURCE_PASSWORD=secret \
-p 8080:8080 myapp:1.0
운영 팁
- 값이 같은 설정은
application.yml에, 다른 값만 프로파일 파일로 분리. - 민감정보는 절대 Git에 커밋 금지. 샘플은
application-sample.yml로 제공.
FAQ
Q1. 로컬에서만 override하려면?
A. application-local.yml + SPRING_PROFILES_ACTIVE=local.
Q2. yml 대신 properties?
A. 팀 선호에 따라 자유. 구조적 중첩이 많으면 yml이 가독성이 좋습니다.
👉 1편: Bean Validation(@Valid)로 입력 검증 표준 만들기
👉 2편: @ControllerAdvice 글로벌 예외 응답(에러코드 규격)
👉 3편: application-{profile}.yml 전략 + 비밀키 분리
👉 4편: Spring Boot Actuator: /health 커스터마이징
👉 5편: @Scheduled 크론 12패턴 + 중복실행 방지
'Java & Spring' 카테고리의 다른 글
| @Scheduled 크론 12패턴 + 중복실행 방지 (0) | 2025.09.30 |
|---|---|
| Spring Boot Actuator: /health 커스터마이징 (0) | 2025.09.30 |
| @ControllerAdvice 글로벌 예외 응답(에러코드 규격) (0) | 2025.09.29 |
| Bean Validation(@Valid)로 입력 검증 표준 만들기 (0) | 2025.09.29 |
| 예외 처리 베스트 프랙티스(체크/언체크, 경계 설계) (0) | 2025.09.29 |