
Waterfall Request 방식은 여러 개의 비동기 데이터 요청을 순차적으로 처리하는 방식이다.
하나의 요청이 완료된 후에야 다음 요청이 실행되며, 이전 요청의 결과가 다음 요청의 입력값으로 필요한 경우에 사용된다.
예를 들어, 다음과 같이 요청이 이어지는 구조를 의미한다.
const session = await getSession();
const user = await getUser(session);
const teams = await getTeams(user);
특징
1. 의존성 기반 처리
- 각 요청이 이전 요청의 결과에 의존할 때 적합하다.
- 흐름이 명확하고 예측하기 쉬운 구조를 가진다.
2. 순차적 실행
- 각 요청이 직렬적으로 처리된다.
- 이전 요청이 끝나야 다음 요청이 시작된다.
3. 낮은 복잡도
- 코드 가독성이 좋고 디버깅이 용이하다.
- 간단한 흐름에서는 유지보수가 수월하다.
단점
1. 응답 속도 저하
- 요청이 순차적으로 실행되므로 총 처리 시간이 누적된다.
- 네트워크 지연이 클 경우 페이지 로딩 시간이 길어진다.
2. 성능 비효율
- 요청 간에 의존성이 없는 경우에도 직렬로 처리되어 병렬성의 이점을 살리지 못한다.
대안: 병렬 요청 (Parallel Request)
의존성이 없는 요청은 Promise.all() 을 사용하여 병렬로 처리할 수 있다.
이 경우 전체 요청 시간을 크게 줄일 수 있다.
const [session, user, teams] = await Promise.all([
getSession(),
getUser(),
getTeams(),
]);
단, 이 방식은 각 요청이 서로 독립적일 때만 사용할 수 있다.
요약 비교
| 항목 | Waterfall 방식 | 병렬 방식 (Parallel Request) |
| 처리 순서 | 순차적 | 동시에 처리 |
| 의존성 처리 | 용이 | 불가능 또는 까다로움 |
| 전체 실행 시간 | 느림 (누적됨) | 빠름 (가장 오래 걸리는 요청 기준) |
| 코드 복잡도 | 낮음 | 다소 높음 |
결론
Waterfall Request는 요청 간의 의존성이 있을 때 필요한 방식이다. 그러나 모든 요청을 무조건 순차적으로 처리하면 성능이 저하될 수 있다. 상황에 따라 의존성을 분석하고 병렬 요청과 적절히 혼합하여 사용하는 것이 좋다.
728x90
반응형
'Network > Data communication' 카테고리의 다른 글
| RESTful이란? 한 번에 이해하는 RESTful의 개념 (1) | 2025.08.01 |
|---|---|
| 정적 렌더링(Static)과 동적 렌더링(Dynamic)의 차이 (0) | 2025.06.18 |
| HTTP 메서드를 구별해서 사용하는 이유: RESTful API 설계의 중요성 (0) | 2024.06.29 |
| UTC(협정 세계시)에 대해 & 지역마다 다른 시간값의 대처 (0) | 2023.05.14 |
| P2P와 P2MP의 차이 (1) | 2022.08.03 |