Spring

[Spring] 컴포넌트 스캔(Component Scan)이란 무엇일까.

자바걸 2023. 8. 29. 17:29

컴포넌트 스캔(Component Scan)

스프링에서는 설정 정보(AppConfig.class) 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공한다.

스프링 빈을 등록할 때는 의존관계를 자바 코드로 직접 등록하는 방법과 컴포넌트 스캔과 자동 의존관계 설정하는 @Autowired를 사용하는 방법이 있다.

@ComponentScan은 탐색 위치에 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다.

@ComponentScan
public class DependencyConfig {

}

탐색범위(basePackages)

모든 자바 클래스를 컴포넌트 스캔하면 시간이 오래 걸리게 된다. 따라서 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있다.

@ComponentScan(basePackages = "hello.Spring")
public class DependencyConfig {

}

basePackages : 탐색할 패키지의 시작 위치를 설정하고, 해당 패키지부터 하위 패키지까지 모두 탐색한다.

basePackageClasses : 통해 클래스가 속한 패키지를 탐색 시작 위치로 지정할 수 있다.

또한, 스프링 부트를 사용하면 일반적으로 @SpringBootApplication을 프로젝트 시작 루트 위치에 둔다.

@SpringBootApplicaiton에는 @ComponentScan이 포함되어 있다.

 

컴포넌트 스캔의 기본 대상

@ComponentScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다.

이때 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다.

빈 이름 기본 전략 : MemberServiceImpl → memberServiceImpl

빈 이름 직접 지정 : @Component(”memberService2”)와 같이 빈의 이름을 직접 설정할 수 있다.

 

컴포넌트 스캔의 기본 대상

  • @Component : 컴포넌트 스캔에서 사용된다.
  • @Controller & @RestController : 스프링 MVC 및 REST 전용 컨트롤러에서 사용된다.
  • @Service : 스프링 비즈니스 로직에 사용된다. 특별한 처리는 하지 않고, 비즈니스 계층을 인식하는데 도움이 된다.
  • @Repository : 스프링 데이터 접근 계층에서 사용된다. 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다.
  • @Configuration : 스프링 설정 정보에서 사용된다. 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.

 

추가적으로 @Controller, @Service, @Repository에는 기본적으로 @Component를 포함하고 있다.