본문 바로가기
Spring/Spring Boot

Spring Boot / @ComponentScan과 @Controller, @Service, @Repository, @Configuration, @Component

by LWM 2020. 7. 16.
반응형

이번 포스팅에서는 @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개념을 잘 모른다면 아래링크 참조.

swdevelopment.tistory.com/272

 

Spring / IoC와 DI

*loC란? IoC는 Inversion of Control의 약자로 프레임워크의 핵심 요소이며 스프링에도 예외없이 존재하는 개념이다. IoC는 해석하면 제어의 역전 또는 제어의 반전이며 이것은 메소드나 객체의 호출작��

swdevelopment.tistory.com

 

반응형

'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