@Profile 어노테이션은 스프링 프레임워크에서 특정 프로파일이 활성화되었을 때만 빈을 등록하거나 구성을 적용하도록 하는 기능을 제공합니다.
import org.springframework.context.annotation.Profile;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DatabaseConfig {
@Bean
@Profile("development")
public DataSource devDataSource() {
// 개발 환경용 데이터소스 설정
}
@Bean
@Profile("production")
public DataSource prodDataSource() {
// 운영 환경용 데이터소스 설정
}
}
@Profile 어노테이션에 여러 프로파일을 지정할 수 있습니다.@Configuration
@Profile("production")
public class ProductionConfig {
// 운영 환경 전용 설정
}
@Configuration
public class AppConfig {
@Bean
@Profile("development")
public EmailService devEmailService() {
return new MockEmailService();
}
@Bean
@Profile("production")
public EmailService prodEmailService() {
return new SmtpEmailService();
}
}
@Configuration
@Profile({"development", "testing"})
public class DevTestConfig {
// 개발 및 테스트 환경에서 사용될 설정
}
@Bean
@Profile("!production")
public DataSource devDataSource() {
// production 프로파일이 아닐 때 사용될 데이터소스
}
애플리케이션 속성 파일 사용:
application.properties 또는 application.yml에 다음과 같이 설정:
spring.profiles.active=development
환경 변수 사용:
export SPRING_PROFILES_ACTIVE=production
JVM 시스템 프로퍼티 사용:
java -Dspring.profiles.active=production -jar myapp.jar
프로그래밍 방식:
SpringApplication.setAdditionalProfiles("production");
@Profile은 @Conditional의 특별한 케이스입니다. @Conditional을 사용하면 더 복잡한 조건을 지정할 수 있습니다:
@Configuration
@Conditional(ProductionCondition.class)
public class ProductionConfig {
// ProductionCondition 클래스에 정의된 조건이 충족될 때 적용되는 설정
}
스프링 부트 2.4부터는 프로파일 그룹을 정의할 수 있습니다:
spring.profiles.group.production=prod,metrics,actuator
이제 production 프로파일을 활성화하면 prod, metrics, actuator 프로파일도 함께 활성화됩니다.
테스트 클래스나 메소드에 @Profile을 적용하여 특정 프로파일에서만 테스트를 실행할 수 있습니다:
@SpringBootTest
@ActiveProfiles("test")
class MyServiceTest {
@Test
@Profile("development")
void testDevFeature() {
// 개발 환경 전용 기능 테스트
}
}
default 프로파일이 사용됩니다.@Profile 어노테이션은 스프링 애플리케이션의 환경별 구성을 관리하는 강력한 도구입니다. 이를 통해 개발, 테스트, 스테이징, 운영 등 다양한 환경에 맞는 설정을 쉽게 관리하고 전환할 수 있습니다. 적절히 사용하면 애플리케이션의 유연성과 관리 용이성을 크게 향상시킬 수 있습니다.
@Configuration
@Conditional
@ConfigurationProperties
@ActiveProfiles
@Value