@Configuration은 스프링 프레임워크에서 Java 기반 구성 클래스를 정의하는 데 사용되는 핵심 어노테이션입니다.
@Bean 메소드를 선언하고 스프링 컨테이너에 의해 처리되어야 함을 나타냅니다.import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserServiceImpl();
}
@Bean
public EmailService emailService() {
return new EmailServiceImpl();
}
}
@Configuration 클래스를 만들어 모듈화된 구성이 가능합니다.@Configuration은 @Component의 특화된 형태입니다:
@Component: 일반적인 스프링 관리 컴포넌트@Configuration: 빈 정의를 포함하는 구성 클래스주요 차이점:
1. @Configuration은 CGLIB 프록시를 사용하여 @Bean 메소드의 일관성을 보장합니다.
2. @Configuration 클래스 내의 @Bean 메소드 간 참조가 가능합니다.
@Configuration 클래스 내에서 빈 간의 의존성을 쉽게 관리할 수 있습니다:
@Configuration
public class AppConfig {
@Bean
public UserService userService(EmailService emailService) {
return new UserServiceImpl(emailService);
}
@Bean
public EmailService emailService() {
return new EmailServiceImpl();
}
}
@Conditional 어노테이션과 함께 사용하여 조건부 구성이 가능합니다:
@Configuration
public class DatabaseConfig {
@Bean
@Conditional(MySQLDatabaseCondition.class)
public DataSource mysqlDataSource() {
// MySQL DataSource 구성
}
@Bean
@Conditional(PostgreSQLDatabaseCondition.class)
public DataSource postgresqlDataSource() {
// PostgreSQL DataSource 구성
}
}
@Profile 어노테이션을 사용하여 환경별 구성을 할 수 있습니다:
@Configuration
@Profile("development")
public class DevelopmentConfig {
// 개발 환경 전용 빈 정의
}
@Configuration
@Profile("production")
public class ProductionConfig {
// 운영 환경 전용 빈 정의
}
@Configuration 클래스 내에 중첩된 @Configuration 클래스를 정의할 수 있습니다:
@Configuration
public class ParentConfig {
@Configuration
public static class ChildConfig {
@Bean
public ChildService childService() {
return new ChildServiceImpl();
}
}
@Bean
public ParentService parentService() {
return new ParentServiceImpl();
}
}
@Configuration 클래스의 테스트는 다음과 같이 할 수 있습니다:
@SpringBootTest
class AppConfigTest {
@Autowired
private UserService userService;
@Autowired
private EmailService emailService;
@Test
void configurationTest() {
assertNotNull(userService);
assertNotNull(emailService);
// 추가적인 검증 로직
}
}
@Configuration 클래스로 그룹화하세요.@Profile을 활용하세요.@Conditional을 사용하세요.@Configuration 어노테이션은 스프링의 Java 기반 구성의 핵심입니다. XML 구성의 대안으로, 타입 안전성과 리팩토링의 용이성을 제공합니다. 적절히 사용하면 애플리케이션의 구조를 명확히 하고, 유지보수성을 높일 수 있습니다. 스프링 부트 애플리케이션에서는 자주 사용되며, 자동 구성과 함께 사용자 정의 구성을 제공하는 강력한 도구입니다.