본문 바로가기
Framework/NodeJS

NodeJS - 스트림(Stream)이란 무엇이며 어떤 이점이 있는가?

by 아보_ 2023. 4. 12.
반응형

Node.js에서 스트림(Stream)이란 무엇이며, 어떤 이점이 있는지?

Node.js 애플리케이션에서 효율적으로 데이터를 처리하려면 스트림(Stream)을 이해하고 활용하는 것이 중요합니다. 이 글에서는 Node.js에서 스트림이 무엇인지, 어떻게 사용하는지, 그리고 어떤 이점이 있는지 알아봅니다.

 

스트림이란?

스트림은 Node.js에서 데이터를 처리하기 위한 중요한 추상화 개념입니다. 스트림은 일련의 데이터 덩어리로, 작은 단위로 순차적으로 전달되며, 데이터를 읽거나 쓰기 위한 인터페이스를 제공합니다. 스트림을 사용하면 대용량 데이터를 처리할 때 메모리와 CPU 자원을 절약하면서 효율적으로 데이터를 전송할 수 있습니다.

 

스트림의 종류

Node.js에서는 네 가지 종류의 스트림을 지원합니다.

  • Readable: 데이터를 읽기 위한 스트림입니다. 데이터를 소스로부터 가져와 다른 스트림에 전달할 수 있습니다.
  • Writable: 데이터를 쓰기 위한 스트림입니다. 데이터를 목적지에 쓸 수 있습니다.
  • Duplex: 읽기와 쓰기를 모두 지원하는 스트림입니다. 데이터를 양방향으로 전송할 수 있습니다.
  • Transform: 데이터를 읽어서 변환한 후 다시 쓸 수 있는 스트림입니다. Duplex 스트림의 특별한 형태로, 중간에서 데이터 변환 작업을 수행합니다.

 

스트림 사용 예시

다음은 파일을 읽어서 그 내용을 출력하는 간단한 예제입니다.

const fs = require("fs");

const readStream = fs.createReadStream("file.txt", "utf8");

readStream.on("data", (chunk) => {
  console.log(chunk);
});

이 예제에서는 fs 모듈의 createReadStream 함수를 사용하여 Readable 스트림을 생성합니다. 스트림이 데이터를 읽으면 'data' 이벤트가 발생하고, 이를 처리하는 콜백 함수에서 데이터를 출력합니다.

 

스트림의 이점

  • 메모리 효율: 스트림은 데이터를 작은 덩어리로 처리하므로, 대용량 데이터를 처리할 때 메모리를 적게 사용합니다. 따라서, 파일을 전체를 메모리에 올릴 필요 없이 순차적으로 읽고 쓸 수 있습니다.
  • 시간 효율: 스트림을 사용하면, 데이터의 일부가 도착하는 즉시 처리를 시작할 수 있습니다. 따라서 파일을 완전히 다운로드하거나 모든 데이터를 메모리에 적재할 필요 없이, 처리 과정이 더 빨라집니다.
  • 파이프(piping)을 통한 간결한 처리: 스트림을 사용하면 여러 스트림을 파이프를 통해 연결할 수 있습니다. 이를 통해 데이터를 효율적으로 처리하고, 코드를 간결하게 작성할 수 있습니다.

 

정리

Node.js에서 스트림은 데이터를 효율적으로 처리하기 위한 중요한 개념입니다. 스트림은 작은 단위의 데이터 덩어리를 순차적으로 처리하며, Readable, Writable, Duplex, Transform 등의 종류가 있습니다. 스트림을 사용하면 메모리와 시간 효율을 향상시키고, 파이프를 통해 간결한 코드 작성이 가능합니다. 이 글을 통해 Node.js의 스트림 개념과 이점에 대해 이해하셨길 바랍니다.

 

반응형