[nodejs] 비동기식 데이터 스트리밍

Node.js는 비동기식 프로그래밍을 지원하고, 데이터를 스트리밍하는 데 이상적인 환경을 제공합니다. 이 기능을 활용하면 데이터를 효율적으로 처리하고, 메모리 사용을 최적화할 수 있습니다. 이번 포스트에서는 Node.js를 사용하여 비동기식 데이터 스트리밍을 구현하는 방법에 대해 알아보겠습니다.

데이터를 스트리밍하는 이유

스트리밍은 대용량 데이터를 처리할 때 매우 유용합니다. 전체 데이터를 한 번에 메모리에 로드하지 않고, 조각조각으로 처리함으로써 메모리 부담을 줄일 수 있습니다. 이는 대용량 파일의 처리, 네트워크 통신, 실시간 데이터 전송 등에서 매우 유용합니다.

비동기식 데이터 스트리밍 구현하기

Node.js에서 데이터를 스트리밍하려면 Readable 스트림과 Writable 스트림을 사용하여 데이터를 읽고 쓰는 과정을 구현해야 합니다. 아래는 Node.js에서 비동기식으로 데이터를 파일에서 읽어와 HTTP 응답으로 스트리밍하는 예시 코드입니다.

const http = require('http');
const fs = require('fs');

http.createServer((req, res) => {
  const readStream = fs.createReadStream('largefile.txt');
  readStream.pipe(res);
}).listen(3000, 'localhost', () => {
  console.log('Server is running at http://localhost:3000/');
});

위 코드에서 fs.createReadStream을 통해 파일을 읽고, readStream.pipe(res)을 통해 HTTP 응답으로 데이터를 스트리밍합니다.

또 다른 예시로, 데이터베이스에서 쿼리 결과를 스트리밍하는 방법을 살펴보겠습니다.

const { Readable } = require('stream');

async function queryDatabaseToStream() {
  const queryResult = await db.query('SELECT * FROM large_table');
  const dataStream = new Readable({
    objectMode: true,
    read() {
      this.push(queryResult.nextRecord());
    }
  });

  return dataStream;
}

queryDatabaseToStream().then(stream => {
  stream.pipe(process.stdout);
});

위 코드에서는 stream.Readable을 사용하여 데이터를 읽고, push 메서드를 통해 스트림으로 데이터를 보냅니다.

결론

Node.js의 스트리밍 기능을 활용하여 대용량 데이터를 효율적으로 처리할 수 있습니다. 이를 통해 메모리 부담을 줄이고, 성능을 향상시킬 수 있습니다. Node.js의 비동기식 프로그래밍과 함께 데이터 스트리밍을 적절히 활용하여 더욱 효과적인 애플리케이션을 개발할 수 있습니다.

참고문헌: