-
NestJS에서 쿼리빌더의 결과 객체들을 병합하는 방법 with es-toolkitNest.js 2024. 10. 21. 14:13728x90
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'Nest.js' 카테고리의 다른 글
prisma에서는 비관적 락(Pessimistic Lock)을 지원하지 않는다. (0) 2024.10.23 NestJS event-emitter 사용시 런타임 에러 발생시 서버 중단 현상 최근에 패치됨 (0) 2024.08.31 catch 할 수 없는 에러들을 slack 웹훅을 통해 slack 실시간 알림 보내기 (0) 2024.08.16 NestJS에서 Decorator(데코레이터) (0) 2024.08.14 NestJS 꼭 알아야 되는 Exception filter 주의점 (0) 2024.08.14