Node.js

[Node.js] Stream이란??

반응형

Stream

Stream에는 두가지가 있습니다. 

1. file에서 읽어오는 Stream

2. network에서 읽어오는 Stream

 

스트림이 가능한 소스로부터 핸들러에게 해당데이터를 여러개의 청크로 나누어서 보내주는 형태의 구현체를 스트림이라고 합니다.

 

여러가지의 소스를 가질 수 있습니다.

 

큰데이터를 처리해야 하거나, 비동기적으로만 얻을 수 있는 데이터를 처리해야 할 때 유용합니다.

ex 1) 5G쯤 되는영상파일을 압축할 경우, 

ex 2) 네트워크 input 등, tcp소켓같은 경우 언제 데이터가 올지 알 수 없습니다.

 

const fs = require('fs')
const rs = fs.createReadStream('file.txt')

rs.on('data', data => {
  // Do something with data...
})

rs.on('error', error => { /* ... */})
rs.on('end', () => { /* ... */})

위처럼 data, error, end 등의 이벤트 핸들러를 달아 처리합니다.

특별히 지정하지 않으면 data는 Buffer가 됩니다.

 

 

 

const fs = require('fs')
const rs = rs.createReadStream('file.txt', {
  encoding: 'utf-8'
})

rs.on('data', data => { /* ... */})

인코딩을 지정하면 data를 string으로 받을 수 있습니다.

 

 

 

 

 

Stream의 종류 (Readable)

스트림으로부터 읽을 수 있습니다.

  • fs.createReadStream 로부터 나오는 Stream 객체
  • process.stdin 표준입력을 Readable Stream으로 읽어내는 것 역시 가능
  • 서버 입장의 HTTP 요청 - 클라이언트의 요청을 읽어낼 수 있는 Stream
  • 클라이언트 입장의 HTTP 응답 - 서버로부터 돌아온 응답을 읽어낼 수 있는 Stream

Stream의 종류 (Writable)

스트림을 출력할 수 있습니다.

  • fs.createWriteStream
  • process.stdout
  • 클라이언트 입장의 HTTP 요청
  • 서버 입장의 HTTP 응답

 

Stream의 종류 (Duplex)

이 스트림에 입력을 받을 수도 있고, 출력을 보낼 수도 있습니다.

 

  • TCP sockets - 네트워크를 통해 주고받음
  • zlib streams - 압축 알고리즘 적용된 스트림
  • crypto streams - 암호화 알고리즘 모듈

 

Stream의 종류 (Transform)

입력받은 스트림을 변환해 새로운 스트림으로 만듭니다.

  • zlib streams
  • crypto streams

 

 

반응형