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파일 내부에 설정파일을 생성해보자.
@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 관련 클래스를 생성하지 않고도 설정파일을 읽어오는 방식에 대해서 알아보겠다.
참고자료
'SPRING > Spring Boot' 카테고리의 다른 글
[SpringBoot] 외부설정 가져오기(3) - @ConfigurationProperties (1) | 2023.05.07 |
---|---|
[SpringBoot] 외부설정 가져오기(2) - @Value (0) | 2023.05.07 |
[SpringBoot] 설정파일(application.properties) (0) | 2023.05.05 |
[SpringBoot] 외부설정 가져오기(1) - Enviroment (0) | 2023.05.05 |
[SpringBoot] SpringBoot 자동구성 원리 (4) | 2023.05.04 |