[Spring] 컴포넌트 스캔(Component Scan)

2025. 2. 17. 06:20코딩 도구/백엔드 개발 (Backend Development)

반응형

스프링 컴포넌트 스캔(Component Scan)

김영한님의 "스프링 핵심 원리 - 기본편"을 수강하고 정리했습니다. 

1. 컴포넌트 스캔이란?

스프링에서 빈(Bean)을 자동으로 등록하는 기능을 컴포넌트 스캔(Component Scan)이라고 한다. 이 기능을 사용하면 개발자가 일일이 @Bean을 사용하여 등록할 필요 없이, 특정 패키지 내부에 있는 컴포넌트 클래스들을 자동으로 감지하여 빈으로 등록할 수 있다.

2. @ComponentScan

@ComponentScan은 스프링이 특정 패키지를 스캔하면서 @Component가 붙은 클래스를 자동으로 빈으로 등록하는 기능을 제공한다.

@ComponentScan 기본 사용법

@Configuration
@ComponentScan(basePackages = "com.example.service")
public class AppConfig {
}
  • basePackages 속성을 설정하면 해당 패키지와 그 하위 패키지를 스캔하여 빈을 자동 등록한다.
  • @Configuration을 통해 스프링 설정 파일로 지정한다.

@Component와 함께 사용

@Component
public class MemberService {
    public void join() {
        System.out.println("회원 가입 로직 실행");
    }
}
  • @Component를 선언한 클래스는 자동으로 스프링 빈으로 등록된다.
  • @Service, @Repository, @Controller@Component의 확장 개념으로 각각의 역할에 맞게 빈을 등록하는 애노테이션이다.

3. @Autowired와 의존성 자동 주입

컴포넌트 스캔으로 등록된 빈은 @Autowired를 사용하여 자동으로 주입할 수 있다.

@Autowired 기본 사용법

@Component
public class OrderService {
    private final MemberService memberService;
    
    @Autowired
    public OrderService(MemberService memberService) {
        this.memberService = memberService;
    }
}

 

  • @Autowired를 생성자에 사용하면 스프링이 자동으로 해당 빈을 주입한다.
  • 생성자가 하나만 존재하면 @Autowired를 생략해도 자동 주입이 동작한다.

4. @ComponentScan 필터 사용법

특정 클래스 제외하기

@ComponentScan을 사용할 때 특정 클래스를 스캔 대상에서 제외할 수 있다.

@Configuration
@ComponentScan(
    basePackages = "com.example",
    excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Service.class)
)
public class AppConfig {
}
  • 위 코드에서는 @Service가 붙은 클래스는 스캔 대상에서 제외된다.
  • FilterType에는 ANNOTATION, ASSIGNABLE_TYPE, REGEX, ASPECTJ 등 다양한 필터링 방식을 사용할 수 있다.

5. 실무에서 중요한 내용

1) @ComponentScan을 활용하여 반복적인 빈 등록 최소화

  • 기존에는 @Bean을 사용하여 빈을 하나하나 등록해야 했지만, @ComponentScan을 사용하면 자동으로 빈을 등록할 수 있어 유지보수성이 증가한다.
  • 대규모 프로젝트에서는 특정 패키지 경로를 지정하여 스캔하도록 설정하는 것이 좋다.

2) 특정 클래스를 스캔에서 제외하는 방법 익히기

  • 불필요한 빈이 자동 등록되지 않도록 제외 필터를 활용해야 한다.
  • 테스트 코드에서 특정 빈만 등록하거나 제외할 때 필터링 기능을 적극 활용할 수 있다.

6. 결론

컴포넌트 스캔은 스프링에서 빈을 자동 등록하는 강력한 기능으로, @ComponentScan@Component 애노테이션을 활용하면 반복적인 빈 등록을 줄이고 유지보수성을 높일 수 있다. 또한, @Autowired를 사용하여 빈을 자동으로 주입할 수 있으며, 필요에 따라 필터링을 적용하여 특정 클래스를 제외할 수도 있다. 이러한 기능을 잘 활용하여서 효율적인 스프링 애플리케이션을 개발해야겠다. 

반응형