반응형
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
반응형
'Node.js' 카테고리의 다른 글
[NodeJS] require() 함수 동작원리 (0) | 2022.04.13 |
---|---|
[NodeJS] 템플릿엔진 (0) | 2022.04.10 |
[Sequelize] TypeError: require(...) is not a function (0) | 2022.01.10 |
[Node.js] 동기와 비동기, 블로킹과 논블로킹 (0) | 2021.12.11 |