[Spring] 6-2. 탐색위치와 기본 스캔 대상

송광호·2024년 1월 4일

[Spring]

목록 보기
25/41
post-thumbnail

Spring 시리즈는 혼자 공부하며 기록으로 남기고, 만약 잘못 학습 한 지식이 있다면 공유하며 피드백을 받고자 작성합니다.
스프링에 대해 깊게 공부해보고자 인프런의 김영한 강사님께서 강의를 진행하시는 (스프링 핵심 원리 - 기본편) 강의를 수강하며 정리하는 글입니다.
혹여나 글을 읽으시며 잘못 설명된 부분이 있다면 지적 부탁드리겠습니다.


탐색 위치

@ComponentScan 탐색 패키지 시작 위치 지정

package hello.core;

@ComponentScan(basePackages = "hello.core")
  • basePackages : 스캔을 시작할 패키지 위치를 지정할 수 있다. 이 패키지를 포함해서 하위에 존재하는 모든 패키지를 탐색한다.
    • basePackages = {"hello.core", "hello.service"} 이런식으로 여러개의 패키지도 지정이 가능하다.
  • basePackageClasses : 지정한 클래스가 존재하는 패키지를 시작 패키지로 잡는다.
  • 아무것도 지정하지 않으면 현재 패키지인 "hello.core" 패키지가 시작위치가 된다.

권장 방법

  • 패키지의 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단에 둔다.
  • 예시로 패키지가 다음과 같은 구조로 되어있다.
    • hello.core
    • hello.core.repository
    • hello.core.service
  • hello.core 는 시작 위치이다. 여기에 메인 설정정보(AppConfig 등)를 배치하고, @ComponentScan애노테이션을 붙이고, 파라미터는 생략한다.
  • 관례로 사용하는것이 좋은게 스프링 CoreApplication.java@SpringBootApplication 애노테이션을 타고 들어가면 이미 @ComponentScan이 있는걸 볼 수 있다.
  • 그래서 스프링은 애플리케이션이 올라갈때 필요한 설정 정보를 전부 스캔하여 빈에 등록한다.

기본 스캔 대상

  • 컴포넌트 스캔은 기본적으로 @Component 애노테이션이 추가되어있는 설정 정보를 스캔한다.
  • 그 외에도 스캔 대상이 되는 것들이 존재한다.
    • @Controller : 스프링 MVC 컨트롤러에서 사용한다.
    • @Service : 스프링 비즈니스 로직에서 사용한다.
    • @Repository : 스프링 데이터 접근 계층에서 사용한다.
    • @Configuration : 스프링 설정 정보에서 사용한다.
  • 마찬가지로 위 4개 또한 뜯어서 타고 들어가보면 @Component 애노테이션이 추가되어 있다.

참고 : 위에서도 그렇고 기본 스캔 대상에서도 말했듯 애노테이션을 타고 들어가면 또 다른 애노테이션이 있지만 기본적으로 애노테이션은 상속 관계가 없다.
순수 자바에서 지원하는 기능이 아닌 애노테이션 상속구조는 스프링에서 지원하는 기능이다.

애노테이션 부가기능

  • 애노테이션은 컴포넌트 스캔의 용도 뿐만아니라 애노테이션은 부가기능이 존재한다.
    • 애노테이션 = 메타정보
  • @Controller : 스프링 MVC 컨트롤러로 인식한다.
  • @Service : 특별한 처리는 하지 않지만 개발자들이 핵심 비즈니스 로직은 여기 있겠구나 라고 인식하는데 도움을 준다.
  • @Repository : 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링의 추상화된 예외로 변경하여준다.
  • @Configuration : 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤으로 유지하도록 추가적인 처리를 한다.

0개의 댓글