본문 바로가기
Java & 스프링/스프링부트 톺아보기

[스프링 부트] 프로파일

by hjhello423 2019. 10. 3.

스프링 부트에서 프로파일을 지정해 보자

지금부터 설명할 내용은 아래 doc 문서에서 확인할 수 있다.

https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/reference/htmlsingle/#boot-features-profiles

 


일단 prod와 test환경으로 application을 실행했을 때 각각의 환경에 맞는 설정 파일을 사용하도록 해볼 것이다.

 

먼저 properties파일에 프로파일을 지정해 보자

아래와 같이 spring.profiles.active에 prod나 test와 같이 사용할 환경을 지정해 주면 된다.

my.name = hongjun
spring.profiles.active=prod

 

properties에 프로파일을 지정했으므로 이제 @Configuration을 이용한 class파일을 생성해 보자

prod에서 사용할 BaseConfiguration파일과 test에서 사용할 TestConfiguration을 생성할 것이다.

@Profile("prod")
@Configuration
public class BaseConfiguration {

    @Bean
    public String hello() {
        return "hello";
    }
}

<BaseConfiguration.java>

 

@Profile("test")
@Configuration
public class TestConfiguration {

    @Bean
    public String hello() {
        return "hello test";
    }
}

<TestConfiguration.java>

 

 

두 개 파일의 다른 점은 @Profile에서 prod와 test 환경을 지정해 준 점, 그리고 각각 리턴 문자열을 다르게 한 2가지 차이점이 있다.

 

이제 결과를 프로파일의 적용 여부를 확인할 수 있도록 ApplicationRunner구현체를 만들어 보자

@Component
public class SampleRunner implements ApplicationRunner {

    @Autowired
    private String hello;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("============================");
        System.out.println(hello);
        System.out.println("============================");

    }
}

 

이제 프로젝트를 컴파일하고 실행해보자. 어떤 결과가 나올까?

결과는 아래와 같다.

. properties에서 'spring.profiles.active=prod'으로 지정하여 아래와 같은 결과가 나온다.

'spring.profiles.active=test'로 지정하면 어떤 결과가 나오는지도 확인해 보자.

 


이번에는 prod, test환경에서 사용할 properties파일을 별도로 생성해 보자.

my.name = hongjun prod
spring.profiles.include=proddb

<application-prod.properties>

 

my.name = hongjun test

<application-test.properties>

 

my.full-name = hongjun proddb

<application-proddb.properties>

 

'application-prod.properties'와 같이 특정 환경을 나타내도록 파일명을 생성할 경우 'application.properties'파일보다 우선순위가 높게 지정 된다.

properties의 우선순위에 관한 내용은 이전 포스팅을 참조하자.

https://steady-hello.tistory.com/33

 

 

 

환경 변화에 따른 값 변화를 확인 하기 위해 SampleRunner클래스를 수정해보자.

@Component
public class SampleRunner implements ApplicationRunner {

    @Autowired
    private String hello;

    @Autowired
    private MyProperties myProperties;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("============================");
        System.out.println(hello);
        System.out.println(myProperties.getName());
        System.out.println(myProperties.getFullName());
        System.out.println("============================");

    }
}

 

MyProperties에 관한 내용은 이전 포스팅을 참조 하거나 글 가장 아래에 있는 github 소스 링크에서 확인 하자.

 


일단 실행 결과를 쉽게 확인 하기 위해 mvn 명령어를 사용 해보도록 하겠다.

mvn명령어를 통해 프로젝트를 컴파일 하자.

mvn clean package -DskipTests

 

그리고 각각 아래와 같이 명령어를 실행하면 된다.

- prod 실행
java -jar spring-boot-getting-start-1.0-SNAPSHOT.jar --spring.profiles.active=prod

- test 실행
java -jar spring-boot-getting-start-1.0-SNAPSHOT.jar --spring.profiles.active=test

옵션에서 지정된 값은 최우선순위 이기 때문에 소스 내에서 설정 하였던 'spring.profiles.active'의 값은 무시 된다.

 

아래 결과는 prod로 지정하여 실행했을때의 결과이다.

 

 


git 소스 : https://github.com/hongjun423/spring-boot-study-start/tree/c73cadda0b182d4bed71d78efcfbf9633e2ebafa

 

해당 포스팅은 백기선님의 인프런 강좌를 참고하여 작성하였습니다.

 

반응형

댓글