스프링 프로파일 (Spring profile) 을 통해 환경별로 다른 설정을 해보자

2016. 11. 24. 14:36·Java/Spring
반응형

Spring Profiles를 통한 환경별 설정

Spring에서는 spring.profiles.active라는 프로퍼티를 이용해 현재 활성화된 프로파일(환경)을 지정할 수 있습니다. 이를 활용하면 개발(development), 운영(production), 로컬(local) 등 다양한 환경마다 다른 설정파일을 로드하거나 다양한 빈 설정을 적용할 수 있습니다.

주의사항

  • Maven Profile과는 별개의 개념이므로 혼동하지 않도록 주의하세요. Maven Profile은 빌드 시점에 적용되는 것이며, Spring Profile은 런타임 시점에 활성화되는 설정입니다.
    Maven Profile 설정은 관련 문서를 참고하세요.

프로파일 설정 방법

다음은 spring.profiles.active 값을 설정하는 여러 가지 방법입니다.

  1. 빌드 시 JVM 프로퍼티를 통한 설정

     java -jar -Dspring.profiles.active=dev my-app.jar

    위와 같이 실행 시에 -D 옵션으로 프로파일을 지정할 수 있습니다.

  2. web.xml을 통한 설정

    web.xml 파일 내 context-param을 통해 프로파일을 지정할 수 있습니다.

     <context-param>
         <param-name>spring.profiles.active</param-name>
         <param-value>production</param-value>
     </context-param>
  3. Tomcat 기동 스크립트(catalina.sh)에서 설정

    catalina.sh 내 JAVA_OPTS 설정에 프로파일을 추가합니다.

     JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=local"
  4. Tomcat의 catalina.properties를 통한 설정

    catalina.properties 파일에 다음과 같이 추가할 수 있습니다. 이때 -D를 빼고 작성해야 합니다.

     spring.profiles.active=dev

중복된 설정에 대한 우선순위

경험적으로 확인한 결과, web.xml에 설정한 프로파일이 최우선적으로 적용됩니다. 즉, Tomcat 설정 파일 등에 프로파일이 지정되어 있더라도 web.xml이 우선하기 때문에, 웹 애플리케이션 내부에 지정된 프로파일이 있다면 외부 설정은 무시될 수 있습니다.

프로파일별 Properties 파일 로딩

spring.profiles.active에 따라 다른 properties 파일을 읽도록 설정할 수 있습니다. 예를 들어 development.properties, production.properties를 classpath 아래에 두고, 활성화된 프로파일에 따라 알맞은 파일을 로드하도록 할 수 있습니다.

아래 예제에서는 PropertiesFactoryBean을 사용하여 활성화된 프로파일에 맞춰 프로퍼티를 동적으로 로딩합니다.

<bean id="config" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
        <list>
            <value>classpath:/#{systemProperties['spring.profiles.active']}.properties</value>
        </list>
    </property>
</bean>

예를 들어, spring.profiles.active=dev로 설정되어 있다면 dev.properties 파일을 로딩하게 됩니다.

추가 팁: 로컬(Spring) 환경 설정을 Tomcat에서 사용할 경우

로컬 개발 환경에서 Tomcat을 이용해 어플리케이션을 기동하는 경우에도 spring.profiles.active를 적용할 수 있습니다. 이 경우 Eclipse IDE에서 Tomcat 실행 환경 설정을 통해 프로파일을 지정하거나, 위에서 언급한 catalina.sh, catalina.properties 등을 활용할 수 있습니다.

참고 자료:

  1. Setting spring.profile variable (StackOverflow)
  2. jdm.kr 블로그 포스팅

위와 같이 Spring Profiles를 활용하면 환경별로 서로 다른 설정을 간편하게 관리할 수 있으며, 개발-테스트-운영 환경 전환 시 유연한 대응이 가능합니다.

반응형
저작자표시 (새창열림)

'Java > Spring' 카테고리의 다른 글

스프링의 트랜잭션 처리  (0) 2022.02.27
Spring 에서 런타임 환경에서 프로퍼티 값을 변경하는 방법  (0) 2021.12.18
Spring 내에서 리소스 불러오기  (0) 2016.11.18
스프링 Properties 파일을 이용해서 설정하기  (0) 2016.11.18
Mybatis + Myabtis Spring 사용시 마이바티스 설정파일 사용법  (0) 2016.11.14
'Java/Spring' 카테고리의 다른 글
  • 스프링의 트랜잭션 처리
  • Spring 에서 런타임 환경에서 프로퍼티 값을 변경하는 방법
  • Spring 내에서 리소스 불러오기
  • 스프링 Properties 파일을 이용해서 설정하기
Ethan Kang
Ethan Kang
Digital nomad + Software Engineer
    반응형
  • Ethan Kang
    Software Engineer Ethan
    Ethan Kang
  • 전체
    오늘
    어제
    • Programming (105)
      • Java (22)
        • Spring Framework (6)
        • Spring (8)
        • Spring Security (0)
        • JPA (3)
        • MyBatis (1)
        • Servlet, JSP (2)
      • DevOps (4)
        • Kubernetes (2)
        • Docker (1)
        • Terraform (0)
        • Jenkins (0)
        • Bazel (1)
      • Front-End (18)
        • ReactJS (0)
        • Typescript (3)
        • JQuery (1)
        • Java Script (13)
        • RxJS (0)
        • CSS (1)
      • Messaging Queue (1)
        • Kafka (1)
      • Linux (Ubuntu based) (8)
        • Ubuntu (0)
        • CentOS (2)
        • Shell Scripting (2)
      • PHP (5)
        • Laravel (2)
        • PHP 문법 (3)
      • Go (1)
        • Basics (1)
      • Python (16)
        • Flask (1)
        • Django (4)
      • App Development (4)
        • Android (1)
        • Cordova (0)
        • React Native (0)
        • Hybrid Programming (2)
        • IOS (1)
      • Database (4)
        • SQL (0)
        • My SQL (4)
        • MongoDB (0)
      • Shader Programming (0)
      • Tools (5)
        • GIT (2)
      • C# (3)
        • ASP.NET MVC (2)
        • CSharp 파헤치기 (1)
      • 서평 (1)
      • ETC (4)
        • C++ (0)
        • Geo Server (0)
        • NodeJS2 (0)
        • Ruby (2)
        • Elastic Search (0)
        • Camera (0)
        • Open Source (2)
        • WebVR (0)
      • 소프트웨어 이론 (2)
        • TDD (1)
        • Architecture (1)
        • WEB DEV (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 컬러스크립터
  • 공지사항

    • 좋은 프로그래머가 되는 24가지 방법
  • 인기 글

  • 태그

    mybatis
    VersionControl
    스프링
    django #장고
    Python
    psr-4
    자바
    mysql데이터복구
    JPA
    N+1
    java
    autoloading
    스프링데이타
    데이터베이스
    spring
    이미지 #jsp
    mysql
    Kotlin
    db
    데이터베이스캐쉬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Ethan Kang
스프링 프로파일 (Spring profile) 을 통해 환경별로 다른 설정을 해보자
상단으로

티스토리툴바