반응형

[Spring Boot #10] 스프링 부트 프로파일(Spring Boot Profile)

반응형

| 스프링 부트 프로파일 (Spring Boot Profile)


스프링 부트에서는 프로파일(Profile)을 통해 스프링 부트 애플리케이션의 런타임 환경을 관리할 수 있습니다. 예로들어 어플리케이션 작동 시 테스트 환경에서 실행할 지 프로덕션 환경에서 실행할 지를 프로파일을 통해 관리할 수 있죠.


음은 프로덕션과 테스트 환경을 각각 외부 설정 파일을 통해서 관리하는 예시입니다. 눈여겨 봐야할 것은 spring.profiles.active 키를 통해 어떤 프로파일을 활성화할 것인지를 정하는 부분입니다. 


또한 아래 코드에서 @Profile을 통해 프로파일 기능을 구현하는 것을 볼 수 있습니다. @Profile에 인자로 들어가는 값은 프로파일이 현재 인자값과 일치할 시 아래 코드에서 명시한 스프링 빈을 등록하라는 뜻입니다.

# application.properties
spring.profiles.active=prod

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

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

@Bean
public String hello(){
return "hello test";
}
}
@Component
public class AppRunner implements ApplicationRunner {

@Autowired
private String hello;

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

public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
application.setWebApplicationType(WebApplicationType.NONE);
application.run(args);
}
}
=============
hello production
=============


만약 아래와 같이 test 프로파일로 설정할 경우 다른 값이 출력되는 것을 볼 수 있습니다.

# application.properties
spring.profiles.active=test
#spring.profiles.active=prod
=============
hello test
=============


| application-{프로파일}.properties 파일을 통한 프로파일 관리


스프링 부트에서는 application.properties를 통해 외부 설정값을 관리해왔습니다. 하지만 application-{프로파일}.properties 파일을 생성하여 관리하게 되면 application.properties 보다 우선순위가 높게 외부 설정값이 관리되므로 보다 편하게 프로파일을 관리할 수 있습니다. 


또한 properties 파일에 spring.profiles.include 키를 통해 어떤 설정파일을 해당 프로파일에 추가할 것인지 정할 수 있습니다.

@Component
@ConfigurationProperties("saelobi")
public class SaelobiProperties {

private String name;

private String fullName;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getFullName() {
return fullName;
}

public void setFullName(String fullName) {
this.fullName = fullName;
}
}
@Component
public class AppRunner implements ApplicationRunner {

@Autowired
private String hello;

@Autowired
private SaelobiProperties saelobiProperties;

@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("=============");
System.out.println(hello);
System.out.println(saelobiProperties.getName());
System.out.println(saelobiProperties.getFullName());
System.out.println("=============");
}
}
# application.properties
spring.profiles.active=prod
# application-prod.properties 가 우선순위가 높으므로
# 아래 값은 다른 값으로 오버라이딩 된다.
saelob.name=power
# application-prod.properties
saelobi.name=saelobi prod
# 추가할 프로파일 설정
spring.profiles.include=saelobi
# application-saelobi.properties
saelobi.fullName=KBS
=============
hello production
saelobi prod
KBS
=============




참고자료 : https://www.inflearn.com/course/스프링부트


반응형

이 글을 공유하기

댓글

Designed by JB FACTORY