기본 패턴
javascript
const response = await fetch("https://example.com/data");
const webStream = response.body;설명
- Node.js에는 오래전부터
stream.Readable,stream.Writable중심의 전통적인 Node streams 모델이 있었고, 최근에는fetch와 함께 Web Streams API도 기본 제공됩니다. 이름이 비슷해 보여도 모델과 메서드 구성이 다릅니다. - Node streams는 파일, 소켓, 파이프 같은 런타임 자원과 긴밀하게 붙어 있고,
pipe,pipeline,highWaterMark, backpressure 같은 개념을 중심으로 이해하는 편이 좋습니다. - Web Streams는 브라우저와 더 가깝고,
ReadableStream,WritableStream,TransformStream같은 표준 인터페이스를 따릅니다.fetch응답 본문처럼 Web 플랫폼 표면과 연결될 때 자주 등장합니다. - 중요한 것은 "어느 API가 어떤 스트림을 반환하는가"를 구분하는 감각입니다. Node 내부 파일 처리에서는 전통적인 stream이 더 많이 보이고,
fetch나 Web API 경계에서는 Web Streams가 더 자연스럽습니다. - 현대 Node에서는 두 세계가 공존하므로, 스트림 코드가 깨질 때 문법보다 먼저 "지금 내가 다루는 것이 Node stream인지 Web Stream인지"를 확인하는 습관이 중요합니다.
빠른 정리
| 구분 | 잘 보이는 곳 |
|---|---|
| Node streams | 파일, 소켓, 기존 Node API |
| Web Streams | fetch, 표준 Web API 표면 |
| 핵심 차이 | 타입과 메서드 구성이 다름 |
| 핵심 질문 | 이 API가 어떤 종류의 stream을 돌려주는가 |
주의할 점
스트림이라는 이름만 보고 메서드를 섞어 쓰면 바로 막힐 수 있습니다. response.body가 있다고 해서 자동으로
전통적인 Node Readable이라고 가정하면 안 되고, 현재 API가 어느 스트림 계열인지 먼저 확인하는 편이 좋습니다.
참고 링크
2 sources