@Component
@Controller
@Service
@Repository
위 4개의 애너테이션은 각각의 클래스가 특정역할을 수행하는 Spring Bean으로 등록될 때 사용됩니다. 명시적으로 나타내는 애너테이션이며, Spring의 @ComponentScan 기능을 통해 자동으로 Bean으로 등록됩니다.
@Service, @Controller, @Repository 애너테이션은 내부적으로 @Component 애너테이션을 사용하고 있습니다.
- @Component 는 가장 일반적인 형태의 애너테이션으로, 특정 역할에 종속되지 않는 일반적인 Spring Bean을 나타냅니다.공통 기능을 제공하는 유틸리티 클래스나, 특정 계층에 속하지 않는 일반적인 컴포넌트를 정의할 때 사용합니다.
- @Service는 비지니스 로직을 수행하는 클레스에 사용되며, 서비스 레이어의 Bean을 나타냅니다.
- @Controller는 Spring MVC에서 웹 요청을 처리하는 컨트롤러 클래스에 사용되며, 프레젠테이션 레이어의 Bean을 나타냅니다.
- @Repository는 데이터베이스와의 상호작용을 수행하는 클래스에 사용되며, 데이터 엑세스 레이어의 Bean을 나타냅니다.
@Controller, @Repository 대신에 @Component를 사용하면 안되나요?
Spring 6(Spring Boot 3) 이전 버전에서는 (@Component + @RequestMapping) 으로 Bean 및 핸들러로 등록이 되었으나, 그 이후로는 @Controller 외에는 핸들러로 등록하지 않아 웹 요청을 정상적으로 수행할 수 없습니다.
@Repository를 @Component로 대체할 경우, PersistenceExceptionTranslationPostProcessor에 의해 예외가 DataAccessException으로 변환되지 않습니다. 이 경우 데이터 액세스 계층에서 발생하는 예외 처리에 영향을 미칠 수 있습니다.
@Service, @Controller, @Repository는 각각 특정 계층을 나타내므로, AOP의 포인트컷을 정의할 때 유용하게 사용될 수 있습니다. @Component를 사용하면 이러한 계층 구분이 불분명해져 AOP 적용이 어려울 수 있습니다.
'매일 공부 > Backend CS' 카테고리의 다른 글
[매일메일] 데이터베이스 커넥션 풀(Connection Pool)을 사용하지 않으면 어떤 문제가 발생 (0) | 2025.04.03 |
---|---|
[매일메일] 단위 테스트와 통합 테스트의 차이점 (2) | 2025.04.01 |
[매일메일] 동기와 비동기의 차이점은 무엇인가 (0) | 2025.03.28 |
[매일메일] TCP 3-way handshake에 대해서 설명 (0) | 2025.03.27 |
[매일메일] 동기 방식으로 외부 서비스를 호출할 때 외부 서비스 장애인가 발생한 경우 조치 (0) | 2025.03.26 |