Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

Node.js 스트림 완벽 가이드: writable.cork()와 uncork() 메서드 활용법

Node.js에서 writable.cork() 메서드는 스트림에 기록된 모든 데이터를 강제로 메모리 내부의 버퍼에 저장하는 역할을 합니다. 이렇게 버퍼링된 데이터는 stream.uncork() 또는 stream.end() 메서드가 호출되기 전까지는 버퍼 메모리에서 해제되지 않습니다.

이러한 cork/uncork 메커니즘은 여러 개의 작은 데이터 조각을 한 번에 효율적으로 처리해야 할 때 특히 유용합니다. 데이터를 임시로 모아두었다가 한꺼번에 플러시함으로써 불필요한 시스템 호출을 줄일 수 있기 때문입니다.

문법

cork() 메서드

writable.cork()

uncork() 메서드

writable.uncork()

매개변수

cork()와 uncork() 메서드는 별도의 매개변수를 받지 않습니다. 두 메서드는 이미 스트림에 기록된 데이터를 대상으로 버퍼링 동작만 수행하기 때문입니다.

예제 1: cork() 메서드로 데이터 버퍼링하기

cork.js라는 이름의 파일을 생성하고 아래 코드를 복사하여 붙여넣습니다. 파일 생성 후 다음 명령어로 코드를 실행할 수 있습니다.

node cork.js

cork.js

// writable.cork() 메서드 사용 예제 프로그램
const stream = require('stream');

// 쓰기 가능한(writable) 데이터 스트림 생성
const writable = new stream.Writable({
    // 스트림에서 데이터 기록 처리
    write: function(chunk, encoding, next) {
        // 출력을 위해 데이터 청크 변환
        console.log(chunk.toString());
        next();
    }
});

// 데이터 기록
cwritable.write('Hi - This data is printed');

// cork() 함수 호출
writable.cork();

// 추가 데이터 기록
writable.write('Welcome to TutorialsPoint !');
writable.write('SIMPLY LEARNING ');
writable.write('This data will be corked in the memory');

실행 결과

C:\home\node>> node cork.js
Hi - This data is printed

위 실행 결과를 보면, cork() 메서드가 호출되기 전에 기록된 데이터만 화면에 출력되고, 그 이후에 기록된 나머지 데이터는 모두 버퍼 메모리에 저장(cork)된 것을 확인할 수 있습니다.

예제 2: uncork() 메서드로 버퍼 비우기

이번에는 uncork() 메서드를 사용하여 버퍼에 저장된 데이터를 어떻게 해제하는지 살펴보겠습니다.

uncork.js

// writable.cork() 메서드 사용 예제 프로그램
const stream = require('stream');

// 쓰기 가능한(writable) 데이터 스트림 생성
const writable = new stream.Writable({
    // 스트림에서 데이터 기록 처리
    write: function(chunk, encoding, next) {
        // 출력을 위해 데이터 청크 변환
        console.log(chunk.toString());
        next();
    }
});

// 데이터 기록
writable.write('Hi - This data is printed');

// cork() 함수 호출
writable.cork();

// 추가 데이터 기록
writable.write('Welcome to TutorialsPoint !');
writable.write('SIMPLY LEARNING ');
writable.write('This data will be corked in the memory');

// 버퍼 메모리에서 데이터 플러시
writable.uncork();

실행 결과

C:\home\node>> node uncork.js
Hi - This data is printed
Welcome to TutorialsPoint !
SIMPLY LEARNING
This data will be corked in the memory

uncork() 메서드를 통해 버퍼 메모리가 플러시되자, 이전 예제에서 저장되어 있던 모든 데이터가 정상적으로 출력된 것을 확인할 수 있습니다.

정리

writable.cork()는 스트림에 기록되는 데이터를 일시적으로 버퍼에 저장하고, writable.uncork()는 해당 버퍼를 비워 실제로 데이터를 출력하거나 전송합니다. 또한 stream.end() 메서드를 호출하면 uncork()를 명시적으로 호출하지 않아도 버퍼링된 데이터가 자동으로 플러시됩니다.