- @Controller, @Service, @Repository2022년 09월 09일
- starryeye
- 작성자
- 2022.09.09.:09
Spring이 제공하는 어노테이션 중..
@Controller, @Service, @Repository에 대해 알아보자..
먼저 @Controller이다.
@Component의 specialization이라 설명해주고 있다.
@Component의 일종이므로, 컴포넌트 스캔에 의해 스프링 컨테이너에 자동으로 등록되는 빈이다.
그리고...
handler method에 붙이는 @RequestMapping 어노테이션을 지원해줄 수 있다.
자매품으로 @RestController가 있다.
@RestController = @Controller + @ResponseBody
@Service이다.
@Service 어노테이션은 그냥 @Component와 다를바가 없다.
개발자가 서비스 계층이라 명시 하고 싶을 때 사용한다.
@Repository이다.
역시, @Component의 특화 어노테이션이며..
@Repository가 붙은 클래스는
예외 변환 AOP의 적용 대상이 된다.
스프링은 스프링 예외 추상화를 제공한다.(DataAccessException)
이전에 작성한 DataAccessException 관련 포스팅
https://starryeye.tistory.com/55JDBC 9
직전 포스팅에서 repository layer에 특정 DB에 종속적인 코드가 들어가 버렸다. e.getErrorCode() == 23505 해당 코드는 H2 한정이다.. 지금까지 특정 DB에 따른 코드 분리는 필요 없었지만.. DataSource가 라이..
starryeye.tistory.com
잠깐 JPA와 함께 보자..애플리케이션과 DB 연동을 위한 데이터 접근 기술인 JPA를 사용할 경우..
Repository는 JPA에서 발생시킨 예외를 받게된다..
-> JPA의 EntityManager는 순수 JPA이기 때문에 스프링 예외 추상화 지원이 되지 않는다.
-> 따라서.. Repository는 순수 JPA 예외를 받게되는 것이다.
서비스 계층은 순수성을 유지시켜야 하므로
데이터 접근 기술(JPA)에 대한 의존성이 있으면 안된다.
따라서.. JPA 예외는 스프링 예외 추상화로 변환이 필요하다..
그때..
@Repository 어노테이션이 적용된 클래스의 AOP를 만들고
해당 AOP에서 JPA 예외를 스프링 예외 추상화로 변경 해준다.
이를 위해, @Component와는 차별화 되도록..
@Repository 어노테이션의 특별한 역할이 추가되었다.
'Spring > Core' 카테고리의 다른 글
Spring에서 자주 쓰이는 디자인 패턴 4 (0) 2022.11.05 Spring에서 자주 쓰이는 디자인 패턴 3 (0) 2022.11.05 Spring에서 자주 쓰이는 디자인 패턴 2 (0) 2022.10.20 Spring에서 자주 쓰이는 디자인 패턴 1 (0) 2022.10.19 Spring Core 마스터하기 1 (0) 2022.07.20 다음글이전글이전 글이 없습니다.댓글