댓글 내용 조회 시 어떤 방식을 선택하실까요?
게시글 조회 기능을 확장하려고 할 때 댓글을 조회하는 방향에 대해 고민이 있어서 질문 남깁니다.
게시글 하나를 보는 페이지로 사용자가 이동해서, 게시글의 내용과 댓글들까지 이동한 페이지에서 그려야 할 때 게시글 정보와 해당 게시글의 모든 댓글을 가져오는 기능을 신규로 추가하려고 합니다. 해당 기능의 구현에 대해 2 가지 방향을 고민해봤습니다.
게시글처럼 댓글까지 캐싱하는 방법
Hot data 로 캐싱된 게시글들의 댓글들을 캐싱하는 것을 고민했을 때, 댓글은 게시글보다 훨씬 많은 양이기 때문에 캐싱에 대한 비용이 너무 커지는 것에 부담이 생기는 문제가 있다고 생각합니다.
댓글에 대한 조회는 매번 댓글 서비스에서 조회하는 방법
실시간으로 게시물의 댓글을 계속 조회한다면, 조회 서비스에 읽기 부하가 크게 걸릴 것으로 생각합니다.
두 방식 다 장단점이 있다고 생각하는데, 강사님께선 어떤 방식으로 게시글 + 댓글 조회 기능을 구현하실지 의견이 궁금합니다!
답변 1
0
밍트쪼코님, 안녕하세요!
저라면, 2번 방법을 택할 것 같습니다.
게시글 조회 서비스에서 댓글 서비스를 호출하여 같이 조합하여 내려주는 것이 아닌,
클라이언트가 게시글 서비스와 댓글 서비스를 분리하여 호출하는 것입니다.
클라이언트에서 게시글과 댓글은 단일 페이지더라도 분리된 큰 영역일 것이고, 서로 별도로 호출하는건 큰 부담이 없습니다.
게시글 + 댓글을 항상 조합해서 보여줘야한다는 것도 클라이언트의 관심사로 볼 수 있어서,
만약 댓글만 보여줄 필요성이 있을 때에도 클라이언트의 변경만으로 더욱 유연하게 대응할 수 있을 것이고요.
댓글 서비스의 조회 부담이 크다고 판단된다면, 댓글 도메인을 위한 '댓글 조회 서비스'를 만들어주면 되는 것입니다.
클라이언트 요구사항이 모든 데이터를 항상 조합해서 내려줘야 하고, 이러한 단일한 요구사항을 위해 더욱 최적화하고 싶다면, 1번 방법을 조금 더 개선해서 적용할 수도 있을 것 같습니다.
다만, 단일 게시글에 대한 모든 댓글 목록을 단건 쿼리 모델에 담는 건 당연히 무리가 있습니다.
관련해서 댓글도 Hot Data 관점에서 접근해볼 수 있을 것 같은데요, 댓글 목록도 모든 댓글을 캐시할 필요는 없습니다.
결국 댓글이 많으면 댓글에 대해서도 페이징 전략이 들어갈 것이기 때문에, 각 게시글의 댓글 목록도 첫 페이지(또는 상위 N건)만 캐시해둘 수도 있을 것 같습니다.
물론, 구현 방식은 너무나도 다양하기 때문에 몇 가지 예시일 뿐이고 정답도 없는 내용이라, 장단점 따져보시고 크게 문제 없는 방향으로 구현 및 개선해 나가면 충분하다고 생각되네요!
약간 다르긴 하지만, 최근에 비슷한 질문이 들어왔던 게 있어서 참고해보셔도 좋을 것 같습니다.
Kafka Cluster 구성도 질문
0
23
1
@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.
0
52
1
consumer에서 에러가 발생할 경우 데이터 유실 문의
0
65
2
게시글 테스트 데이터 삽입
0
61
2
정렬, 필터, 검색 등의 조건이 붙을 경우 최적화할 수 있는 방법이 무엇이 있을까요?
0
116
2
좋아요 기능 정합성 보장 방법
0
108
2
좋아요 동시성처리 최적의 선택?
1
151
2
프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해
0
98
2
안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.
0
65
1
조회수 조회 로직 질문
1
77
2
비로그인 유저도 어뷰징 방지 정책
1
78
2
CommentServiceTest의 테스트 로직 질문
0
58
2
무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문
1
77
2
path 쿼리 관련 질문드립니다!
0
66
2
antigravity 에디터를 쓰신다면 종료해주세요
1
127
0
프로젝트 구조
0
91
2
article_like_count api test
0
83
2
이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.
0
106
2
[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제
0
94
2
findByPath에서 articleId로도 검색을 해야 할 것 같아요.
0
103
3
jpa ddl-auto none을 하는 이유와 join 방법
0
102
2
팩터리 메소드와 response 객체 사용 이유가 궁금합니다!
0
95
2
커서 기반 페이지네이션 과 무한 스크롤링
0
119
2
게시글 생성 로직에서 오류 발생시 redis 게시글 수 되돌리기
0
102
2





