본문 바로가기
Java & Spring

application-{profile}.yml 전략 + 비밀키 분리

by yamoojin83 2025. 9. 30.

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패턴 + 중복실행 방지

👉 6편: 멀티파트 업로드: 제한/보안/임시저장 설계

👉 7편: Spring Cache로 API 3배 빠르게(@Cacheable/무효화)

👉 8편: Pageable 응답 DTO 규격(정렬·페이지 표준화)