기술과 산업/언어 및 프레임워크

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