병렬화는 한 레이어만 보면 놓친다
병렬화는 한 레이어만 보면 놓친다
한 줄 정의
외부 루프에 pLimit을 걸면 “병렬화 했다”고 착각하지만, 내부 루프에 직렬 await가 있으면 총 시간은 외부 × 내부.
핵심 내용
Before: pLimit(5)로 멤버 간 병렬화 → 실제로는 멤버 내부 이벤트 10개가 직렬.
- 100명 ÷ 5병렬 = 20라운드 × 5초 = 100초
After: 내부 루프에도 pLimit 적용.
- 100명 ÷ 5병렬 = 20라운드 × 0.5초 = 10초
패턴: 병렬 처리 설계 시 “어디에 await가 있는가”를 전체 콜스택에서 추적.
- 외부 루프에 pLimit 걸었으면 → 내부 루프에도 await 있는지 확인
- 내부에 API 호출 있으면 → 그것도 병렬화 대상
- rate limit은 pLimit 숫자로 제어
체크리스트
- pLimit/Promise.all 발견 → 그 안에 await 개수 확인
- 내부 await N회 반복 → 총 대기시간 = 외부병렬라운드 × N × 단위시간 계산
Relationships
derived_from ../projects/lattice/entities/lattice — lattice 미팅노트 리마인더 cron에서 발견 (멤버 5명 병렬, 이벤트 10개 직렬)