인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

쌤수님의 프로필 이미지

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

키워드 정리

CQRS에 대한 jpa interface에 대한 궁금증..

작성

·

61

0

  • 학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!

  • 먼저 유사한 질문이 있었는지 검색해 보세요.

  • 서로 예의를 지키며 존중하는 문화를 만들어가요.

     

 안녕하세요 우빈님!

테스트 강의 복습 중인데, 다시 들으니깐 너무 재밌네요...

 

다름 아니라, CQRS 에 따라서 강의를 진행하면서도 Controller와 Service를 CQRS에 따라 분리하고 있습니다.

(패키지가 많아지긴하네요..ㅎㅎ..)

그런데 궁금한 부분은 Repsitory쪽인데,

JpaRepository를 상속받는 인터페이스들(강의로 예를 들면 ProductRepository, StockRepository, OrderRepository가 있겠네요)

같은 경우인데,

sprind data jpa 인터페이스에 CRUD 중에 CD 에 대한 책임을 줄 수는 있겠다 생각했고,

U 는 변경감지에 책임을 맡기면 되겠다고 생각했습니다..

 

그런데, 쿼리메서드 부분이 모호한데요.

작성했던 쿼리 메서드 같은 경우는 Query에 대한 부분인데 책임을 분리하려고보니, command에 query가 묶여있는 형태더라고요..

이 부분은 어떻게 나누는지가 궁금합니다..

제 짧은 지식 선에서는 QueryDSL 로 나눠야 하나 싶지만,

쿼리 메서드라는 편리한 것이 있는데 굳이 돌아가는 것 같다는 느낌이 드네요

제가 굳이 나누려는건지 싶기도 하구요...

조언을 구해봅니다..

답변 2

0

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, 쌤수 님!

좋은 고민이네요. 간단한 수준이라면 편의를 위해 Command 쪽에 Query성 쿼리 메서드를 두는 방법도 선택할 수 있긴 합니다. (어느정도 감안을 하는거죠.)
만약 복잡한 프로젝트이거나, 철저하게 분리를 하려면 말씀하신대로 QueryDSL로 분리하는 방법을 사용하면 될 것 같네요.

감사합니다 🙂

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 쌤수님!

CQRS(Command and Query Responsibility Segregation)는 시스템의 명령과 조회를 명확히 분리하여 각 기능의 책임을 명확하게 하는 패턴입니다. 말씀하신 내용을 보면 JPA Repository 인터페이스에서의 쿼리 메서드들이 어떻게 CQRS 패턴에 맞춰지는지에 대해 궁금하신 것 같습니다.

CQRS의 기본 개념을 적용할 때, 명령과 조회를 명확히 분리하는 것이 핵심입니다. 각 레이어가 명확히 자신의 책임을 가지도록 설계해야 합니다.

  1. 명령(Command)와 조회(Query)의 분리: 일반적으로 Repository는 데이터베이스에 대한 읽기/쓰기 작업을 모두 포괄합니다. 하지만 CQRS에서는 이를 분리하여 명령 관련 작업과 조회 관련 작업이 별도의 경로로 수행되도록 디자인합니다.

  2. JPA Repository와 쿼리 메서드: JPA Repository의 쿼리 메서드를 사용하면 편리하게 조회 작업을 수행할 수 있지만, 이 메서드들이 명령과 조회 간의 경계를 흐리게 만들 수 있다는 점이 문제로 지적됩니다. 따라서, 명확한 책임 부여를 원한다면 쿼리 작업은 별도의 인터페이스나 클래스를 통해 처리할 수 있습니다. 예를 들어, QueryDSL이나 외부 라이브러리를 활용하여 조회 전용 레이어를 구성할 수 있습니다.

  3. QueryDSL이나 별도 리포지토리의 사용: QueryDSL이나 Spring Data JPA에서 제공하는 Specification을 통해 좀 더 복잡한 쿼리를 구성할 수 있습니다. 이러한 방법을 활용하면 조회 전용의 리포지토리 인터페이스 또는 클래스를 만드는 방향으로 설계를 잡아보실 수 있습니다.

하지만 이러한 분리는 현실적으로 모든 프로젝트에 적용하기 어려울 수 있습니다. 프로젝트의 규모, 팀의 역량 및 비즈니스 요구사항에 따라 적절히 이러한 패턴을 적용할 필요가 있습니다.

관련하여, 아래의 게시물이 도움이 될 수 있습니다:

  1. 강의를 다 들은 후에 오랜 궁금증에 대해 질문드립니다!

이 게시물에서 CQRS와 객체지향 설계에 관련된 인사이트를 얻으실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

쌤수님의 프로필 이미지

작성한 질문수

질문하기