인프런 커뮤니티 질문&답변
댓글 내용 조회 시 어떤 방식을 선택하실까요?
해결된 질문
작성
·
50
0
게시글 조회 기능을 확장하려고 할 때 댓글을 조회하는 방향에 대해 고민이 있어서 질문 남깁니다.
게시글 하나를 보는 페이지로 사용자가 이동해서, 게시글의 내용과 댓글들까지 이동한 페이지에서 그려야 할 때 게시글 정보와 해당 게시글의 모든 댓글을 가져오는 기능을 신규로 추가하려고 합니다. 해당 기능의 구현에 대해 2 가지 방향을 고민해봤습니다.
게시글처럼 댓글까지 캐싱하는 방법
Hot data 로 캐싱된 게시글들의 댓글들을 캐싱하는 것을 고민했을 때, 댓글은 게시글보다 훨씬 많은 양이기 때문에 캐싱에 대한 비용이 너무 커지는 것에 부담이 생기는 문제가 있다고 생각합니다.
댓글에 대한 조회는 매번 댓글 서비스에서 조회하는 방법
실시간으로 게시물의 댓글을 계속 조회한다면, 조회 서비스에 읽기 부하가 크게 걸릴 것으로 생각합니다.
두 방식 다 장단점이 있다고 생각하는데, 강사님께선 어떤 방식으로 게시글 + 댓글 조회 기능을 구현하실지 의견이 궁금합니다!
답변 1
0
밍트쪼코님, 안녕하세요!
저라면, 2번 방법을 택할 것 같습니다.
게시글 조회 서비스에서 댓글 서비스를 호출하여 같이 조합하여 내려주는 것이 아닌,
클라이언트가 게시글 서비스와 댓글 서비스를 분리하여 호출하는 것입니다.
클라이언트에서 게시글과 댓글은 단일 페이지더라도 분리된 큰 영역일 것이고, 서로 별도로 호출하는건 큰 부담이 없습니다.
게시글 + 댓글을 항상 조합해서 보여줘야한다는 것도 클라이언트의 관심사로 볼 수 있어서,
만약 댓글만 보여줄 필요성이 있을 때에도 클라이언트의 변경만으로 더욱 유연하게 대응할 수 있을 것이고요.
댓글 서비스의 조회 부담이 크다고 판단된다면, 댓글 도메인을 위한 '댓글 조회 서비스'를 만들어주면 되는 것입니다.
클라이언트 요구사항이 모든 데이터를 항상 조합해서 내려줘야 하고, 이러한 단일한 요구사항을 위해 더욱 최적화하고 싶다면, 1번 방법을 조금 더 개선해서 적용할 수도 있을 것 같습니다.
다만, 단일 게시글에 대한 모든 댓글 목록을 단건 쿼리 모델에 담는 건 당연히 무리가 있습니다.
관련해서 댓글도 Hot Data 관점에서 접근해볼 수 있을 것 같은데요, 댓글 목록도 모든 댓글을 캐시할 필요는 없습니다.
결국 댓글이 많으면 댓글에 대해서도 페이징 전략이 들어갈 것이기 때문에, 각 게시글의 댓글 목록도 첫 페이지(또는 상위 N건)만 캐시해둘 수도 있을 것 같습니다.
물론, 구현 방식은 너무나도 다양하기 때문에 몇 가지 예시일 뿐이고 정답도 없는 내용이라, 장단점 따져보시고 크게 문제 없는 방향으로 구현 및 개선해 나가면 충분하다고 생각되네요!
약간 다르긴 하지만, 최근에 비슷한 질문이 들어왔던 게 있어서 참고해보셔도 좋을 것 같습니다.





