Spring 시리즈는 혼자 공부하며 기록으로 남기고, 만약 잘못 학습 한 지식이 있다면 공유하며 피드백을 받고자 작성합니다.
스프링에 대해 깊게 공부해보고자 인프런의 김영한 강사님께서 강의를 진행하시는 (스프링 핵심 원리 - 기본편) 강의를 수강하며 정리하는 글입니다.
혹여나 글을 읽으시며 잘못 설명된 부분이 있다면 지적 부탁드리겠습니다.
package hello.core;
@ComponentScan(basePackages = "hello.core")
basePackages : 스캔을 시작할 패키지 위치를 지정할 수 있다. 이 패키지를 포함해서 하위에 존재하는 모든 패키지를 탐색한다.basePackages = {"hello.core", "hello.service"} 이런식으로 여러개의 패키지도 지정이 가능하다.basePackageClasses : 지정한 클래스가 존재하는 패키지를 시작 패키지로 잡는다.권장 방법
hello.corehello.core.repositoryhello.core.servicehello.core 는 시작 위치이다. 여기에 메인 설정정보(AppConfig 등)를 배치하고, @ComponentScan애노테이션을 붙이고, 파라미터는 생략한다.CoreApplication.java의 @SpringBootApplication 애노테이션을 타고 들어가면 이미 @ComponentScan이 있는걸 볼 수 있다.@Component 애노테이션이 추가되어있는 설정 정보를 스캔한다.@Controller : 스프링 MVC 컨트롤러에서 사용한다.@Service : 스프링 비즈니스 로직에서 사용한다.@Repository : 스프링 데이터 접근 계층에서 사용한다.@Configuration : 스프링 설정 정보에서 사용한다.@Component 애노테이션이 추가되어 있다.참고 : 위에서도 그렇고 기본 스캔 대상에서도 말했듯 애노테이션을 타고 들어가면 또 다른 애노테이션이 있지만 기본적으로 애노테이션은 상속 관계가 없다.
순수 자바에서 지원하는 기능이 아닌 애노테이션 상속구조는 스프링에서 지원하는 기능이다.
@Controller : 스프링 MVC 컨트롤러로 인식한다.@Service : 특별한 처리는 하지 않지만 개발자들이 핵심 비즈니스 로직은 여기 있겠구나 라고 인식하는데 도움을 준다.@Repository : 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링의 추상화된 예외로 변경하여준다.@Configuration : 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤으로 유지하도록 추가적인 처리를 한다.