Spring Boot 프로필을 잘못 설정해 로컬 설정이 운영에 올라간 사고
문제 발생
로컬 개발 중 application.yml에 spring.profiles.active: local을 임시로 넣어뒀는데, 그 파일이 그대로 커밋되어 운영 배포에도 local 프로필이 활성화된 채로 올라갔습니다. 운영 DB 대신 로컬 설정이 적용되어 즉시 장애로 이어졌습니다.
# application.yml (실수로 커밋됨)
spring:
profiles:
active: local원인 분석
Spring Boot의 프로필 활성화는 여러 경로에서 설정할 수 있고, 각 경로마다 우선순위가 다릅니다. application.yml에 직접 spring.profiles.active를 하드코딩하면, 실행 환경과 무관하게 그 값이 기본으로 깔리고, 배포 스크립트에서 별도로 프로필을 지정하지 않으면 그대로 적용됩니다. 문제는 "로컬에서만 쓰려던 임시 설정"이 코드베이스에 섞여 있다가, 그 사실을 잊은 채 배포되는 경우가 실무에서 반복적으로 발생한다는 점입니다.
해결 방안
application.yml(공통 설정)에는 프로필을 하드코딩하지 않습니다. 프로필은 실행 시점에 외부에서 주입하는 것이 원칙입니다.
# 실행 시 지정 (JVM 옵션)
java -jar app.jar --spring.profiles.active=prod
# 또는 환경변수
export SPRING_PROFILES_ACTIVE=prod- 프로필별 설정은
application-local.yml,application-prod.yml처럼 별도 파일로 분리하고, 공통 설정(application.yml)에는 프로필 무관하게 항상 적용될 값만 둡니다. - 민감한 값(DB 비밀번호, API 키)은 애초에
.yml파일에 두지 않고 환경변수나 별도 secret 관리 도구(Vault 등)로 주입합니다 — 이러면 "어떤 프로필이 활성화됐는지"와 무관하게 실수로 잘못된 비밀값이 커밋될 위험 자체가 없어집니다. - CI/CD 파이프라인에서 배포 대상 환경에 맞는 프로필을 명시적으로 지정하도록 강제하고(
--spring.profiles.active=$DEPLOY_ENV같은 식), 이 값이 비어 있으면 배포가 실패하도록 만들어 "프로필을 깜빡하고 안 지정하는" 실수 자체를 차단합니다. application.yml에 실수로 민감한 값이나 로컬 전용 설정이 들어가지 않았는지 코드 리뷰 체크리스트에 포함시킵니다.
댓글0
댓글을 남기려면 로그인이 필요해요. 로그인
아직 댓글이 없어요. 첫 의견을 편하게 남겨 보세요.