- 프로젝트를 개발하다 보면 로컬 개발 환경과 실제 배포 환경을 분리해야 할 때가 있다.
- 이를 위해 Spring에서는 Profile을 통해 빌드 시 활용할 appplication.yml을 지정해줄 수 있다.
application.yml
spring:
profiles:
default: local
- spring.profiles.default: 별도의 Active Profile이 없는 경우 local 프로필이 활성화된다.
- 즉 application-local.yml의 환경변수 활용
- spring.profiles.active: 특정 Profile을 명시적으로 활성화한다.
@Profile
- @Profile 어노테이션을 통해 프로필에 해당하는 환경별로 관련 리소스를 설정할 수 있다.
@Configuration
public class AppConfig {
@Bean
@Profile("dev")
public DataSource devDataSource() {
return new DataSource("jdbc:h2:mem:devDb", "devUser", "devPassword");
}
@Bean
@Profile("prod")
public DataSource prodDataSource() {
return new DataSource("jdbc:mysql://prodDb", "prodUser", "prodPassword");
}
}
@ActiveProfiles
- 테스트코드에서 클래스 혹은 메서드 단위에 @ActiveProfiles을 붙이면 실행 중 환경변수에 접근할 때 해당 프로필의 환경변수를 사용하게 된다.
@DataJpaTest
@ActiveProfiles("test")
class CommentRepositoryTest {
@Autowired
CommentRepository commentRepository;
}
- 혹은 아래처럼 build.gradle 파일에 테스트코드 실행 시 프로필을 고정시키는 옵션을 추가할 수 있다.
test {
systemProperty 'spring.profiles.active', 'test'
}
빌드
- 여러 application.yml이 존재할 때 특정 프로필로 빌드하기 위해서는 아래와 같은 형태로 실행할 수 있다.
java -jar -Dspring.profiles.active=[프로필명] [jar파일명]