인프런 커뮤니티 질문&답변

백린이님의 프로필 이미지
백린이

작성한 질문수

EDA 기반 Microservice 구현 (with Hexagonal, DDD)

외부영역 구현(프레임워크 헥사곤),API테스트 수행

@Repository 두 곳에서 사용하시는 이유

해결된 질문

작성

·

353

0

코드를 보면, Adpater 클래스와 Repository 인터페이스, 이렇게 2곳에서 @Repository을 사용하고 계시는데, 2곳에서 사용하시는지 이유가 궁금합니다!

 

답변 1

1

han jeong heon님의 프로필 이미지
han jeong heon
지식공유자

강의자 한정헌입니다.

강의에서 헥사고널 아키텍처,도메인 모델 에 중심을 두다보니 스프링 부트에 대해서는 자세히 설명이 못된 듯 합니다.양해해 주시면 감사하겠고요. 설명드리면

언급하신 Resposity 인터페이스가 RentalCardOutputPort 같은 것이라면 아래 사유에 의해 명명을 했습니다.

  • 저장소 인터페이스의 @Repository 주석은 이 인터페이스가 Spring Bean으로 처리되어야 함을 Spring 프레임워크에 알립니다. 그런 다음 Spring은 이 Bean의 라이프사이클을 관리하고, 트랜잭션을 처리하고, 데이터 액세스와 관련된 기타 기능을 적용할 수 있습니다.

  • 또한 인터페이스 목적에 대한 마커 역할을 하여 데이터 액세스를 담당하는 저장소임을 분명히 합니다.

  • 저장소 구현 클래스의 @Repository 주석은 비슷한 목적으로 사용됩니다. 이는 이 클래스가 저장소 Bean이고 Spring 컨테이너에 의해 관리되어야 함을 Spring에 나타냅니다.

  • 두 위치 모두에서 @Repository를 사용하면 문제를 명확하게 분리하는 데 도움이 됩니다. 인터페이스는 데이터 액세스를 위한 계약 또는 API를 정의하고, 구현은 데이터 소스와 상호 작용하기 위한 실제 논리를 제공합니다. 둘 다 @Repository로 주석을 달면 이러한 구성 요소가 데이터 액세스와 관련되어 있으므로 관리해야 한다는 점을 Spring에 명시적으로 알 수 있습니다.

     

     

    그런데 답변을 드리다 보니 아마도 spring DATA Repository 인터페이스를 언급하시는 것 같기도 하네요. 움. spring data 의 경우에는 @Repository를 작성하지 않아도 자동감지 되고 등록됩니다. 그러나 명시적으로 표현하는 까닭은 이 인터페이스가 저장소 역할을 수행한다는 것을 보여주는 마커 주석의미가 있다고 보시면 될 것 같습니다.

     

감사합니다.

백린이님의 프로필 이미지
백린이

작성한 질문수

질문하기