개요
스프링 프레임워크를 사용하면서, 우리는 @Bean, @Configuration, @ComponentScan, @SpringBootApplication과 같이 다양한 빈 등록 및 설정 방식을 마주치게 됩니다. 이러한 다양성이 혼란스러워 정리하게 되었습니다.
이 블로그 포스트에서는 스프링의 빈 등록 및 설정 방식이 왜 그리고 어떻게 진화해 왔는지 탐구합니다.
다양한 빈 등록 설정 방법.
1. XML 기반 설정 (2003년, Spring Framework 1.0)
- 상세 설명: 초기 Spring에서는 XML 파일을 사용하여 빈의 정의 및 의존성을 설정하였습니다. 각 빈은 <bean> 태그로 표현되며, 그 안에서 의존성 주입을 위한 <property> 태그를 사용합니다.
- 변화의 배경: 이 방식은 중앙 집중적으로 빈을 관리할 수 있지만 큰 프로젝트에서는 XML 설정이 복잡해지고 유지보수가 어려워졌습니다. 또한, 타입 안전성이 부족하여 런타임에 문제가 발생할 수 있었습니다.
<beans> <bean id="myBean" class="com.example.MyBean"> <property name="dependency" ref="anotherBean"/> </bean> <bean id="anotherBean" class="com.example.AnotherBean"/> </beans>
2. @Configuration과 @Bean (2006년, Spring Framework 2.5)
- 상세 설명: Java Config 방식에서는 Java 클래스에 @Configuration 어노테이션을 선언하고, @Bean 어노테이션을 사용하여 메소드 내에서 빈을 생성합니다. 이 방식은 개발자에게 코드 기반의 설정을 제공합니다.
- 변화의 배경: 타입 안전성과 개발 편의성을 중시했습니다. XML 기반의 복잡성과 제한사항을 극복하고자 Java 코드를 이용한 설정 방식이 도입되었습니다.
-
@Configuration public class AppConfig { @Bean public MyBean myBean() { return new MyBean(); } } public class SomeClass { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); MyBean myBean = context.getBean(MyBean.class); } }
3. @ComponentScan과 어노테이션 (@Service, @Repository 등) (2009년, Spring Framework 2.5 이후)
- 상세 설명: @ComponentScan을 사용하면 스프링이 지정된 패키지 내의 클래스를 자동으로 스캔하여 @Component, @Service, @Repository 등의 어노테이션이 붙은 클래스를 빈으로 등록합니다. 이를 통해 수동으로 빈을 등록하는 작업을 줄일 수 있습니다.
- 변화의 배경: 자동화를 통해 개발 속도를 높이고 싶어 했습니다. 이에 따라 어노테이션 기반의 자동 빈 등록 방식이 도입되었습니다.
- @Autowired : 어노테이션은 스프링에서 의존성 주입을 자동화하는 방법입니다. 이를 통해 개발자는 필요한 의존성을 명시적으로 구성하지 않고도 스프링 컨테이너가 자동으로 주입하도록 할 수 있습니다.
-
@Configuration @ComponentScan("com.example") public class AppConfig {} @Service public class MyService { @Autowired private MyRepository repository; } @Repository public class MyRepository { }
-
4. @SpringBootApplication (2014년, Spring Boot 1.0)
- 상세 설명: @SpringBootApplication은 Spring Boot의 주요 어노테이션으로 @Configuration, @EnableAutoConfiguration, @ComponentScan을 하나로 결합한 것입니다. 이를 통해 기본 설정을 간소화하고, 애플리케이션을 빠르게 구동할 수 있습니다.
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
'스프링' 카테고리의 다른 글
토비의 스프링 | 8장 스프링이란 무엇인가 (0) | 2024.01.10 |
---|---|
스프링 핵심 AOP! (1) | 2024.01.03 |
DataAccessException이란? (0) | 2023.12.29 |
스프링 빈이란? (0) | 2023.12.20 |