•
Stream(스트림)은 데이터를 처리하는 데 자주 사용되는 방법으로, 특히 파일 입출력이나 네트워크 요청 등에서 사용 됨
1.
스트림(Stream): 스트림은 데이터를 조각조각 나눠서 처리할 수 있게 해주는 개념//예를 들어, 파일을 한 번에 모두 읽는 대신, 스트림을 사용하면 파일을 작은 부분씩 읽어 처리할 수 있음
2.
로깅(logging): logStream-write(logMessage + '\n');이라는 부분은 로그 메시지를 파일에 쓰는 과정을 나타냄. 로그는 프로그램의 실행 중 발생하는 이벤트를 기록하는 것을 의미 함
3.
백프레셔(Backpressure): 이는 스트림에서 데이터의 생산 속도가 소비 속도를 초과할 때 발생하는 문제를 의미함// 이를 관리하지 않으면 메모리 문제가 발생할 수 있음 // Node에서는 "백프레셔 관리"를 강조하고 있으며, 스트림의 write() 메서드를 호출할 때 반환 값이 false인 경우 'drain' 이벤트를 기다려야 하는 상황이 많음
4.
Pino 라이브러리: Pino는 Node.js에서 사용되는 고성능 로깅 라이브러리 이며, 직접 로깅 구현 대신 이 라이브러리를 사용하는 것도 좋음
5.
'drain' 이벤트: 스트림에서 데이터를 쓸 때 write() 메서드가 false를 반환하면, 더 이상의 데이터를 쓸 수 없는 상태라는 뜻이며, 이때 'drain' 이벤트가 발생할 때까지 기다렸다가 다시 데이터를 써야 하는 이슈가 있음
예시
const fs = require('fs');
// 읽기 스트림 생성
const readableStream = fs.createReadStream('source.txt');
// 쓰기 스트림 생성
const writableStream = fs.createWriteStream('destination.txt');
// 데이터가 준비될 때마다 실행되는 이벤트
readableStream.on('data', (chunk) => {
// 쓰기 스트림에 데이터 조각(chunk)을 쓴다
const canWrite = writableStream.write(chunk);
// 만약 writableStream이 full(=false를 반환)되면,
// 'drain' 이벤트가 발생할 때까지 읽기 스트림의 data 이벤트를 멈춘다
if (!canWrite) {
console.log('Backpressure 발생, 데이터 쓰기 중지');
readableStream.pause();
}
});
// 'drain' 이벤트가 발생하면 읽기 스트림을 다시 시작한다
writableStream.on('drain', () => {
console.log('Backpressure 해결, 데이터 쓰기 재개');
readableStream.resume();
});
// 스트림 종료 처리
readableStream.on('end', () => {
writableStream.end();
console.log('파일 복사 완료');
});
JavaScript
복사
안녕하세요
•
한국전자기술연구원 김영광입니다.
•
관련 기술 문의와 R&D 공동 연구 사업 관련 문의는 “glory@keti.re.kr”로 연락 부탁드립니다.
Hello 
•
I'm Yeonggwang Kim from the Korea Electronics Research Institute.
•
For technical and business inquiries, please contact me at “glory@keti.re.kr”