본문 바로가기

더 나은 엔지니어가 되기 위해/지금은 안쓰는 자바

[스프링 부트 개념과 활용] Profile

인프런에서 백기선님의 스프링부트 개념과 활용 강의를 듣고, 개인적으로 공부하며 핵심만 정리한 글입니다.

Profile 설정

Profile 은 어떤 특정환 환경에 설정 값을 다르게 하고싶을 때 사용한다.
각 Profile 들은 각각 다른 설정 값이나 각각 Bean 들을 정의한다.
그 후, 빌드 할 때, 원하는 Profile 에 맞춰 빌드할 수 있다.
예를 들어, 테스트 환경과 배포 환경을 다르게 두고 Profile 을 설정할 수 있다.

1) Profile 정의

예를 들어, 각기 다른 설정 값을 담는 두 개의 Configuration 클래스를 정의해보자.
@Profile("name") 을 통해 Profile 을 정의한다.

// BaseConfiguration.java

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

  @Bean
  public String hello() {
    return "hello"
  }
}
// TestConfiguration.java

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

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

2) Profile 사용

그리고 Runner 에서 Autowired 로 위에서 정의한 Bean 을 사용해보자.

// SampleRunner.java

@Component
public class SampleRunner implements ApplicationRunner {

  @Autowired
  private String hello;  // Bean 주입

  @Overide
  public void run() throws Exception {
    System.out.println(hello);
  }
}

위를 그대로 실행하면 에러가 난다.
왜냐하면 우리는 hello 를 특정 Profile 내 에서만 정의하였고, 아직 사용할 Profile 을 설정해주지 않았기 때문.

따라서 다음과 같이 application.properites 에 사용할 Profile 을 지정해준다.

// application.properties

spring.profiles.active = production

이제 위 러너를 실행하면, @Profile("production") 에서 정의한 Bean 이 출력이 된다.

hello

Profile 용 Properties 설정

1) 기본 사용

Profile 용 properties 를 따로 파일로 만들어 설정할 수도 있다.
네이밍 규칙은 application-<Profile 이름>.properties 이다.

예를 들어 application-production.properties 를 다음과 같이 만들어보자.

// application-production.properties

heumsi.firstName = heumsi_production

Profile 용 properties 가 Application 의 properties 보다 우선순위가 더 높기 때문에, 기존에 application.properties 에 있는 heumsi.firstNameapplication-production.propertiesheumsi.firstName 이 오버라이딩 해버린다.

// application.properties

heumsi.firstName = heumsi
// heumsi -> heumsi_production 으로 오버라이딩

2) include 를 통해 모듈화

spring.profiles.include 를 통해 다른 .properties 파일 값을 가져올 수 있다.

예를 들어, 새로 application-productiondb.properties 를 만들었다고 해보자.
그리고 application-production.properties 를 다음과 같이 수정해보자

// application-production.properties

heumsi.firstName = heumsi_production
spring.profiles.include=productiondb
// application-productiondb.properties 값을 가져옴.

이제 productionprofile 만 사용해도 productiondb 의 설정 값들까지 모두 활성화 된다.