Skip to content

댓글 API 응답 데이터 및 정렬 로직 수정 #79

@meraki6512

Description

@meraki6512

어떤 버그인가요?

이슈 상세 페이지의 댓글 기능과 관련하여 두 가지 버그가 발생하고 있습니다.

  1. 데이터 누락: 댓글 목록 조회 API(GET /issues/{issueId}/comments) 응답에 댓글 작성자 ID(authorId)가 누락됩니다.
  2. 정렬 로직 오류: 대댓글을 작성하면, 해당 대댓글이 달린 부모 댓글의 순서가 전체 목록의 최상단으로 변경됩니다.

어떤 상황에서 발생했나요?

(가능하면) Given-When-Then 형식으로 서술해주세요.

  1. 권한 확인 실패
  • Given: 로그인한 사용자가 본인이 작성한 댓글을 확인하는 상황.
  • When: 이슈 상세 페이지에 진입하여 댓글 목록을 불러온다.
  • Then: authorId가 없어 내가 쓴 댓글임에도 수정/삭제 버튼이 보이지 않는다.
  1. 정렬 순서 파괴
  • Given: 댓글들이 작성 시간(최신순)으로 정렬되어 있는 상태.
  • When: 목록의 가장 아래에 있는 오래된 댓글에 '답글'을 작성한다.
  • Then: 답글이 달린 오래된 댓글 묶음 전체가 댓글 목록의 맨 위로 올라와 버린다.

재현 방법

어떻게 버그를 재현할 수 있는지 단계별 설명

  1. authorId 누락 문제
  • 아무 계정으로나 로그인합니다.
  • 특정 이슈 상세 페이지로 이동하여 새 댓글을 작성합니다.
  • 페이지를 새로고침한 후, 브라우저 개발자 도구의 '네트워크' 탭에서 /comments API 응답을 확인하면 authorId 필드가 없는 것을 볼 수 있습니다. (웹 상에서는 수정/삭제 버튼이 활성화가 되지 않습니다.)
  1. 정렬 문제
  • 이슈 상세 페이지에서 댓글이 여러 개 있는 것을 확인합니다.
  • 스크롤을 내려 가장 오래된 (가장 아래에 있는) 댓글에 '답글' 버튼을 누릅니다.
  • 내용을 입력하고 '답글 등록'을 클릭합니다.
  • 댓글 목록이 새로고침되면서, 방금 답글을 단 오래된 댓글이 목록 최상단으로 이동하는 것을 확인합니다.

기대 결과

정상 동작 시 예상되는 결과
정상 동작 시 다음과 같이 동작해야 합니다.

  • GET /issues/{issueId}/comments API 응답의 모든 댓글 객체(대댓글 포함)에는 authorId 필드가 반드시 포함되어야 합니다.
  • 대댓글을 작성해도 최상위 댓글들의 정렬 순서는 변경되지 않아야 합니다. 정렬은 오직 최상위 댓글들의 createdAt을 기준으로 이루어져야 합니다.

실제 결과

현재 발생하고 있는 문제 상황
현재 두 기능 모두 비정상적으로 동작하고 있습니다.

  • API 응답에 authorId가 누락되어 프론트엔드에서 댓글 수정/삭제 권한을 확인할 수 없습니다.
  • 대댓글을 작성하면 부모 댓글의 정렬 순서가 의도치 않게 변경되어 사용자 경험을 해칩니다.

수정 예정 사항

  • CommentResponse DTO에 authorId 필드를 추가하고, CommentService에서 엔티티를 DTO로 변환할 때 author.id 값을 올바르게 매핑합니다.
  • CommentService의 댓글 조회 로직을 수정하여, 최상위 댓글(parentId가 null)을 기준으로 먼저 정렬한 뒤, 각 댓글의 자식 댓글(대댓글)을 계층적으로 불러오도록 변경합니다.
  • 변경된 로직에 대한 단위 테스트 또는 통합 테스트 코드를 보완합니다.

참고 자료(선택)

스크린샷, 로그, 기타 참고 자료 등 참고할 만한 정보가 있다면 추가해주세요.

  • authorId 누락 문제에 대한 프론트엔드 콘솔 로그입니다.
Current User ID: 3 (Type: number )
Comment Author ID: undefined (Type: undefined )

데스크탑:

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

스마트폰:

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions