강의

멘토링

로드맵

Inflearn brand logo image

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

신현섭님의 프로필 이미지
신현섭

작성한 질문수

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

게시글 조회 서비스 설정 & Client & QueryModel

ArticleQueryModel 질문

해결된 질문

작성

·

21

0

안녕하세요. 강의 잘 수강하고 있습니다 : )

다름이 아니라 게시글 같은 경우에 레디스에 저장해서 조회할 때 빠르게 조회하는 건 이해했습니다.

그런데 ArticleQueryModel에 들어가있는 요소들을 보니까 댓글같은 경우에는 댓글 수만 넣어주더라고요.

프런트에서 게시글을 클릭했을 때 게시글에 저장되어 있는 댓글 데이터들을 조회하려면 comment-service로 요청을 해야하는 거죠??

ArticleQueryModel은 순수하게 게시글을 위한 용도인거고 댓글들 같은 경우에는 comment-service로 요청을 해야하는 것 같은데 댓글들은 redis에 저장하지 않고 rdb에서 조회를 해야하는건가요??

답변 1

0

쿠케님의 프로필 이미지
쿠케
지식공유자

현섭님, 안녕하세요!

 

지금 구조에서는 말씀하신대로 댓글 목록은 comment service에서 별도로 요청되어야 합니다.

그리고 QueryModel을 어떻게 구성할지는 조회 요구사항마다 다르기 때문에, 정답이 있는 것도 아니고 필요하다고 판단되면 같이 묶어도 됩니다.

다만, 일반적인 게시판 사용성을 보면 게시글과 댓글 목록을 하나의 QueryModel로 묶는건 적절치 않을 것 같습니다.

게시글의 댓글은 무한할 수 있고, 게시글과 댓글 데이터의 라이프사이클은 다르며, Redis는 NoSQL이고 단일 Key에 대한 크기 제한이 있기 때문에, 댓글이 생성/수정/삭제될 때마다 단일한 게시글+전체댓글목록 쿼리모델을 매번 갱신하는 부담은 아주 크고 제한될 수 있습니다.

댓글 목록은 페이징할 방법도 필요할 것이고요.

또, 게시글 페이지에서 댓글 목록을 같이 보여주지 않는 요구사항일 수도 있습니다.(댓글 진입 버튼을 별도로 클릭하는 등)

이 경우에는 게시글과 댓글 목록을 함께 조회해야 하는 요구사항도 없는데, 단일 쿼리모델에 저장된 댓글 목록으로 인해 오히려 질의 부담이 증가할 수 있습니다.

 

게시글과 댓글을 독립적인 도메인으로 바라보고,

Client는 두 도메인에서 데이터를 요청하여 화면을 그려내면 될 뿐입니다.

중간에 Client를 위해 데이터를 조합해주는 레이어를 둘 수도 있는 것이고요.(BFF 등)

 

이 상황에 댓글의 조회 성능도 높이고 싶다면,

댓글을 위한 CQRS를 구성하면 됩니다.

댓글도 게시글과 비슷한 구조로 QueryModel을 별도로 관리할 수 있는 것입니다.

Client는 독립적인 도메인 게시글과 댓글로 데이터를 요청하여 화면을 그려낼 수 있게 됩니다.

 

정리하면, 서비스 조회 요구사항에 맞춰서 상황에 적절하고 효율적인 방법으로 구현해 나가면 되는 것입니다.

강의에서 제시하는건 방법론과 다양한 구현 예시 중 하나일 뿐이고, 실서비스의 복잡한 요구사항에 맞춰서 적절한 구현을 채택하면 됩니다!

신현섭님의 프로필 이미지
신현섭

작성한 질문수

질문하기