• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • @Controller, @Service, @Repository
        2022년 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/55

        JDBC 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
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바