스프링

빈(Bean)을 등록하는 여러가지 방법!

그zi운아이 2023. 12. 20. 13:52

개요

스프링 빈이란?

스프링 프레임워크를 사용하면서, 우리는 @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