댓글 리스트가 최신순으로 정렬이 되지 않고 지멋대로 정렬이 된다!
처음에는 자식 댓글만 정렬이 안 되는줄 알고 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
복사
염염귿~