기술과 산업/언어 및 프레임워크
Spring Boot 시리즈 25편 – 멀티 프로파일 설정 전략: dev/staging/prod 환경 분리 실전 가이드
B컷개발자
2025. 5. 4. 11:41
728x90
Spring Boot에서 dev, staging, prod 환경을 분리해 설정값을 관리하는 멀티 프로파일 전략을 소개합니다. 실무 기준의 yml 설정 구조와 운영 자동화를 함께 설명합니다.
Spring Boot 시리즈 25편 – 멀티 프로파일 설정 전략: dev/staging/prod 환경 분리 실전 가이드
실제 서비스에서는 하나의 코드를 가지고도
개발, 테스트, 운영 환경에서 다른 설정을 적용해야 할 때가 많습니다.
이런 환경 분리를 효율적으로 지원하기 위한 핵심 기능이 바로
Spring Boot의 프로파일(Profile) 기능입니다.
이번 글에서는 실전 프로젝트 기준으로
- 개발(dev), 스테이징(staging), 운영(prod) 환경을 분리하는 구조
- 프로파일에 따른 설정값 자동 적용
- CI/CD 및 서버 배포 연계 전략
- 까지 통합적으로 다뤄보겠습니다.
📌 1. 프로파일이란?
Spring Boot에서는 --spring.profiles.active 값을 통해
환경별 설정(yml, bean, 설정 파일 등)을 선택적으로 적용할 수 있습니다.
✅ 2. yml 기반 멀티 프로파일 구성 방법
1️⃣ 기본 구조
src/
└── main/
└── resources/
├── application.yml
├── application-dev.yml
├── application-staging.yml
└── application-prod.yml
2️⃣ application.yml (공통 설정)
spring:
application:
name: my-service
profiles:
active: dev # 기본값 (배포 시 override 가능)
3️⃣ application-dev.yml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/dev_db
username: dev
password: dev123
4️⃣ application-prod.yml
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://prod-db:3306/prod_db
username: prod_user
password: secure-password
🛠️ 3. 프로파일별 Bean 설정 방법
@Configuration
public class CacheConfig {
@Bean
@Profile("dev")
public CacheManager devCacheManager() {
return new ConcurrentMapCacheManager();
}
@Bean
@Profile("prod")
public CacheManager redisCacheManager() {
// Redis 기반 설정
return new RedisCacheManager(...);
}
}
- 프로파일에 따라 특정 Bean만 생성 가능
- dev 환경에서는 가볍게, prod 환경에서는 확장성 있게 구성
⚙️ 4. 실행 시 프로파일 지정 방법
1️⃣ IntelliJ에서
- Edit Configurations → VM Options 입력:
-Dspring.profiles.active=staging
2️⃣ CLI로 실행 시
java -jar myapp.jar --spring.profiles.active=prod
3️⃣ Dockerfile 내 ENV 설정
ENV SPRING_PROFILES_ACTIVE=prod
🚀 5. 배포 자동화 연계 전략 (CI/CD)
항목적용 예시
GitHub Actions | .env 파일 내 SPRING_PROFILES_ACTIVE 설정 |
AWS CodeDeploy | EC2 UserData에서 export SPRING_PROFILES_ACTIVE=prod |
Kubernetes | env: 필드에 환경변수 지정 |
Jenkins | Build Parameter로 프로파일 설정 후 전달 |
🧠 실무 적용 팁
항목전략
yml 분리 기준 | DB, 외부 연동, 로그 레벨 등 환경별로 달라지는 값만 분리 |
민감 정보 처리 | application-prod.yml은 Git에 포함시키지 않도록 .gitignore 설정 또는 외부 Secrets 관리 |
Default fall-back | application.yml은 항상 공통 설정으로 유지 (모든 프로파일 공통 사용 가능) |
운영 안전성 | 운영 환경은 반드시 prod 고정, staging은 실서비스 직전 테스트로 구성 |
✅ 마무리 요약
항목요약
멀티 환경 설정 | Spring Boot의 application-*.yml 구조로 프로파일 분리 |
실행 제어 | --spring.profiles.active 로 환경별 설정 적용 |
Bean 조건부 생성 | @Profile("dev") 등으로 환경별 로직 분기 |
배포 전략 | CI/CD, Docker, Kubernetes 등과 연계 필수 |
운영 팁 | 보안 설정 분리, Git 관리 주의, 로깅/모니터링 환경별 분리 |
📌 다음 편 예고
Spring Boot 시리즈 26편: 운영 환경 로그 전략 – Logback, 로그 분리, Cloud 환경 대응까지
728x90