일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- lock
- stream
- 알고리즘
- 배타락
- 백엔드면접
- hashcode
- Spring
- http
- 자바면접
- 운영체제
- equals
- 자바기술면접
- DB
- Application
- 백엔드
- 개발자면접
- 스트림
- 기술면접대비
- 데이터베이스
- 면접준비
- 공유락
- 스프링
- jpa
- 객체지향언어
- 네트워크
- 자바8
- 자바
- java
- 개발자기술면접
- 기술면접
Archives
- Today
- Total
서은파파의 추월차선
[Spring/면접] @Component, @Controller, @Service, @Repository의 차이점에 대해서 본문
Spring
[Spring/면접] @Component, @Controller, @Service, @Repository의 차이점에 대해서
seoeunpapa 2025. 2. 10. 22:31728x90
@Component, @Controller, @Service, @Repository의 차이점에 대해서 설명해주세요.
@Component, @Service, @Controller, @Repository는 각각의 클래스를 특정 역할을 수행하는 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 및 핸들러로 등록되었습니다. 하지만 Spring 6 이후 부터 @Controller 외에는 핸들러로 등록하지 않아 웹 요청을 정상적으로 수행할 수 없습니다.
public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMapping
implements MatchableHandlerMapping, EmbeddedValueResolverAware {
...
@Override
protected boolean isHandler(Class<?> beanType) {
return AnnotatedElementUtils.hasAnnotation(beanType, Controller.class); // 컨트롤러 애너테이션인지 확인
}
...
}
@Repository를 @Component로 대체할 경우, PersistenceExceptionTranslationPostProcessor에 의해 예외가 DataAccessException으로 변환되지 않습니다. 이 경우 데이터 액세스 계층에서 발생하는 예외 처리에 영향을 미칠 수 있습니다.
또 @Service, @Controller, @Repository는 각각 특정 계층을 나타내므로, AOP의 포인트컷을 정의할 때 유용하게 사용될 수 있습니다. @Component를 사용하면 이러한 계층 구분이 불분명해져 AOP 적용이 어려울 수 있습니다.
추가 학습 자료를 공유합니다.
728x90
'Spring' 카테고리의 다른 글
[스프링/JPA] JPA에서 ID 생성 전략에 대해 (0) | 2025.02.06 |
---|---|
[Spring/스프링/면접] JPA의 ddl-auto 옵션은 각각 어떤 동작을 하고 어떤 상황에서 사용해야 할까요? (1) | 2025.01.28 |
[Spring/스프링/면접] JPA의 N + 1 문제에 대해서 (0) | 2025.01.27 |
[Spring/스프링/면접] 엔티티 매니저에 대해서 (0) | 2025.01.26 |
[Spring/스프링/면접] Spring Data JPA에서 새로운 Entity인지 판단하는 방법은? (0) | 2025.01.25 |