ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Node.js - Buffer
    Node.js 2023. 1. 17. 15:35
    728x90

    null

    node.js 버퍼

    node.js에서 buffer는 raw 바이너리 데이터를 저장할 수 있는 특수한 유형의 객체이다.

    버퍼는 바이트를 저장하는 단위이며(8비트) 또한 버퍼는 전역 스코프에 있는 내장 객체이므로 importrequire

    를 할 필요가 없다. 이 클래스를 조작하면 raw 바이너리를 조작할 수 있는 함수와 추상화등을 얻을 수 있습니다.

    보통 버퍼를 처리하면 다음과 같은 결과값을 얻을 수 있는데

    <Buffer 79 63 65 66 66 6f 72 74>

    이 결과에서는 7쌍의 문자를 볼 수 있습니다. 각 쌍은 버퍼에 저장된 바이트를 나타내며, 이 버퍼의 크기는 7입니다.

    그런데 아까 raw 바이너리 데이터를 저장하는 객체라 했는데 보이는건 숫자들입니다.

    그 이유는 node.js는 16진수(0

    9는 일반적인 숫자, 10

    15는 A,B,C,D,E,F로 표현합니다.) 를 통해서 바이트를 표현하기 때문입니다.

    이러한 버퍼가 필요한 이유는 버퍼가 도입되기 이전에는 JS에서 이 바이너리 데이터를 처리할 방법이 마땅히 없었기 떄문입니다.

    버퍼를 도입함으로써 비트와 바이트를 조금 더 쉽게, 그리고 성능에도 유리한 방법으로 조작할 수 있게 도와줍니다.

    버퍼의 용례

    1. 버퍼 생성하기
      • Buffer.from()
      • Buffer.alloc()
      • Buffer.allocUnsafe()
        버퍼는 총 3가지 방법으로 생성이 가능하다.
    • Buffer.from()
      버퍼를 만드는 가장 좋은 방법, string, 배열, ArrayBuffer 혹은 또 다른 버퍼 인스턴스를 인수로 받을 수 있으며 무엇을 넘겨주냐에 따라 Buffer.from()은 버퍼를 약간씩 다른 방법으로 만듭니다.
    1. 문자열
      그 문자열을 담고 있는 새로운 버퍼객체를 만들어 냅니다. 기본적으로 문자열을 utf-8로 인코딩합니다.
    // 문자열
    Buffer.from('hello world!')
    // <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64 21>
    // 바이트의 배열 넘기기
    Buffer.from([0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20 ,0x77, 0x6f, 0x72, 0x6c, 0x64, 0x21])
    // 여기서 0xNN은 0x의 뒤의 값이 16진수라는 것을 의미함 
    
    1. 다른 버퍼 넘기기
      Buffer.from()에 또 다른 버퍼를 넘긴다면 nodejs는 해당 버퍼를 복제해서 또 다른 버퍼를 만든다. 그리고 이렇게

    생성된 새로운 버퍼는 메모리의 다른 공간에 저장하기 때문에 독립적으로 수정이 가능하다

    • Buffer.alloc
      .alloc() 메서드는 데이터를 채울 필요가 없는 빈 버퍼를 생성하고 싶을때 유용하다. 기본적으로 숫자를 인수로 받으며 받은 숫자만큼의 빈 사이즈의 버퍼를 생성한다.
    Buffer.alloc(7)

    이렇게 생성한 버퍼에는 원하는 데이터를 채울 수 있다.

    하지만 이 이상으로 넣을 경우에는 짤린다.

    [참고] Raw binary data

    처리되지 않은 형태로 이진숫자(1과 0)의 순서로 표현되는 데이터를 말하며, Node.js의 Buffer 클래스를 사용해서

    읽고 조작이 가능합니다. Raw binary data는 이미지나 오디오파일, 실행파일등 다양한 정보가 포함이 가능하며, 그대로 읽고 처리해야 하는 타입의 데이터입니다.

    'Node.js' 카테고리의 다른 글

    Node.js - base64  (0) 2023.01.17
    Node.js - 암호화  (0) 2023.01.17
    Node.js - JWT(Jason Web Token)  (0) 2023.01.17
    Node.js - ORM(sequelize)  (0) 2023.01.17
    Node.js - ORM  (0) 2023.01.17

    댓글

Designed by Tistory.