Skip to content

[ Community ] 게시글 목록과 댓글 트리에서 N+1 이 발생한다 #89

Description

@RosieOh

💚 어떤 기능인가요?

커뮤니티 응답 생성 경로에 N+1 이 세 군데 있다. 결과는 맞지만 게시글·댓글 수에 비례해
쿼리가 늘어난다.

1. 작성자 프록시 초기화

CommunityMapper.toPostResponsepost.getAuthor().getId() 를 호출한다.
User 는 필드 접근 엔티티라 Hibernate 가 식별자 게터를 가로채지 못하고,
getId() 호출만으로 프록시가 초기화된다. 게시글 수만큼 사용자 조회가 나간다.

2. 태그 컬렉션

post.getTags() 가 지연 로딩이라 게시글마다 1회.
페이징 쿼리에 컬렉션을 join fetch 하면 Hibernate 가 전체 행을 읽어 메모리에서 페이징하므로
(HHH000104) 그 방향은 쓸 수 없다.

3. 댓글 답글 재귀

toCommentResponsecomment.getReplies()재귀 호출한다.
댓글 트리의 노드 수만큼 쿼리가 나가고, 깊이가 깊을수록 급격히 나빠진다.

목록 20건 기준 약 41 쿼리.

✅ To Dos

  • 작성자는 @EntityGraph 로 fetch (ToOne 이라 페이징과 안전)
  • 태그는 @BatchSize 로 배치 로딩
  • 댓글은 활성 전체를 1회 조회한 뒤 메모리에서 트리 조립
  • 부모가 숨김된 고아 답글이 유실되지 않게 최상위로 승격
  • 트리 조립 정확성 테스트

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions