이번 글에서는
@Configuration이 무엇인지, 왜 필요한지, 어떻게 사용하는지를 자세히 알아봅시다 ~~
@Configuration란?@Configuration은 Spring에서 설정 클래스임을 나타내는 어노테이션입니다. 이 어노테이션이 붙은 클래스는 Spring 컨테이너에 의해 설정 정보를 제공하는 역할을 합니다.
스프링 컨테이너는 @Configuration 이 붙은 AppConfig 를 설정(구성) 정보로 사용합니다. 여기서 @Bean 이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록합니다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라 합니다.
@Configuration 클래스 내부의 메서드를 통해 객체를 빈으로 등록, 관리@Configuration의 역할@Configuration을 사용하면 메서드에 @Bean 어노테이션을 붙여 Spring 컨테이너에 객체를 직접 등록할 수 있습니다.
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemberRepository();
}
}
위 코드의 동작:
memberService와 memberRepository가 Spring 컨테이너에 Bean으로 등록됩니다.@Configuration 클래스는 메서드가 여러 번 호출되어도 동일한 Bean 객체를 반환합니다.@Configuration
public class AppConfig {
@Bean
public MemberRepository memberRepository() {
System.out.println("MemberRepository 객체 생성");
return new MemberRepository();
}
}
MemberRepository repo1 = appConfig.memberRepository();
MemberRepository repo2 = appConfig.memberRepository();
MemberRepository 객체 생성
repo1과 repo2는 동일한 객체를 참조합니다.외부 라이브러리의 객체를 Spring Bean으로 등록하고 싶을 때, @Configuration을 활용하면 편리합니다.
ObjectMapper 등록@Configuration
public class ExternalConfig {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper();
}
}
ObjectMapper는 Spring 컨테이너에서 관리되며, 필요한 곳에 의존성 주입을 통해 사용할 수 있습니다.@Configuration과 XML 설정의 차이과거에는 XML을 사용해 Spring 설정을 작성했지만, 자바 기반 설정이 더 직관적이고 유지보수에 유리합니다.
<beans>
<bean id="memberService" class="com.example.MemberService">
<constructor-arg ref="memberRepository"/>
</bean>
<bean id="memberRepository" class="com.example.MemberRepository"/>
</beans>
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemberRepository();
}
}
Bean을 직접 정의하고 관리하고 싶을 때
외부 라이브러리를 Bean으로 등록할 때
ObjectMapper, RestTemplate, 데이터베이스 설정 등유연하고 가독성 높은 설정을 원할 때
@Configuration 사용 시 주의할 점싱글톤 보장
@Configuration은 내부적으로 싱글톤을 보장하므로 동일한 객체가 반환됨@Component와의 관계
@Configuration은 내부적으로 @Component를 포함하고 있어, 자동으로 Spring 컨테이너에 등록됨XML 설정과의 혼용
@Configuration은 Spring 설정 클래스를 정의하는 어노테이션@Bean)Spring 프로젝트에서 @Configuration을 활용하면 더 유연하고 명확한 설정을 작성할 수 있고, 의존성 관리와 코드 품질 모두를 개선할 수 있습니다. 😊