ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot 고급 시리즈 4화 – 프로파일 기반 구성 전략 완전 정복
    기술과 산업/언어 및 프레임워크 2025. 6. 9. 19:26
    728x90

    Spring Boot의 @Profile, application-{profile}.yml, 외부 설정 등 다양한 프로파일 기반 구성 전략을 정리합니다. 운영 환경 분리에 따른 실무 적용 예제도 포함되어 있습니다.

     

    Spring Boot는 다양한 실행 환경(개발, 테스트, 스테이징, 운영 등)에 맞춰 설정을 유연하게 분리하고 적용할 수 있도록 프로파일(Profile) 기능을 제공합니다. 실무에서는 이 기능을 얼마나 잘 활용하느냐에 따라 프로젝트의 유지보수성과 안정성이 크게 달라집니다. 이번 글에서는 프로파일을 기반으로 한 구성 전략을 심층적으로 파헤쳐봅니다.


    1. 프로파일이란 무엇인가?

    Spring의 프로파일은 조건부 Bean 등록 및 설정 파일 분리를 가능하게 해주는 기능입니다.
    예를 들어, 개발 환경에서는 H2 DB, 운영 환경에서는 MySQL을 사용해야 할 경우, 각 환경에 맞는 설정을 분리하여 관리할 수 있습니다.

    @Configuration
    @Profile("dev")
    public class DevDataSourceConfig {
        // 개발용 설정
    }
    
    @Configuration
    @Profile("prod")
    public class ProdDataSourceConfig {
        // 운영용 설정
    }
    

    활성화된 프로파일에 따라 해당 Bean만 등록되며, 그 외 설정은 무시됩니다. 이는 복잡한 설정 충돌을 피할 수 있는 실용적인 전략입니다.


    2. 프로파일 별 application 설정 분리

    Spring Boot는 기본적으로 application.yml 또는 application.properties 파일을 사용합니다. 여기에 다음과 같이 환경별 설정을 분리할 수 있습니다:

    application.yml
    application-dev.yml
    application-prod.yml
    application-test.yml
    

    application.yml 내부에 아래와 같이 공통 및 프로파일별 include 구성이 가능합니다.

    spring:
      profiles:
        active: dev
        group:
          dev:
            - common
            - local-db
          prod:
            - common
            - prod-db
    

    이 방식은 복잡한 환경 설정을 그룹 기반으로 유연하게 구성할 수 있도록 해주며, 유지보수에 큰 이점을 줍니다.


    3. 프로파일 활성화 방법

    다양한 방식으로 프로파일을 활성화할 수 있습니다.

    1. application.yml
    2. spring: profiles: active: dev
    3. JVM 옵션
    4. -Dspring.profiles.active=prod
    5. 환경 변수
    6. SPRING_PROFILES_ACTIVE=prod
    7. 테스트 코드에서 직접 지정
    8. @ActiveProfiles("test") public class MyServiceTest { ... }

    각 방식은 목적과 환경에 따라 다르게 사용되며, 컨테이너 기반 배포 시에는 환경 변수를 통해 동적으로 설정하는 방법이 가장 선호됩니다.


    4. 실무 적용 시 고려 사항

    • YAML 파일 과도 분리 주의: 환경별로 파일이 너무 많아지면 관리가 어려워집니다. 공통 설정과 차이점만 분리하는 전략이 효과적입니다.
    • 프로파일 누락 테스트: default 프로파일이나 fallback 구성이 없을 경우, 프로파일 미지정 시 애플리케이션이 비정상적으로 동작할 수 있습니다.
    • CI/CD 연동 고려: GitHub Actions, Jenkins 등에서 환경 변수 자동 주입 구조를 설계해두면 편리합니다.

    5. 실전 예시: 운영환경 안전장치 구성

    운영 환경에서는 종종 다음과 같은 안전 장치를 구성합니다.

    @PostConstruct
    public void checkEnvironment() {
        if (!Arrays.asList(env.getActiveProfiles()).contains("prod")) {
            throw new IllegalStateException("프로덕션 환경에서만 실행 가능");
        }
    }
    

    이 코드는 특정 작업이 운영 환경에서만 수행되도록 제한하는 로직입니다. 실수로 개발 환경에서 실행되는 것을 방지합니다.


    6. 테스트 환경의 격리 전략

    테스트 시에는 application-test.yml을 분리하고, 테스트 전용 DB 및 서비스 모킹 설정을 포함합니다.
    Spring Boot 3.x 이후부터는 테스트 컨테이너 연동이나 TestConfiguration 등 고급 전략도 적극 활용됩니다.


    맺으며

    Spring Boot의 프로파일 기능은 단순한 개발 편의성을 넘어서, 실질적인 운영 환경 안전성 확보 및 유지보수성 향상에 핵심적인 역할을 합니다.
    단순히 설정 파일을 나눈다는 수준이 아니라, 전략적인 구성과 테스트 전략까지 포함하여 통합적으로 설계하는 것이 중요합니다.

    728x90
Designed by Tistory.