블로그 글 읽기) Unpacking Node.js Memory

Published at 2025-06-05

TIL

날짜: 2025년 6월 5일

블로그 글 읽기

Unpacking Node.js Memory - From Raw Bytes to Usable Data

아래 세가지 데이터 구조에 대한 글.

ArrayBuffer

TypedArray

Buffer

ArrayBuffer - 원시값

  • byte의 배열 (byte = 1bit. byte는 256가지 값 나타낼 수 있음)
  • 예시)
    const buffer = new ArrayBuffer(4); // 4 bytes
    • 하지만 이는 메모리 덩어리일 뿐이라서 직접 읽기나 쓰기를 할 수는 없다.
    • 접근하려면 TypedArray 혹은 DataView 사용해야함

TypedArray - Byte들에 의미 부여

  • 말그대로 특정 타입의 배열임
  • 숫자 타입에서 signed 는 -128 ~ 127, unsigned 은 0 ~ 255
  • 종류)
    • Int8Array - 8 bit signed integer - 1 byte
    • Uint8Array - 8 bit unsigned integer - 1 byte
    • Int16Array - 16 bit signed integer - 2 bytes
    • Uint16Array - 16 bit unsigned integer - 2 bytes
    • Int32Array - 32 bit signed integer - 4 bytes
    • Uint32Array - 32 bit unsigned integer - 4 bytes
    • Float32Array - 32 bit float - 4 bytes
    • Float64Array - 64 bit float - 8 bytes
    • BigInt64Array - 64 bit signed integer - 8 bytes
    • BigUint64Array - 64 bit unsigned integer - 8 bytes
  • 예시)
    const buffer = new ArrayBuffer(4); // 4 bytes
    
    const int8Array = new Int8Array(buffer);
    
    console.log(int8Array); // Int8Array(4) [0, 0, 0, 0]
  • 그래서 이게 어떤 도움이?
    const buffer = new ArrayBuffer(4); // 4 bytes
    
    const int8Array = new Int8Array(buffer);
    const int32Array = new Int32Array(buffer);
    
    console.log(int8Array); // Int8Array(4) [0, 0, 0, 0]
    console.log(int32Array); // Int32Array(1) [0]
    
    // You can use TypedArray to write to the buffer
    int8Array[0] = 1; // [1, 0, 0, 0]
    int8Array[1] = 2; // [1, 2, 0, 0]
    int8Array[2] = 3; // [1, 2, 3, 0]
    int8Array[3] = 4; // [1, 2, 3, 4]
    
    console.log(int8Array); // Int8Array(4) [1, 2, 3, 4]
    console.log(int32Array); // Int32Array(1) [67305985]
    • 위 예제를 보면 어떤 타입을 사용하느냐에 따라 같은 데이터인데 해석 방식이 달라진다.
  • TypedArray는 데이터의 ‘view’만 담당할 뿐이기 때문에, TypedArray의 데이터를 변경하면 ArrayBuffer 도 같이 변경된다.

Buffer

  • Node.js에서 이진 데이터 작업을 할 수 있도록 해주는 전역 객체
  • TypedArray 위에 구축되어 있어서 TypedArray의 모든 메서드 사용할 수 있음
  • Node.js에서 파일을 읽을 때 Buffer 객체를 반환받는다.
  • Buffer 를 사용하여 대용량 파일을 청크 단위로 처리하여 메모리 관리 유용