- 스프링 프로파일(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