본문으로 건너뛰기
개발 머꼬
개발 노트Spring
hohyeon.dev20

Spring Boot 프로필을 잘못 설정해 로컬 설정이 운영에 올라간 사고

  • #DevOps
  • #Engineering Note
  • #Spring
  • #Spring Boot

문제 발생

로컬 개발 중 application.ymlspring.profiles.active: local을 임시로 넣어뒀는데, 그 파일이 그대로 커밋되어 운영 배포에도 local 프로필이 활성화된 채로 올라갔습니다. 운영 DB 대신 로컬 설정이 적용되어 즉시 장애로 이어졌습니다.

# application.yml (실수로 커밋됨)
spring:
  profiles:
    active: local

원인 분석

Spring Boot의 프로필 활성화는 여러 경로에서 설정할 수 있고, 각 경로마다 우선순위가 다릅니다. application.yml에 직접 spring.profiles.active를 하드코딩하면, 실행 환경과 무관하게 그 값이 기본으로 깔리고, 배포 스크립트에서 별도로 프로필을 지정하지 않으면 그대로 적용됩니다. 문제는 "로컬에서만 쓰려던 임시 설정"이 코드베이스에 섞여 있다가, 그 사실을 잊은 채 배포되는 경우가 실무에서 반복적으로 발생한다는 점입니다.

해결 방안

  1. application.yml(공통 설정)에는 프로필을 하드코딩하지 않습니다. 프로필은 실행 시점에 외부에서 주입하는 것이 원칙입니다.
# 실행 시 지정 (JVM 옵션)
java -jar app.jar --spring.profiles.active=prod

# 또는 환경변수
export SPRING_PROFILES_ACTIVE=prod
  1. 프로필별 설정은 application-local.yml, application-prod.yml처럼 별도 파일로 분리하고, 공통 설정(application.yml)에는 프로필 무관하게 항상 적용될 값만 둡니다.
  2. 민감한 값(DB 비밀번호, API 키)은 애초에 .yml 파일에 두지 않고 환경변수나 별도 secret 관리 도구(Vault 등)로 주입합니다 — 이러면 "어떤 프로필이 활성화됐는지"와 무관하게 실수로 잘못된 비밀값이 커밋될 위험 자체가 없어집니다.
  3. CI/CD 파이프라인에서 배포 대상 환경에 맞는 프로필을 명시적으로 지정하도록 강제하고(--spring.profiles.active=$DEPLOY_ENV 같은 식), 이 값이 비어 있으면 배포가 실패하도록 만들어 "프로필을 깜빡하고 안 지정하는" 실수 자체를 차단합니다.
  4. application.yml에 실수로 민감한 값이나 로컬 전용 설정이 들어가지 않았는지 코드 리뷰 체크리스트에 포함시킵니다.

공식 문서

마지막 수정

좋아요북마크

댓글0

아직 댓글이 없어요. 첫 의견을 편하게 남겨 보세요.