🤔 스프링 Component-Scan, 몰라도 될까? 진짜 중요함!
"왜 내 @Component가 안 잡히죠?" 😭
개발하면서 한 번쯤 겪어봤을 겁니다.
"분명히 @Component 붙였는데 왜 안 되지?"
이게 바로 Component-Scan을 모르면 생기는 문제!
오늘은 Component-Scan이 무엇이고, 어떻게 동작하는지
확실히 이해할 수 있도록 차근차근 정리해드릴게요. 🚀
이 글 하나면 Component-Scan 걱정 끝!
🧐 Component-Scan, 이게 뭐야?
스프링에서는 빈(Bean)을 자동으로 찾고 등록하는 기능이 있습니다.
우리가 @Component, @Service, @Repository, @Controller 등을 붙이면,
Spring이 자동으로 스캔해서 등록 해주는 거죠!
그냥 쉽게 말하면,
"Spring이 알아서 필요한 Bean을 찾아서 컨테이너에 넣어주는 기능"
이라고 보면 됩니다.
그럼 예제 코드부터 보고 가실까요? 🎯
🔥 Component-Scan 동작 과정 (Step by Step)
✅ 1. @Component 붙이면 자동 등록됨
@Component
public class MyComponent {
public void hello() {
System.out.println("안녕하세요, Component-Scan!");
}
}
이 클래스는 @Component가 붙었으니 자동으로 빈 등록! 🎉
✅ 2. @SpringBootApplication의 위치가 중요함!
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(MyApplication.class, args);
MyComponent myComponent = context.getBean(MyComponent.class);
myComponent.hello(); // "안녕하세요, Component-Scan!" 출력됨
}
}
💡 @SpringBootApplication이 있는 패키지를 기준으로 스캔합니다.
그래서 이 클래스보다 위에 있는 패키지는 스캔 안 됨!
✅ 3. 특정 패키지만 스캔하고 싶다면?
@ComponentScan("com.example.service") // 특정 패키지만 스캔
@SpringBootApplication
public class MyApplication { }
💡 이렇게 하면 com.example.service 패키지 아래만 스캔됩니다!
✅ 4. 특정 클래스(혹은 패키지)는 제외할 수도 있음
@ComponentScan(basePackages = "com.example",
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = Repository.class))
@SpringBootApplication
public class MyApplication { }
💡 @Repository 붙은 클래스는 스캔 제외!
⚡ Component-Scan이 안 될 때 체크할 것들!
✅ @SpringBootApplication 위치를 확인하세요!
- 이 패키지를 기준으로 스캔하기 때문에 너무 위에 두면 안 됨.
✅ @Component 같은 애노테이션이 빠졌는지 확인!
- @Service, @Repository, @Controller도 자동 등록되지만 @Configuration 같은 건 따로 처리해야 함
✅ 패키지 구조가 맞는지 확인!
- com.example.config에 @ComponentScan("com.example.service")
→ 이러면 com.example.repository 패키지는 스캔이 안 됨
🎯 Component-Scan, 제대로 활용하는 법!
✔ @SpringBootApplication을 기준 패키지로 활용
✔ 필요한 패키지만 스캔하도록 basePackages 지정 가능
✔ 특정 애노테이션(@Repository 등)은 제외할 수도 있음
✔ 스캔이 안 될 땐 패키지 위치, 애노테이션 누락 체크 필수!
이제 Component-Scan 개념 확실히 잡으셨죠? 😉
더 이상 "왜 안 돼?!" 하고 헤매지 마세요!
혹시 더 궁금한 점 있으면 댓글 남겨주세요! 💬✨
'Programming > Spring Framework' 카테고리의 다른 글
🌊 Spring WebFlux, 도대체 뭐길래? (1) | 2025.03.02 |
---|