본문 바로가기
Computer Science/Spring

@Component, @Controller, @Service, @Repository 차이점

by 꽃요미 2024. 12. 8.

* intro

 - @Component, @Controller, @Service, @Repository 각각의 클래스를 특정 역할을 수행하는 Spring Bean으로 등록할 때 사용됩니다. 각 어노테이션은 클래스가 어떤 역할을 하는지 명시적으로 나타냄. Spring의 @ComponentScan 기능을 통해서 자동으로 Bean으로 등록됩니다. @Controller, @Service, @Repository는 내부적으로 @Component를 사용합니다.

 

* Component

 - 가장 일반적인 형태의 어노테이션, 특정 역할에 종속되지 않는 일반적인 Spring Bean 나타냄.

 

* Service

- 비즈니스 로직을 수행하는 클래스에 사용됨.

 

* Controller

- Spring MVC에서 웹 요청을 처리하는 컨트롤러 클래스에 사용되며 프레젠테이션 레이어의 Bean을 나타냄.

 

* Repository

- DB와의 상호작용을 수행하는 클래스에 사용됨.

 

Q. @Controller, @Repository 대신 @Component 사용하면 안되는가.

- Spring 6(SpringBoot 3) 이전 버전에서는 @Component + @RequestMapping 으로도 Bean 및 핸들러로 등록됩니다. 하지만 Spring 6 이후 부터 @Controller 외에는 핸들러로 등록하지 않아 웹 요청을 정상적으로 수행 불가능.

 

- @Service, @Controller, @Repository는 각각 특정 계층을 나타내므로, AOP의 포인트컷을 정의할 때 유용하게 사용 가능함. @Component를 사용하면 계층 구분이 불분명해져 AOP 적용이 어려워 짐.