Nest.js
NestJS에서 쿼리빌더의 결과 객체들을 병합하는 방법 with es-toolkit
Dev갱이
2024. 10. 21. 14:13
728x90
es-toolkit이란?
toss에서 만들 오픈소스 라이브러리로 lodash와 비교 했을때 es-toolkit은 같은 함수 기준 최대 97% 작은 번들 사이즈를 제공하며, 2~3배 빠른 속도로 동작한다고 설명에 나와있다. 안 쓸이유가 없다.
[
{
groupId: '410544f1-404e-49d7-854a-4408e38af940',
groupName: 'korean',
groupDescription: 'korean',
groupCoverImage: null,
feedId: '6bdd5a93-296d-4979-a3cd-7d77fd6e5826',
contents: '',
isPublic: true,
isVisibleToFollowers: false,
memberId: '410b7202-660a-4423-a6c3-6377857241cc',
username: '',
profileImage: '',
email: '',
myLike: false,
sumLike: '0',
sumComment: '0'
},
{
groupId: '75aca3da-1dac-48ef-84b8-cdf1be8fe37d',
groupName: 'ㅂㅈㄷㅂ',
groupDescription: 'ㅂㅈㄷㅂㅈㄷ',
groupCoverImage: '',
feedId: '40ac4183-13a1-4fb3-8770-c63578bde09b',
contents: '쿠버네티스',
isPublic: true,
isVisibleToFollowers: false,
memberId: '410b7202-660a-4423-a6c3-6377857241cc',
username: '',
profileImage: '',
email: '',
myLike: true,
sumLike: '2',
sumComment: '5'
}
]
날쿼리의 결과를 꽤 오랜만에 보는것 같다.
ORM이 얼마나 고마운지 새삼 깨닫게 된다. 자동으로 객체들을 병합 해주니 얼마나 고마운 일인가!
- 요구 사항이 그룹별로 그룹에 해당하는 피드들을 추출하는 그룹화 작업이 필요하다.
interface.ts
reduce를 활용해 그룹별로 피드를 그룹화하는 작업을 한후 Object.values를 통해서 객체로 반환 해주었다.
{
"groupId": "410544f1-404e-49d7-854a-4408e38af940",
"groupName": "korean",
"groupDescription": "korean",
"groupCoverImage": null,
"feeds": [
{
"feedId": "6bdd5a93-296d-4979-a3cd-7d77fd6e5826",
"contents": "",
"isPublic": true,
"isVisibleToFollowers": false,
"memberId": "410b7202-660a-4423-a6c3-6377857241cc",
"username": "",
"profileImage": "",
"email": "ㅁㄴㅇ",
"myLike": false,
"sumLike": "0",
"sumComment": "0"
}
]
},
{
"groupId": "75aca3da-1dac-48ef-84b8-cdf1be8fe37d",
"groupName": "ㅈㅈ",
"groupDescription": "ㅂㅂ",
"groupCoverImage": "",
"feeds": [
{
"feedId": "40ac4183-13a1-4fb3-8770-c63578bde09b",
"contents": "쿠버네티스",
"isPublic": true,
"isVisibleToFollowers": false,
"memberId": "410b7202-660a-4423-a6c3-6377857241cc",
"username": "",
"profileImage": "",
"email": "",
"myLike": true,
"sumLike": "2",
"sumComment": "5"
}
]
}
es-toolkit `groupBy` 사용
1. feed결과의 groupId를 기준으로 groupBy를 통해서 그룹화 해준다.
2. 그룹화된 object를 Object.entries를 통해서 feeds에 특정 프로퍼티들을 omit을 통해 제외한후 결과값을 완성 해준다.
느낀점
es-toolkit을 사용해서 그룹화 로직을 작성하면 더 좋을것 같았는데 생각보다 의외다. 코드가 엄청 간결해지거나 그럴줄 알았으나 거의 비슷한것 같다. 물론 내가 아직 es-toolkit을 잘 활용 하지 못해서 그럴 수 도 있다. 근데 아무리 찾아봐도 groupBy를 할때 chain 함수를 사용해서 한줄로 정리하거나 그런 방법은 찾을 수 없었다.
처음에 reduce를 활용하여 그룹핑 하는 방법이 더 좋아보인다...
Reference
- ( https://es-toolkit.slash.page/ko/reference/array/groupBy.html#groupby )
728x90