[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를 사용하여 빈을 자동으로 주입할 수 있으며, 필요에 따라 필터링을 적용하여 특정 클래스를 제외할 수도 있다. 이러한 기능을 잘 활용하여서 효율적인 스프링 애플리케이션을 개발해야겠다.
반응형
'코딩 도구 > 백엔드 개발 (Backend Development)' 카테고리의 다른 글
[Spring] 빈 생명주기 콜백 (0) | 2025.02.19 |
---|---|
[Spring] 의존관계 자동 주입 (0) | 2025.02.18 |
[Spring] 스프링 싱글톤 컨테이너 (0) | 2025.02.16 |
[Spring] 스프링 컨테이너와 스프링 빈 (0) | 2025.02.15 |
[Spring] 스프링 싱글톤에서 상태를 유지하면 안 되는 이유 (0) | 2025.02.13 |