[BE] 댓글 리스트가 순서 보장이 안 돼요!!!!!!

Tags
Back
Person
Status
Done
문제가 발생한 기능
댓글 리스트
생성 일시
2024/12/02 04:29
댓글 리스트가 최신순으로 정렬이 되지 않고 지멋대로 정렬이 된다!
처음에는 자식 댓글만 정렬이 안 되는줄 알고 entity에서 정렬을 해주면 될 거라고 생각을 해서 @OrderBy("createdAt ASC") 를 추가해서 확인해봤다.
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = CascadeType.ALL) @OrderBy("createdAt ASC") private List<Comment> children = new ArrayList<>();
Java
복사
우연이었는지 자식 댓글 정렬이 잘 수행되서 문제가 해결됐다고 생각했다.
근데 서버 올려서 테스트하니까 댓글 리스트 순서가 아주 지멋대로임 부모 댓글도 많아지니까 아주..~~ 난리가 났음
뭐가 문제일지 팀원들과 이야기해 본 결과
Comment List Response에서 그냥 map을 사용해서 순서 보장이 안 됐던 거였다..
Map<Long, CommentDetailResponse> responseMap = infos.stream() .map(CommentDetailResponse::from) .collect(Collectors.toMap(CommentDetailResponse::getId, response -> response));
Java
복사
그래서 LinkedHashMap을 이용해서 순서가 보장되도록 변경했다!
Map<Long, CommentDetailResponse> responseMap = infos.stream() .map(CommentDetailResponse::from) .collect(Collectors.toMap( CommentDetailResponse::getId, response -> response, (existing, replacement) -> existing, LinkedHashMap::new // LinkedHashMap으로 순서 보장 ));
Java
복사
포스트맨 응답 JSON
{ "comments": [ { "id": 11, "content": "댓글의 순서를 봐봅시다user1 - 1", "postId": 11, "parentId": null, "parentNickname": null, "createdAt": "2024-11-09T07:22:19.653201Z", "commentLikes": 0, "liked": false, "deleted": false, "commenter": { "token": "token1", "nickname": "user1nick", "profileImage": "https://example.com/user1.png", "univName": "University 1" }, "children": [] }, { "id": 12, "content": "댓글의 순서를 봐봅시다user1 - 2", "postId": 11, "parentId": null, "parentNickname": null, "createdAt": "2024-11-09T07:22:25.336117Z", "commentLikes": 0, "liked": false, "deleted": false, "commenter": { "token": "token1", "nickname": "user1nick", "profileImage": "https://example.com/user1.png", "univName": "University 1" }, "children": [] }, { "id": 13, "content": "댓글의 순서를 봐봅시다user1 - 3", "postId": 11, "parentId": null, "parentNickname": null, "createdAt": "2024-11-09T07:22:30.462341Z", "commentLikes": 0, "liked": false, "deleted": false, "commenter": { "token": "token1", "nickname": "user1nick", "profileImage": "https://example.com/user1.png", "univName": "University 1" }, "children": [] }, { "id": 14, "content": "댓글의 순서를 봐봅시다user2 - 1", "postId": 11, "parentId": null, "parentNickname": null, "createdAt": "2024-11-09T07:22:41.147248Z", "commentLikes": 0, "liked": false, "deleted": false, "commenter": { "token": "token2", "nickname": "user2nick", "profileImage": "https://example.com/user2.png", "univName": "University 2" }, "children": [] }, { "id": 15, "content": "댓글의 순서를 봐봅시다user2 - 2", "postId": 11, "parentId": null, "parentNickname": null, "createdAt": "2024-11-09T07:22:49.866429Z", "commentLikes": 0, "liked": false, "deleted": false, "commenter": { "token": "token2", "nickname": "user2nick", "profileImage": "https://example.com/user2.png", "univName": "University 2" }, "children": [] }, { "id": 16, "content": "댓글의 순서를 봐봅시다user2 - 3", "postId": 11, "parentId": null, "parentNickname": null, "createdAt": "2024-11-09T07:22:55.182722Z", "commentLikes": 0, "liked": false, "deleted": false, "commenter": { "token": "token2", "nickname": "user2nick", "profileImage": "https://example.com/user2.png", "univName": "University 2" }, "children": [] }, { "id": 17, "content": "댓글의 순서를 봐봅시다user1 - 4", "postId": 11, "parentId": null, "parentNickname": null, "createdAt": "2024-11-09T07:23:07.805322Z", "commentLikes": 0, "liked": false, "deleted": false, "commenter": { "token": "token1", "nickname": "user1nick", "profileImage": "https://example.com/user1.png", "univName": "University 1" }, "children": [] }, { "id": 18, "content": "댓글의 순서를 봐봅시다user1 - 5", "postId": 11, "parentId": null, "parentNickname": null, "createdAt": "2024-11-09T07:23:12.707164Z", "commentLikes": 0, "liked": false, "deleted": false, "commenter": { "token": "token1", "nickname": "user1nick", "profileImage": "https://example.com/user1.png", "univName": "University 1" }, "children": [] } ], "commentCount": 8 }
Java
복사
염염귿~