본문 바로가기

전체 글376

[node.js] readable stream - two modes (4) https://nodejs.org/api/stream.html#two-reading-modes 를 참고한 글입니다.object mode와 연관없는 읽기 모드를 설명한다.flowing mode와 paused mode가 있다. flowing mode은 시스템으로부터 자동으로 데이터를 읽고 EventEmitter interface에서 발생하는 이벤트를 이용하여 최대한 빠르게 앱에 데이터를 제공한다.const fs = require('fs')const rs = fs.createReadStream('lowercase.txt');rs.on('data', (chunk) => { console.log(chunk)}); paused mode는 stream.read()를 명시적으로 반드시 호출해서 stream에 있는 d.. 2024. 5. 5.
[node.js] stream - buffering (3) https://nodejs.org/api/stream.html#buffering 글을 참고했습니다. Writable Readable 모두 buffer를 사용하여 buffer 안에 데이터를 저장한다.데이터 양은 highWaterMark 설정에 따른다.  highWaterMark 기본값은 16Kib (커스텀 시기본단위는 bytes)이고 objectMode일 때는 16개 이다.  Readable stream일 때 stream.push를 호출하면 데이터가 버퍼 안에 저장이 된다. consumer가 stream.read를 호출하지 않는 다면 해당 데이터는 내부 큐에 계속 남아 있게 된다.highWaterMark에 의하여 설정된 threshold 만큼 버퍼에 데이터가 차면, 스트림은 일시적으로 데이터를 읽는 것을 .. 2024. 5. 4.
[node.js] stream - object mode (2) https://nodejs.org/api/stream.html  https://nodesource.com/blog/understanding-object-streams/ 를 참고하여 작성했습니다. 기본적으로 스트림은 String과 Buffer만 다룰 수 있지만, 상황에 따라 javascript object를 받을 수 있게 설정할 수 있다.objectMode를 활성화 시킨다면,  내부 버퍼링 알고리즘이 bytes로 계산하던 방식이 object 개수로 계산하게 된다. 이 말은 highWaterMark도 object 개수로 판단한다. 아래 예시에서 stream을 잘 활용하기 위한 library를 사용한다.  const through2 = require('through2')const split2 = require.. 2024. 5. 3.
[node.js] stream api - sample code (1) https://nodejs.org/api/stream.html 정독하고 코드 확인해보는 시간을 가졌습니다. 너무 당연한건 적진 않았습니다.모든 스트림은 EventEmitter 객체입니다. (EventEmitter도 파해쳐 봐야겠어요) Types of Stream - writable - readable - duplex: both writable and readable. ex) net.Socket - transfrom: 데이터를 수정 할 수 있는 duplex streams ex) zlib.createDeflate() Streams Promises APIcallback functions을 이용하는 것이 아니라, Promise를 반환하는 비동기 스트림 함수 const {pipeline} = require('no.. 2024. 5. 3.
node.js, single thread 아닌가요? Activity monitor에서 node 프로세스를 확인해보니 쓰레드가 11개가 있다고 나옵니다.우리가 여태까지 node.js는 single thread로 동작한다고 알고 있었는데요. 확인해보니 11개이네요.이유를 한번 살펴보도록 하겠습니다. 우리가 작성한 코드들은 single thread로 동작한다는건 변함이 없습니다. 다만, node.js 자체를 구동하기 위해서는 single-thread는 아닙니다.  Event loop and Worker threads우리가 작성한 코드는 single thread로 동작하는 반면, node.js는 non-blocking i/o operation을 위해 multi thread를 사용합니다. 이러한 operation은 가능하면 system' kernel에 떠넘기지려고.. 2024. 5. 3.
stream 이해 배경메모리보다 큰 데이터를 처리하기 위해 나온 기술 개념제한된 메모리 공간에서 지속적으로 처리되고 있는 array와 같다.  반쪽짜리 정보stream이 더 빠르다?-> 아니다. 더 느리다. 메모리가 충분하다는 전재로 본다면, 메모리가 훨씬 빠르다. 결코 메모리보다 빠르지 않다. 이유는 stream consumer 쪽에서 데이터를 처리하는 속도가 producer가 보내는 속도보다 느릴 경우 버퍼가 꽉차게 되어 잠깐 뭠춰달라고 요구하기 때문이다. pipeline이 여러개 일 수록 이런 현상은 더욱 많이 발생된다. (버퍼가 꽉찬 상태에서 데이터를 받을 경우 손실된다.) 테스트400mb 정도 큰 파일 생성const fs = require("fs")const file = fs.createWriteStream("... 2024. 5. 3.