기본 패턴
javascript
import { createReadStream, createWriteStream } from "node:fs";
import { pipeline } from "node:stream/promises";
await pipeline(
createReadStream("./input.log"),
createWriteStream("./output.log"),
);설명
- 단순한
readable.pipe(writable)도 유용하지만, 실제 운영 코드에서는 오류 전파와 종료 처리가 더 중요합니다. pipeline()은 여러 스트림을 연결하고, 중간 어딘가에서 오류가 나면 전체 흐름을 함께 실패시키도록 도와줍니다.- 프로미스 버전을 쓰면
await으로 완료 시점을 기다릴 수 있어 비동기 코드와도 자연스럽게 연결됩니다. finished()는 특정 스트림이 정상 종료됐는지, 에러로 끝났는지 감시할 때 유용합니다.- 즉
pipeline()은 "연결과 전파",finished()는 "완료 감시"에 더 초점이 있다고 이해하면 좋습니다.
짧은 예제
javascript
import { createWriteStream } from "node:fs";
import { finished } from "node:stream/promises";
const writable = createWriteStream("./result.txt");
writable.end("done");
await finished(writable);빠른 정리
| 함수 | 역할 |
|---|---|
pipe() | 스트림을 단순 연결 |
pipeline(...) | 연결 + 오류 전파 + 완료 대기 |
finished(stream) | 특정 스트림 완료 감시 |
stream/promises | await 가능한 스트림 API |
주의할 점
스트림이 두세 개만 연결돼도 수동 error 처리 코드는 금방 복잡해집니다. 운영 코드에서는
pipeline()을 기본 선택지로 두는 편이 훨씬 안전할 때가 많습니다.
참고 링크
1 sources