Programming/Spring Framework

🤔 스프링 Component-Scan, 몰라도 될까? 진짜 중요함!

철부지개발자 2025. 3. 2. 09:38
반응형

🤔 스프링 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