스프링이 스캐닝으로 bean을 등록할 컴포넌트는 기본적으로 @Component를 달아주며 @Configuration도 @Component를 상속 받았다.(즉, bean으로 등록된다.)

- basePackages에 등록되지 않은 패키지는 스캔에서 제외되고, 등록된 패키지 내의 Component 및 @Component를 상속받은 어노테이션들을 탐색한다.
- 만약, basePackages를 등록하지 않으면 현재 설정 클래스가 패키지를 자동으로 탐색, 다른 패키지는 탐색X
@Component
- 스프링에서 관리되는 객체(bean)임을 표시하기 위해 사용하는 가장 기본적인 어노테이션
@Controller
- Web MVC 코드에서 사용되는 어노테이션으로 @RequestMapping 어노테이션은 해당 어노테이션이 작성 된 클래스 내에서만 사용 가능
- 주로 컨트롤러 계층에서 사용하며 메소드 하나하나가 서블릿과 매핑되는 구조
@Service
- 비즈니스 로직이 작성된 클래스에 사용한다. 추가적인 기능은 없지만 추가적인 기능을 제공할 계층을 명시할 때 사용
- 주로 서비스 계층을 구분하기 위한 용도로 특별한 기능은 없음
@Repository
- 플랫폼 예외를 포착하여 PersistenceExdeptionTranslationPostProcessr가 DataAcceessException으로 변환하여 다시 발생한다.
- DB의 예외처리를 스프링에서 인식할 수 있도록 변경
<aside>
💡 계층이 명확하지 않은 경우에는 @Component를 사용한다.
</aside>
MemberDAO memberDAO = context.getBean(MemberDAO.class);