SPRING/Spring Boot

[SpringBoot] Profile 사용하기

IT록흐 2023. 5. 7. 11:00
반응형

 

 

 

 

app.jar가 있다.

 

개발환경에서는 app.jar는 dev 설정파일이 필요하다.

운영환경에서는 app.jar는 prd 설정파일이 필요하다.

 

환경에 따라 올바른 설정파일을 읽도록 유도하는 것을 'Profile'이라 부른다.

Spring은 Profile 사용을 위한 약속을 갖고 있다.

 

1) spring.profiles.active 속성에 값을 부여

커맨드라인옵션 : --spring.profiles.active=dev

JVM vm옵션 :  -Dspring.profiles.active=dev

 

2) 설정파일명은 application-{profile}.properties로 한다.

application-dev.properties

application-prd.properties

 

 


 

 

한 번 구현해보자. 

설정값을 가져오는 클래스를 하나 구현한다.

 

application-dev.properties

url=dev.test.com
name=dev

 

application-prd.properties

url=prd.test.com
name=prd

 

application-{profile}.properties 형식에 맞추어 설정파일 이름을 생성하였다.

jar파일 내부에 설정파일을 생성해보자.

 

 

EnviromentCheck.java
@Slf4j
@Component
public class EnviromentCheck {
    public final Environment env; //설정값을 가져오기 위한 객체 

    public EnviromentCheck(Environment env) {
        this.env = env;
    }

    @PostConstruct
    public void init(){

        String url = env.getProperty("url"); // url 가져오기 
        String name = env.getProperty("name"); // name 가져오기
        
        //로그 찍기
        log.info("url = {}", url);
        log.info("name = {}", name);

    }
}

 

Enviroment는 jar파일의 모든 설정에 접근하여 설정값을 가져온다. 

 

Enviroment의 의존관계주입이 완료되면

@PostConstruct 어노테이션에 의해 init메소드가 실행되어 로그를 찍도록 구현해보았다.

 

 

이제 프로필을 설정해보자. - spring.profiles.active 속성에 값을 부여한다.

JVM의 vm옵션에 설정값을 부여했다.

 

VM옵션 :  -Dspring.profiles.active=prd

 

이제 DemoApplication을 실행해보자.

 

 

 

로그를 보자.

 

The following 1 profile is active : "prd" 

spring.profiles.active에 설정한 프로필이 활성화 되었음을 확인할 수 있다.

 

그리고

 

url=prd.test.com
name=prd

 

url과 name에 application-pr.properties에 등록된 설정의 값이 주입되었음을 알 수 있다.

 

 

설정 파일 하나로 합치기 

 

환경이 많아질수록 많은 설정파일이 생성되어야 한다. 환경별로 설정파일을 구성하는 전략도 있겠지만 설정파일을 한 개의 파일로 유지하는 전략도 있다. 

 

application-dev.properties와 application-prd.properties를 하나의 파일로 합쳐보자.

 

application.properties

spring.config.activate.on-profile=dev
url=dev.test.com
name =dev
#---
spring.config.activate.on-profile=prd
url=prd.test.com
name=prd

 

통합에는 두가지 규칙이 있다.

 

1) spring.config.activate.on-profile 속성에 값을 부여한다.

위 속성은 프로필을 구분하는 일종의 플래그이다.

 

2) #---

#---는 프로필을 구분하는 기호이다. #--- 위 아래로 #주석이 들어가면 안 된다.

 

그럼 기존 2가지 프로퍼티파일을 제거하고

통합된 한 가지 프로퍼티파일을 갖고 jar를 실행시켜 보자.

 

 

이번에는 dev로 프로필을 설정한다. 

VM옵션 :  -Dspring.profiles.active=dev

 

 

로그를 보면

 

The following 1 profile is active : "dev" 

...

url=dev.test.com
name=dev

 

dev 관련 로그가 활성화 되었음을 알 수 있다. 

프로퍼티 파일을 통합시켜도 프로필에 따라 원하는 설정을 가져올수 있다.

 

 

주의해야할 점은 프로퍼티파일은 위에서 아래로 읽힌다는 점이다.

 

프로퍼티 파일 아래에 spring.config.activate.on-profile 설정이 없는 설정이 있다면 무조건 설정으로 등록된다.

만약 중복된 설정이 있으면 덮어 씌여진다.

 

spring.config.activate.on-profile=dev
url=dev.test.com
name =dev
#---
spring.config.activate.on-profile=prd
url=prd.test.com
name=prd
#---
name=ver #name이 ver인 설정이 들어갔다.

 

프로퍼티  파일 끝에 name=ver 설정이 추가되었다.

프로그램을 실행해보자.

 

 

프로필은 dev로 되어있지만

name은 ver로 읽혔음을 확인할 수 있다.

 

프로퍼티파일은 위에서아래로 읽히고 spring.config.activate.on-profile 설정이 없으면 설정으로 등록됨을 인지하고 프로퍼티파일을 구성해야 한다.

 

 


 

 

원하는 설정파일을 읽어오는 방식인 Profile에 대해서 알아보았다.

다음 포스팅에서는 Enviroment 관련 클래스를 생성하지 않고도 설정파일을 읽어오는 방식에 대해서 알아보겠다.

 

 


 

참고자료

 

스프링 부트 - 핵심 원리와 활용 - 인프런 | 강의

실무에 필요한 스프링 부트는 이 강의 하나로 모두 정리해드립니다., - 강의 소개 | 인프런

www.inflearn.com

 

반응형