본문 바로가기

STUDY/스프링 철저 입문

1-7) 스프링 프로파일(Profile): @Profile

 - 스프링 프로파일(Profile)

 

상용 서비스를 출시하면, 서비스가 운영되고있는 운영 서버와 추가 개발을 위한 개발 서버를 분리하는 것이 보통이다. 개발을 하다보면 새로운 버그가 생길 수 있고, 자주 소스를 새로 배포해야하는 상황이 생기기 때문이다. 따라서 코드 또한 개발서버에서 동작해야하는 코드와, 운영서버에서 동작해야하는 코드가 분기될 수 있다.

 

@Configuration
public class DBConfig {
  ...
  // 개발 서버용 dataSource
  // @Bean
  // public DataSource dataSourceForDev() {
  //   return new EmbeddedDatabaseBuilder()
  //   .setType(EmbeddedDatabaseType.H2)
  //   .setScriptEncoding("classpath:schema.sql")
  //   .build();
  // }
  
  // 운영 서버용 dataSource
  @Bean
  public DataSource dataSourceForPrd() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName(className);
    dataSource.setUrl(url);
    dataSource.setUsername(name);
    dataSource.setPassword(password);
    return dataSource;
  }
  ...
}

 

이렇게 주석처리하여 코드를 분기할 수도 있지만, 이는 번거롭고 실수에 대한 위험이 따른다. 이렇게 실행 상황에 따라서 특정 코드를 실행시키고 싶을 때 사용할 수 있는 것이 스프링 프로파일(Profile)이다.

 

@Profile 사용법은 간단하다. 코드를 작성하고, @Profile("실행 상황 이름")을 적용하면 끝이다. 위의 DBConfig를 스프링 프로파일을 사용하면 다음과 같다.

 

@Configuration
public class DBConfig {
  ...
  // 개발 서버용 dataSource
  @Bean
  @Profile("dev")
  public DataSource dataSourceForDev() {
    return new EmbeddedDatabaseBuilder()
    .setType(EmbeddedDatabaseType.H2)
    .setScriptEncoding("classpath:schema.sql")
    .build();
  }
  
  // 운영 서버용 dataSource
  @Bean
  @Profile("prd")
  public DataSource dataSourceForPrd() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName(className);
    dataSource.setUrl(url);
    dataSource.setUsername(name);
    dataSource.setPassword(password);
    return dataSource;
  }
  ...
}

 

728x90