기록과 정리

@Component와 컴포넌트 스캔이란? 본문

IT/Spring

@Component와 컴포넌트 스캔이란?

zepetto 2021. 1. 22. 11:19

이 글은 인프런 백기선님의 스프링 프레임워크 핵심 기술 강의에 대한 정리입니다.

 

@Component란?

 우선 Component와 Bean에 대한 차이에 대한 글입니다.

jojoldu.tistory.com/27

 

@Bean vs @Component

Spring으로 개발을 하다보면 @Bean과 @Component를 언제 써야할지 헷갈릴때가 있다. 둘다 목적이 명확하지 않은 Bean을 생성할때 사용하는 어노테이션인데 왜 2개로 나누어져있나 궁금했었는데, 박재성

jojoldu.tistory.com

컴포넌트의 종류로

 

@Repository

@Service

@Controller

@Configuration 

...

등이 있다. 

 

컴포넌트스캔이란?

컴포넌트 스캔은 말그대로 컴포넌트를 찾아내는 역할을 하는데 SpringBoot에서는 보통 Application 에 @SpringBootApplication 어노테이션 안에 @ComponentScan으로 존재한다. 즉, @SpringBootApplication 어노테이션이 붙어있는 곳 부터 스캔이 시작되는 것을 말한다.

 

또한 필터링 역할을 한다. 어떤 어노테이션을 스캔할지 말지에 대한 필터이며 컴포넌트 스캔을 한다고 하더도 모든 빈을 등록해주는 것이 아니며 Filter에 의해 걸러지기도 한다. 

 

컴포넌트만 이용해야하는가?

        var app = new SpringApplication(Demospring51Application.class);
        app.addInitializers((ApplicationContextInitializer<GenericApplicationContext>) ctx -> {
            ctx.registerBean(MyService.class);
            ctx.registerBean(ApplicationRunner.class, () -> args1 -> System.out.println("Functional Bean Definition"));
        });
        app.run(args);

해당 코드는 main에서 구동하여 테스트 가능하다. @Component 어노테이션은 구동시간이 오래걸리기 떄문에 Application 구동 타임 성능이 떨어지는 단점이 있다. 이를 보완하기 위하여 Functional한 Baan 생성 방법이지만 내가 봐도 굉장히 복잡하다.

하나의 빈을 생성하기 위해 위와 같은 방법을 쓴다면 SpringBoot가 생겨났던 철학과 벗어나는 문제가 생길것같다.

 

따라서 @Bean을 통하여 따로 Bean생성이 필요하여 사용할 경우, 성능상의 이점을 바라고 사용할 수도 있을 것 같다라고 강의에서 말하고 있다.

'IT > Spring' 카테고리의 다른 글

DispatcherServlet이란?  (0) 2021.01.24
Bean의 스코프  (0) 2021.01.24
@Autowire 어노테이션 정리  (0) 2021.01.22
Spring IoC 컨테이너 & Bean  (0) 2021.01.21
스프링(Spring)에서 자주쓰는 어노테이션 정리  (0) 2020.03.03