이번 포스팅에서는 @ComponentScan 어노테이션과 이 어노테이션이 읽어내는 어노테이션에 대해 살펴보자.
@ComponentScan
@ComponentScan 어노테이션은 프로젝트 생성 시 프로젝트명과 함께 뒤에 Application.java가 붙어 생성되는 파일에 작성되어있는 @SpringBootApplication 어노테이션에 내장되어 있는 어노테이션이다.
@ComponentScan 어노테이션의 주 기능은 첫째, 스캔 위치를 설정하고 둘째, 필터를 통해 특정 어노테이션의 스캔여부를 설정한다. 이 어노테이션은 기본적으로 프로젝트 생성 시 만든 메인패키지의 이하 모든 패키지의 어노테이션들을 전부 스캔한다. 스캔하는 대상 어노테이션은 다음과 같다.
- @Controller
- @Service
- @Repository
- @Configuration
- @Component
1. @Controller
@Controller 어노테이션은 Controller로 사용되는 자바클래스파일에 사용된다.
뒤에서 다루겠지만 @RequestMapping 즉, @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 어노테이션이 사용되는 클래스파일에 사용된다고 알면된다. 예시는 아래와 같다.
2. @Service
@Service 어노테이션은 Service로 사용되는 자바클래스파일에 사용된다.
Service의 개념을 모르는 분들을 위해 간략히 설명하면 Service는 웹을 배포하였을 때 고객들에게 제공되는 서비스 단위를 말한다. 이러한 서비스는 일반적으로 DB 데이터의 CRUD에 관한 함수들로 구성되어있는 Repository에서 사용하고자하는 함수들 2개이상을 서비스관련 자바클래스파일로 가져와 하나의 트랜잭션으로 묶어서 구성된다.
보통 @Transactional 어노테이션과 함께 쓰인다. 예시는 다음과 같다.
3. @Repository
@Repository 어노테이션은 DB에 접근하는 자바클래스파일에 사용된다.
DB의 쿼리문을 제어하는 함수들로 구성되어 있는 클래스에 작성되는 이 어노테이션은 SQL맵핑 프레임워크와 가장 밀접한 연관성을 가지고 있다. 일반적으로 @Repository가 작성되는 파일은 클래스파일이 아닌 인터페이스파일로 작성된다.
예시는 다음과 같다.
4. @Configuration
@Configuration 어노테이션은 서버실행에 대한 전반적인 설정을 담은 자바클래스파일에 사용된다.
예를 들어 DB접근 설정파일, 시큐리티 설정파일 등 전반적인 설정에 사용되는 자바클래스파일에 사용된다고 생각하면된다. 나중에 다루겠지만 스프링에서 자주 사용되는 @Bean이라는 어노테이션이 있는데 이 어노테이션은 @Configuration이 작성되는 자바파일에 사용된다. 예시는 다음과 같다.
5. @Component
@Component 어노테이션은 직접 작성한 자바클래스파일을 Bean으로 등록할 때 사용된다.
@Component는 모든 어노테이션의 부모이다. 따라서 독자가 위 4가지 어노테이션을 필요로하는 자바파일을 제외하고 어떤 어노테이션을 달아야할지 고민할 땐 @Component어노테이션을 작성해주면 된다라고 생각하면된다. 예시는 다음과 같다.
!알고 넘어가기
위 어노테이션들 중에서 @Controller를 제외한 나머지 어노테이션들은 서버실행 시 static메모리에 띄워지며 @Controller는 클라이언트에서 서버로 request요청 시 static메모리에 띄워진다.
또한 위 5가지 어노테이션이 작성된 클래스파일은 스프링 컨텍스트에 등록된다. 스프링 컨텍스트에 등록되는 것을 IoC라고 하며 IoC개념을 잘 모른다면 아래링크 참조.
'Spring > Spring Boot' 카테고리의 다른 글
Spring Boot / 트랜잭션 롤백하기 (0) | 2020.08.03 |
---|---|
Spring Boot / @ResponseBody와 @RequestBody (0) | 2020.07.16 |
Spring Boot / pom.xml (0) | 2020.07.15 |
Spring Boot / 프로젝트 생성하기 (0) | 2020.07.13 |
Spring Boot / 스프링부트란? (0) | 2020.07.10 |