티스토리 뷰
[면접 준비 - Spring]@Service와 @Repository
Vagabund.Gni 2024. 6. 3. 12:15@Service와 @Repository 애너테이션은 스프링 프레임워크에서 각각
서비스 계층과 데이터 접근 계층을 표현하는 데 사용된다.
이 두 애너테이션은 기능적으로 차이가 있을 뿐만 아니라, 내부 구조와 목적에서도 차이를 보인다.
결론부터 말하자면 두 애너테이션 모두 내부적으로는 @Component 애너테이션을 포함하고 있다.
그러나 @Repository는 추가적으로 데이터 접근 예외를 일관된 방식으로 처리하기 위한 예외 변환 기능을 제공한다.
이를 통해 애플리케이션은 더 구조적이고 명확하게 계층을 나눌 수 있으며, 각각의 역할에 맞는 클래스를 정의할 수 있다.
이러한 구분은 코드의 가독성과 유지보수성을 높이는 데 기여한다.
@Service
@Service 애너테이션은 비즈니스 로직을 구현하는 서비스 계층을 표시하는 데 사용된다.
주로 애플리케이션의 비즈니스 로직을 담당하는 클래스에 적용된다.
- 내부 구조
@Service 애너테이션은 기본적으로 특별한 내부 구조를 갖고 있지 않다.
이는 단순히 스프링 컨테이너에게 해당 클래스가 서비스 역할을 한다는 것을 알려주기 위한 것이다.
@Service 애너테이션을 통해 스프링은 이 클래스를 빈으로 등록하며, 이는 다른 빈들에서 주입될 수 있다.
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
@AliasFor(
annotation = Component.class
)
String value() default "";
}
위의 코드에서 볼 수 있듯이, @Service 애너테이션은 @Component 애너테이션을 메타 애너테이션으로 포함한다.
이는 @Service가 @Component와 동일한 역할을 수행하되, 더 명확하게 서비스 계층을 나타내기 위한 것임을 의미한다.
@Repository
@Repository 애너테이션은 데이터 접근 계층을 나타내며, 주로 데이터베이스와의 상호작용을 담당하는 클래스에 적용된다.
- 내부 구조
@Repository 애너테이션은 데이터 접근 계층에서 발생할 수 있는 예외를
스프링의 데이터 접근 예외로 변환하는 역할을 추가로 수행한다.
이는 데이터베이스 특정 예외를 스프링의 DataAccessException으로 변환하여 일관된 예외 처리를 가능하게 한다.
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {
@AliasFor(
annotation = Component.class
)
String value() default "";
}
@Repository 애너테이션 역시 @Component 애너테이션을 메타 애너테이션으로 포함하고 있으며,
예외 변환을 수행하는 AOP(Aspect-Oriented Programming) 기능을 제공한다.
스프링 프레임워크는 PersistenceExceptionTranslationPostProcessor 빈을 사용하여 이러한 예외 변환을 자동으로 처리한다.
'Development > Technical Interview' 카테고리의 다른 글
[면접 준비]N+1 문제 (0) | 2024.08.27 |
---|---|
[면접 준비]SQL에서 UNION/UNION ALL 차이 (0) | 2024.07.31 |
[면접 준비]로컬 스토리지, 쿠키, 세션 (3) | 2024.07.20 |
[면접 준비 - Spring]@Controller와 @RestController (0) | 2024.06.03 |
[면접 준비 - Java]접근 제어자(Access Modifier) (0) | 2024.06.03 |
[면접 준비 - CS]프로세스 스케줄러 (0) | 2023.05.02 |
- Total
- Today
- Yesterday
- 리스트
- 세계여행
- 맛집
- java
- Python
- 지지
- 유럽여행
- 알고리즘
- 면접 준비
- 기술면접
- 스트림
- 동적계획법
- RX100M5
- spring
- 백준
- a6000
- 칼이사
- 세계일주
- 중남미
- Algorithm
- 자바
- 스프링
- 세모
- Backjoon
- 유럽
- BOJ
- 여행
- 파이썬
- 남미
- 야경
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |