안녕 장고로 웹 개발중인 코린이야


이래저래 찾아보고 AI한테도 물어보고 하면서 만들고 있는데 쉽지가 않네.. 독학이라 그런지 특히 프로그래밍 기법이나 패턴같은걸 잘 몰라서 멍청한 코드를 많이 쓰는거 같아.


아무튼 질문은 이래.


-----------------------------------------------------------


1. 게시판의 게시글을 보여주는 페이지가 있고, 여기서는 게시글 내용과 함께 댓글들을 표시해줌.


2. 댓글을 나타내는 테이블의 DB 구조 중, 테이블 자기 자신을 ForeignKey로 참조하는 'parent'라는 필드를 통해 대댓글일 경우 parent에 이 comments 테이블의 PK(comment_id)를 저장하여 어떤 댓글의 대댓글임을 표시하고 있음. Django 코드는 아래와 같음.

class comments(models.Model):
    post = models.ForeignKey(posts, on_delete=models.CASCADE, db_column='post_id', related_name='post_ownid')
    comment_id = models.BigAutoField(primary_key=True)
    parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)


3. 이걸 장고 HTML에서 마지막에 렌더링 하는데 댓글이 50개만 달려도 렌더링 속도가 그에 비례하여 씹창남(거의 0.8초). 쿼리의 문제인가 싶어서 코드를 분석해봤지만 함수나 쿼리의 실행속도 문제는 아니었음(0.02초만에 실행 완료).


4. 문제가 될 만한 부분을 분석해보니, 댓글을 렌더링 하는 구조에서 반복문 안에 반복문이 있는 구조가 문제가 될 것 같아 보임.


5. 댓글과 대댓글을 렌더링 하는 구조가 현재는 이런식이지만, 이걸 개선할 아이디어가 떠오르지 않음.

1) 장고 함수에서 'parent'가 없는 순수 댓글과 'parent'가 있는 대댓글을 따로 HTML(템플릿)에 넘겨줌.

2) 모든 순수 댓글에 대해 반복문을 통해 한개씩 렌더링 함.

3) 2)의 과정중에, 모든 대댓글에 대해 반복문을 통해 만약 대댓글의 parent가 현재 렌더링 중인 댓글의 comment_id(PK)와 일치하면 대댓글을 렌더링 하도록 함.


3)과 같이 parent랑 comment_id(PK)가 일치하건 하지 않건 무조건 반복문을 통해 조건식을 검사하다 보니까 문제가 생기는거 같은데 이걸 어떻게 고칠 방법이 안 떠오르네. 혹시 좋은 아이디어 있을까?


긴 글 읽어줘서 고마워.