스프링5 프로그래밍 입문 - ch5.컴포넌트 스캔
초보 웹 개발자를 위한 스프링 5 프로그래밍 입문을 더 잘 이해하기 위해 정리하기 위한 포스팅입니다.
목차
1. @Component/@ComponentScan는 왜 사용할까?
2. @Component/@ComponentScan 사용 방법
1. @Component/@ComponentScan는 왜 사용할까?
앞서 스프링 빈을 설정 파일에서 수동 등록 및 주입하거나 @AutoWired를 이용해서 의존 관계를 자동 주입하는 방법에 대해 알아보았다. 여기서 구분해야할 것은 스프링 빈으로 등록하는 것과 의존 관계를 주입하는 것이다.
여기서 잠시 고민해볼 것이 @AutoWired가 정말로 좋은가? 에 대해 고민해보면 좋을 것 같다. 우리는 IOC의 제어를 받기 위해 스프링 빈으로 등록한다. 그러면 의존 관계 주입하는것은 무조건적으로 하는 행위이다. (스프링 빈으로 등록된 객체를 사용할 것이기 때문에) 그런데 빈 등록은 설정 클래스에서 하고 의존 관계 주입은 구체 클래스에서 한다. 나는 개인적으로 예제 프로젝트를 만들면서도 @AutoWried 사용 시, 혼란스러웠다.
@Component가 등장한 배경이 아닐까 싶다. @Component/@ComponentScan 둘을 이용하면 빈 등록/의존 관계 주입 모두 구체 클래스에서 쉽고 코드의 품질을 해치지 않는 선에서 이루어질 수 있다.
2. @Component/@ComponentScan 사용 방법
@Component
사용 방법은 매우 간단하다. 스프링 빈으로 등록하고 싶은 클래스에 @Component를 사용한다.
@Component 이외에도 @Service/@Controller/@Repository 등도 @Component 기능을 한다. 그 이유는 해당 애노테이션들이 @Component를 상속하고 있기 때문이다. @Controller 애노테이션을 들어가보면 @Component가 있음을 확인할 수 있다. (@Service, @Repository 모두 마찬가지다.)
@ComponentScan
컴포넌트 스캔의 경우 스프링 부트로 프로젝트를 생성하면 기본적으로 등록되어 있다. 바로 @SpringBootApplication 이다.
직접 만들어 쓰려면 아래와 같이 하면 된다.
chap05 패키지 내부에 있는 @Component만 스캔한다.