본문 바로가기
Frameworks/Spring Framework

[Spring Framework] 스프링의 원리, 컴포넌트 스캔에 대해서

by Dev. Pluto 2021. 3. 22.
반응형

안녕하세요! 오늘은 스프링 프레임워크의 기본 원리인 컴포넌트 스캔에 대해서  알아보도록 하겠습니다.


 

자바 언어를 기반으로 하는 웹 어플리케이션 개발 도구인 스프링 프레임워크는 주로 Annotation(주석)을 기반으로 하여

Spring Bean(웹/앱 어플리케이션을 동작하는 Configuration Class의 추상화)을 등록하고, 관리하며

Bean간의 의존성을 주입해주고 있습니다.(물론, XML기반 Bean등록, @bean 어노테이션 등 다른 방법도 존재합니다)

 

Component Scan방식은 스프링 프레임워크에서 따로 설정 정보를 생성하지 않고도 스프링 빈을 등록해주는 기능을 제공합니다.

또한 @Autowired 라는 어노테이션을 이용하여 의존관계를 자동으로 주입해 줄 수 있습니다. 

 

 컴포넌트 스캔의 대상이 되는 Annotation

  • @Component :  컴포넌트 스캔에서 사용함
  • @Controller스프링 MVC 컨트롤러에서 사용
  • @Service스프링 비즈니스 로직에서 사용
  • @Repository스프링 데이터 접근 계층에서 사용
  • @Configuration스프링 설정 정보에서 사용

첫 번째 어노테이션을 제외한 나머지 어노테이션은 어떻게 자동으로 스캔이 되냐구요??

해당 어노테이션들을 따라가 보면 해답이 있습니다.

 

@Configuration 어노테이션의 라이브러리 코드

어노테이션 인터페이스 구현 내부를 따라가 보면 여러 가지 어노테이션과 함께  @Component가 위치하고 있는 것을 볼 수 있습니다

(@Controller, @Service, @Repository 모두 @Component를 가지고 있습니다.)

 

이렇기 때문에,

해당 어노테이션이 있다면 스프링 프레임워크에서 해당 클래스들을 모두 스프링 빈으로 자동 등록을 해주고, 자동으로 의존관계를 주입해주는 역할까지 수행해 줍니다.

 

 

또한!

 

컴포넌트 스캔 대상에 추가할  Annotation 을 직접 지정할 수있는 필터링기능도 제공을 하고 있습니다. 

 

@ComponentScan(
       
        excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)

)

위와같이 컴포넌트 스캔 Annotation에 () 괄호 내부에 excludeFilters 옵션에 스프링에서 제공하는(혹은 개발자가 어노테이션을 직접 생성하여 설정도 가능) 세부 설정에 따라서 필요한 Bean만 등록하고, 관리할 수 있습니다. 

 

정리하자면

 - Spring Framework에서는 자바코드(@Bean), XML(<bean>), Component 방법 등을 통해 스프링 빈을 등록하고, 관리한다!

 - 자바코드 방법이나, XML의 경우 어플리케이션이 규모가 커지면서 다루어야 할 빈의 개수가 많아질 수록 관리하기 힘들어지고, 

    누락이 되는 등의 문제점이 발생한다!

 - 위의 어려움과 문제점들을 Spring Framework 에서의 Component Scan방법을 통해 수많은  Bean들을 자동으로 관리하고 의존관계를

    주입하는 역할을 한다!

 

다음시간에는 위의 Component Scan방식이 어떤 식으로 의존관계를 자동으로 주입해주는가에 대한 

Spring의 DI(Dependency Injection)자동주입에 대해서 정리해보겠습니다!

반응형