• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

안녕하세요 선생님 DRF 대댓글에 대해서 질문드립니다!!

22.07.15 14:06 작성 조회수 500

0

안녕하세요 선생님

 

DRF 대댓글에 대해서 질문드리려고 합니다.

 

제가 원하는 대댓글 구현은 계층형인데요 (물론 요즘은 잘 안쓰는걸로 알고있지만;;)

 

예를 들어 (reddit이랑 댓글 구현이 정확히 일치합니다!! -> 계층형 댓글로 구현이 되있습니다)

 

댓글

-대댓글

--대대댓글

--대대댓글

-대댓글

--대대댓글

댓글

-대댓글

-대댓글

댓글

...

 

 

 

위와 같이 어떠한 포스트글에 댓글, 대댓글 전부 한번에 보이게 구현을 하고 싶은데

보통 대댓글도 결국 댓글이라서 self join하자나요?

 

class Comment(TimestampedModel):

    author = models.ForeignKey(User, on_delete=models.CASCADE)

    post = models.ForeignKey(Post, on_delete=models.CASCADE, verbose_name='포스트 제목')

    message = models.TextField(verbose_name='댓글')

    parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True)

 

근데 문제는 pagination이 걸려 있다보니깐 어떠한 댓글에 대댓글, 대대댓글을 저렇게 정렬된 상태로 한번에 가져오는 방법이 떠오르지가 않네요; (댓글에 좋아요도 추가해서 정렬 알고리즘을 추가할 예정입니다)

 

그래서..

 

1. pagination을 풀어서 어떠한 포스트에 댓글을 전부 response하고 클라이언트 단에서 정렬하라고 하는건지?

(물론 당연히 DB 부담이 커서 처음엔 이 방법을 전혀 생각하고 있지 않았지만, 한편으로는 댓글은 많아봐야 몇천개라서 커버가 될 수있을까 ? 라는 막연한 생각이드네용)

 

2. 댓글 하나당 대댓글이 있는지 재귀적으로 요청해서 대댓글이 있으면 가져오고 없으면 넘어가는 식으로 구현?

(물론 당연히 이것도 하나의 포스트에 여러번의 DB 요청을 하기 때문에 서버측에서 굉장히 부담이 커서 현실성이 매우 떨어짐)

 

위 두 방법은 좀 현실성이 떨어져서 좀 더 효과적으로 구현할 수 있는 방법이 있을것같은데

실력과 경험부족으로 떠오르지가 않네요...

 

혹시 위 처럼 계층형 대댓글을 구현하는데 좋은 로직이나 자료나 솔루션이 있을까요????

(프론트엔드는 코틀린입니다)

답변 1

답변을 작성해보세요.

0

안녕하세요.

댓글 조회가 생성/수정보다 많다면, 원본은 Comment 모델로 두시되 포스팅별 댓글 내역을 특정 포스팅 필드에 캐싱하는 방법도 있을 수 있습니다. JSONField를 하나 두시고, 댓글 생성/수정시마다 댓글 내역을 해당 JSONField에 캐싱하는 거죠. 그리고 조회 시에는 그 JSONField만 읽어가는 것입니다. // 구현 방법으로는 Comment 모델의 save 메서드를 재정의하거나 post_save 시그널을 받아서 처리하실 수 있습니다.

혹은 프론트엔드 단에서는 레벨1의 댓글만 보여주고, 레벨1의 각 댓글에서 펼침 메뉴를 선택하면 그 댓글1에 속한 댓글2 댓글목록을 조회해서 보여주는 방식이 있을 수 있습니다. // 윈도우 탐색기에서 폴더를 펼치는 방식도 비슷하다고 볼 수 있겠네요.

그리고 장고에서 Tree Traversal를 지원하는 라이브러리 중에 django-mptt가 있습니다. 저도 자주 사용하는 라이브러리인데요. 참고해보시면 좋으실 듯 합니다.

https://django-mptt.readthedocs.io/en/latest/overview.html

화이팅입니다. :-)