Buffer, Stream, Binary Data이란 ?

GonnabeAlright·2021년 12월 13일
0
post-thumbnail

Buffer란 ?

바이너리 데이터들의 스트림을 읽거나 조작하는 매커니즘.
이 Buffer 클래스는 Node.js의 일부로 도입되어 TCP 스트림이나 파일시스템 같은 작업에서의 octet 스트림과의 상호 작용을 가능하기 위해 만들어졌습니다.

  • octet Stream은 일반적으로 8bit 형식으로 된 데이터를 의미합니다.

Buffer 클래스는 바이너리 데이터들의 스트림을 직접 다루기 위해 Node.js API에 추가되었다고 볼 수 있습니다.

Binary Data란 ?

컴퓨터는 이진수로 데이터를 저장하고 표현합니다. 이진수는 단순히 1과 0의 집합입니다. 각각의 이진수에서 1 혹은 0으로 되어있는 자리를 비트(bit)라고 합니다. 이는 Binary digit의 약자입니다. 예를 들어, 숫자 12를 변환하려면 컴퓨터는 12를 이진수인 1100로 변환해야 합니다.

하지만 우리가 다루는 데이터 중에는 문자열도 있고 이미지, 비디오 형식도 있습니다. 컴퓨터는 모든 유형의 데이터를 이진수로 변환하는 법을 알고 있습니다.

Character Set(문자 집합)

Character Set은 각각문자를 숫자로 나타낼 수 있도록 정의해놓은 규칙입니다. 각각 문자에 해당하는 숫자를 표로 정리해 놓은 것으로 유니코드, 아스키코드가 그 예입니다.

문자를 숫자로 나타내는 것에 규칙이 있는 것처럼 숫자를 바이너리 데이터로 나타내는 데에도 규칙이 있습니다. 정확히 말하면 숫자를 몇 bit로 나타낼 것인가를 정하는 것입니다. 이것을 Character Encoding이라고 부릅니다.
Character Encoding의 정의중 하나가 UTF-8 입니다. UTF-8은 문자가 바이트 단위로 인코딩 되어야 합니다. 1바이트는 8개 비트의 집합을 의미합니다. 즉 8개의 1 또는 0을 의미합니다. 그래서 문자를 바이너리로 나타내는데에는 8개의 1과 0으로 된 집합이 사용됩니다.

Stream

Node.js에서의 스트림은 간단하게 한 지점에서 다른 지점으로 이동하는 일련의 데이터를 의미합니다. 전체적인 의미로는 만약 우리가 어떤 방대한 양의 데이터를 처리해야 할 때, 모든 데이터가 전부다 사용가능할 때까지 기다리지 않아도 된다는 것입니다.

기본적으로 큰 데이터는 청크 단위로 세분화되어 전송됩니다. 이말은 처음 설명했던 Buffer의 정의에 따르면, 파일시스템에서 바이너리 데이터들이 이동한다는걸 의미합니다. 예를 들어 file1.txt의 텍스트를 file2.txt로 옮기는 것을 의미합니다.

Buffer

우리는 데이터들의 스트림이란 일련의 데이터들이 한지점에서 다른 지점으로 이동하는 것이라는 것을 배웠습니다. 하지만 데이터들이 정확하게 어떻게 이동한다는 것일까요 ?

일반적으로 데이터의 이동은 그 데이터를 가지고 작업을 하거나, 그 데이터를 읽거나 무언가를 하기 위해 일어납니다. 하지만 한 작업이 특정시간동안 데이터를 받을 수 있는 데이터의 최소량과 최대량이 존재합니다. 그래서 만약에 한 작업이 데이터를 처리하는 시간보다 데이터가 도착하는 게 더 빠르다면, 초과된 데이터는 어디에선가 처리되기를 기다리고 있어야 합니다. 데이터를 처리하는 시간보다 훨씬 빠르게 계속해서 새로운 데이터가 도착하면 어딘가에는 도착한 데이터들이 미친듯이 쌓일 것이기 때문입니다.

반면에, 한 작업이 데이터를 처리하는 시간이 데이터가 도착하는 시간보다 더 빠르다면, 먼저 도착한 데이터는 처리되기 전에 어느정도의 데이터량이 쌓일때까지 기다려야 합니다.

바로 그 기다리는 영역이 buffer입니다. 컴퓨터에서 일반적으로 RAM이라고 불리는 영역에서 streaming 중에 데이터가 일시적으로 모이고, 기다리며 결국에는 데이터가 처리되기 위해 내보내집니다.

0개의 댓글