ABOUT ME

-

오늘
-
어제
-
-
  • SpringBoot - Profile(프로파일)
    Back-end/Spring 2020. 6. 27. 23:03

    Profile(프로파일)

    프로파일은 특정한 프로파일에서의 클래스의 빈을 등록하고 싶을 때 사용합니다.

    프로파일 선언하기

    프로파일을 실습하기 위해 두가지 클래스를 생성합니다.

    @Profile("prod")
    @Configuration
    public class TestConfiguration {
    
        @Bean
        public String hello() {
            return "hello";
        }
    }

     

    profile
    @Profile("test")
    @Configuration
    public class TestConfiguration {
    
        @Bean
        public String hello() {
            return "hello test";
        }
    }

     

    profile

    생성한 클래스를 빈으로 등록하고 @Profile("프로파일명")을 통해 프로파일 선언을 합니다.
    그리고 의존성 주입을 하고 실행을 합니다.

    profile

    hello 문자열을 찾을 수 없다는 오류를 볼 수 있습니다.
    이유는 프로파일 선언만 했지 어떤 프로파일인지 명시한 부분이 없습니다.

    프로파일 등록하기

    spring.profiles.active=prod

     

    profile

    그래서 properties에 어떤 프로파일을 등록할지 선택하여 출력할 수 있습니다.

    profile

    prod를 등록하여 출력하면 hello가 출력됩니다.

    profile

    반대로 test를 등록하여 출력하면 hello test가 출력됩니다.

    프로파일을 커맨드 라인으로 출력하기

    여기서도 마찬가지로 우선순위가 적용됩니다.

    mvn clean package -DskipTests
    java -jar target/XXX.jar --spring.profiles.active=prod

     

    profile

    앞서 공부한 것처럼 우선순위가 높기 때문에 test 프로파일을 패키징 했어도 커맨드 라인에서 prod를 선언하였더니 prod 프로파일에 해당되는 값이 출력되었습니다.

    이처럼 프로파일도 우선순위가 적용되는 것을 알 수 있습니다.

    profile

    그리고 program arguments에 직접 지정하여 리패키징 없이 계속 사용할 수도 있습니다.

    프로파일을 별도로 관리하기

    프로파일을 별도로 관리함으로써 가독성 높고 유지보수가 편리해집니다.
    spring.profiles.acive에 따라서 더 우선순위를 가지고 오버라이딩이 되는 특징을 가지고 있습니다.

    application-{profile}.properties 형식으로 생성합니다.

    profile

    그리고 각각의 key값에 대한 value를 선언합니다.

    profile

    결과를 보시면 알겠지만 우선순위에 따라 기존 properties에 있는 junjang보다 active에 선언된 프로파일이 우선순위가 높은 것을 알 수 있습니다.

    프로파일에 대한 파일 자체를 포함시키기

    이는 프로파일 파일 자체를 포함시킴으로서 포함시킨 프로파일을 출력하면 같이 포함되어 출력되게 합니다.

    동일하게 properties를 생성합니다.

    spring.profiles.include=proddb

     

    profile

    새롭게 생성한 파일에 key, value값을 선언하고 include하여 prod 프로파일에 포함시킵니다.

    profile

    출력하면 포함된 proddb 프로파일이 출력된 것을 볼 수 있습니다.

    'Back-end > Spring' 카테고리의 다른 글

    SpringBoot - Test(테스트)  (0) 2020.06.27
    SpringBoot - Logging(로깅)  (0) 2020.06.27
    SpringBoot - Configuration(외부설정)  (0) 2020.06.27
    SpringBoot - SpringApplication  (0) 2020.06.27
    SpringBoot - JAR  (0) 2020.06.27

    댓글