데브허브 | DEVHUB | Fetch Your Data 2x Faster With This Trick (and when you shouldn’t)Fetch Your Data 2x Faster With This Trick (and when you shouldn’t)
Promise.all은 여러 비동기 작업을 동시에 실행하여 데이터 가져오기 속도를 2배 이상 향상시킬 수 있습니다. 🚀
- 일반적인
await 순차 호출은 워터폴 효과로 인해 총 실행 시간이 길어지지만, Promise.all은 가장 느린 작업 시간에 맞춰 완료됩니다. ⏱️
Promise.all의 주요 단점은 배열 내 하나의 프로미스라도 실패하면 전체가 즉시 실패하고 다른 성공적인 결과도 얻을 수 없다는 것입니다. ❌
- 이 문제를 해결하기 위해
Promise.allSettled를 사용할 수 있으며, 이는 모든 프로미스의 성공 또는 실패 여부를 객체 배열로 반환하여 개별적인 결과 처리를 가능하게 합니다. ✅
- React 서버 컴포넌트(RSC)에서는
Promise.all 대신 데이터 페칭 로직을 독립적인 자식 컴포넌트(형제 관계)로 분리하고 Suspense를 활용하는 것이 더 권장됩니다. 🌳
- RSC에서 컴포넌트를 분리하면 각 컴포넌트가 데이터를 동시에 가져오고, 개별 로딩 상태를 관리하며, 단일 책임 원칙을 따를 수 있습니다. 🧩
- 하지만, 여러 데이터가 밀접하게 관련되어 컴포넌트 분리가 비효율적일 경우(컴포넌트 지옥 방지), RSC 내에서도
Promise.all을 사용하는 것이 여전히 유효한 전략입니다. 🤝