on
스프링 부트 활용 : 프로파일
스프링 부트 활용
프로파일
프로파일은 스프링 프레임워크에서 제공해주는 기능 중 하나이다. 특정한 프로파일에서만 특정한 빈을 등록하고 싶다거나, 애플리케이션의 동작을 특정 프로파일일 때 빈 설정을 다르게 하고싶을 때 사용하면 된다.
가벼운 예제로 알아보자.
먼저 config라는 디렉토리를 만든 후 빈 설정 2개를 만든다.
package me.gracenam.springinit.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Profile("prod")
@Configuration
public class BaseConfiguration {
@Bean
public String hello() {
return "hello";
}
}
package me.gracenam.springinit.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Profile("test")
@Configuration
public class TestConfiguration {
@Bean
public String hello() {
return "hello test";
}
}
BaseConfiguration과 TestConfiguration을 만들었다.
BaseConfiguration은 Profile을 production으로 했고, 이 빈 설정 파일은 prod라는 프로파일 일 때 사용된다. 즉, prod가 아니면 사용되지 않는다.
Runner에서 @Autowired로 hello라는 빈을 가져와서 출력을 해보자. 어떻게 될까?
package me.gracenam.springinit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
@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
프로파일에 위의 값을 넣어주고 실행을 해보면 정상적으로 출력이 되는 것을 확인할 수 있다.
마찬가지로 prod를 test로 바꿔서 실행해보면 바뀐 값이 출력되는 것을 볼 수 있다.
spring.profiles.active = test
헌데, spring.profiles.active
가 있는 위치가 application.properties이다. 그 말은 이것 또한 프로퍼티라는 말이다.
프로퍼티는 우선순위가 적용이 되기 때문에 커맨드 라인을 활용해서 prod로 값을 주게된다면 test를 오버라이딩해서 prod 값이 출력되게 될 것이다.
프로파일용 프로퍼티를 따로 생성할 수도 있다. prod용와 test용 프로퍼티를 각각 만든 다음에 출력이 어떻게 되는지 확인해보자.
▶ application-prod.properties
grace.name = grace prod
▶ application-test.properties
grace.name = grace test
prod일 때는 name이 grace prod로 출력되는 것을 볼 수 있다. 마찬가지로 test일 때는 grace test로 출력될 것이다. 이처럼 프로파일과 관련된 프로퍼티의 우선순위가 기본적인 프로퍼티보다 높다. 그래서 오버라이딩 된 것이다.
추가적인 프로파일을 활성화하고 싶을 때 spring.profiles.include
를 사용하면 된다.
spring.profiles.include
를 사용해서 다른 프로파일을 추가하는 것을 해보자.
기존의 프로파일에 있는 값 중에서 full-Name의 값을 바꿔보겠다.
▶ application.properties
grace.name = grace
grace.fullName = ${grace.name} Nam
spring.profiles.active = prod
▶ application-prod.properties
grace.name = grace prod
spring.profiles.include=proddb
▶ application-proddb.properties
grace.full-name=dbdbdb
이렇게 하면 prod일 때 name이 변경되면서 proddb 프로파일를 추가하게 되면서 full-name이 바뀌게 된다.
💡 부트 2.4 버전부터는 active와 include를 함께 사용할 수 없도록 변경되었다. 자세한 내용은 아래 블로그를 참조하도록 하자.
https://spring.io/blog/2020/08/14/config-file-processing-in-spring-boot-2-4
Reference
Comments
SPRING BOOT 의 다른 글
-
스프링 부트 활용 : 스프링 데이터 4부 17 Sep 2021
-
스프링 부트 활용 : 스프링 데이터 3부 16 Sep 2021
-
스프링 부트 활용 : 스프링 데이터 2부 15 Sep 2021
-
스프링 부트 활용 : 스프링 데이터 1부 14 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 11부 13 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 10부 10 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 9부 09 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 8부 08 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 7부 03 Sep 2021
-
스프링 부트 활용 : 스프링 웹 MVC 6부 05 Aug 2021
-
스프링 부트 활용 : 스프링 웹 MVC 5부 27 Jun 2021
-
스프링 부트 활용 : 스프링 웹 MVC 4부 13 Jun 2021
-
스프링 부트 활용 : 스프링 웹 MVC 3부 06 Jun 2021
-
스프링 부트 활용 : 스프링 웹 MVC 2부 05 Jun 2021
-
스프링 부트 활용 : 스프링 웹 MVC 1부 30 May 2021
-
스프링 부트 활용 : Spring-Boot-Devtools 30 May 2021
-
스프링 부트 활용 : 테스트 26 May 2021
-
스프링 부트 활용 : 로깅 2부 25 May 2021
-
스프링 부트 활용 : 로깅 1부 23 May 2021
-
스프링 부트 활용 : 프로파일 23 May 2021
-
스프링 부트 활용 : 외부 설정 2부 21 May 2021
-
스프링 부트 활용 : 외부 설정 1부 15 May 2021
-
스프링 부트 활용 : SpringApplication 11 May 2021
-
스프링 부트 원리 : 정리 06 May 2021
-
스프링 부트 원리 : 독립적으로 실행 가능한 JAR 06 May 2021
-
스프링 부트 원리 : 내장 웹 서버 04 May 2021
-
스프링 부트 원리 : 자동 설정 02 May 2021
-
스프링 부트 원리 : 의존성 01 May 2021
-
스프링 부트 시작하기 01 May 2021