Node.js - 버퍼: 초보자 가이드

안녕하세요, 미래의 Node.js 마법사 여러분! Node.js 버퍼의 세계로 인도해드리게 되어 매우 기쁩니다. 프로그래밍을 가르쳐온 지 오래된 저로서는 버퍼는 Node.js에서 데이터 조작의 비밀스러운 영웅이라고 말씀드릴 수 있습니다.처음에는 좀 이상하게 보일 수 있지만, 이 튜토리얼의 끝을 맞아서는 프로처럼 사용할 수 있을 것입니다!

Node.js - Buffers

버퍼는 무엇인가요?

자, 구체적인 내용으로 들어가기 전에 기본 개념부터 설명드리겠습니다. 상상해보세요, 산을 이동시키려고 한다면, 모래를 일粒씩 옮기는 것은 영원히 끝나지 않을 것입니다! 대신, 바ucket을 사용하면 됩니다. Node.js의 세계에서 버퍼는 바로 그 바ucket과 같습니다 - 데이터를 효율적으로 처리하고 이동하는 데 도움을 줍니다.

버퍼는 고정된 크기의 메모리 chuck으로, V8 자바스크립트 엔진 외부에 할당됩니다. 파일 연산, 네트워크 프로토콜, 또는 이진 데이터 스트림을 다루는 어떤 상황에서도 매우 유용합니다.

버퍼 생성하기

우리의 첫 번째 버퍼를 생성해보겠습니다:

const buf1 = Buffer.alloc(10);
console.log(buf1);

이 코드를 실행하면 다음과 같은 출력을 보게 될 것입니다:

<Buffer 00 00 00 00 00 00 00 00 00 00>

어떻게 된 것인가요? 우리는 10 바이트 크기의 버퍼를 생성하고, 모든 바이트는 0으로 초기화되었습니다. 새로운 바ucket을 얻은 것처럼, 깨끗하고 비어 있어 데이터 모래를 채우기 위해 준비되었습니다!

이제, 초기 내용을 가진 버퍼를 생성해보겠습니다:

const buf2 = Buffer.from('Hello, Node.js!');
console.log(buf2);

출력:

<Buffer 48 65 6c 6c 6f 2c 20 4e 6f 64 65 2e 6a 73 21>

여기서 우리는 문자열로부터 버퍼를 생성했습니다. 각 숫자는 문자열의 각 문자에 해당하는 ASCII 코드를 나타냅니다. 멋지죠?

정적 메서드

Node.js는 버퍼를 다루기 위한 여러 가지 정적 메서드를 제공합니다. 가장 흔히 사용되는 몇 가지를 탐구해보겠습니다:

Buffer.alloc()

이 메서드는我们已经 봤습니다. 지정된 크기의 새로운 버퍼를 생성하고, 모든 바이트를 0으로 초기화합니다.

const buf3 = Buffer.alloc(5);
console.log(buf3); // <Buffer 00 00 00 00 00>

Buffer.from()

이 메서드는 배열, 다른 버퍼, 또는 문자열로부터 새로운 버퍼를 생성합니다.

const buf4 = Buffer.from([1, 2, 3, 4, 5]);
console.log(buf4); // <Buffer 01 02 03 04 05>

const buf5 = Buffer.from('Hello');
console.log(buf5); // <Buffer 48 65 6c 6c 6f>

Buffer.concat()

이 메서드는 여러 개의 버퍼를 연결합니다.

const buf6 = Buffer.from('Hello');
const buf7 = Buffer.from(' World');
const buf8 = Buffer.concat([buf6, buf7]);
console.log(buf8.toString()); // Hello World

다음 표는 이 정적 메서드를 요약합니다:

메서드 설명 예제
Buffer.alloc() 지정된 크기의 새로운 버퍼 생성 Buffer.alloc(10)
Buffer.from() 배열, 버퍼, 또는 문자열로부터 버퍼 생성 Buffer.from('Hello')
Buffer.concat() 여러 개의 버퍼 연결 Buffer.concat([buf1, buf2])

메서드 참조

이제 우리의 버퍼를 생성했으니, 사용할 수 있는 몇 가지 메서드를 살펴보겠습니다.

buf.toString()

이 메서드는 지정된 문자 인코딩에 따라 버퍼를 문자열로 디코딩합니다.

const buf9 = Buffer.from('Hello, Buffer!');
console.log(buf9.toString()); // Hello, Buffer!
console.log(buf9.toString('hex')); // 48656c6c6f2c2042756666657221

buf.write()

이 메서드는 문자열을 버퍼에 씁니다.

const buf10 = Buffer.alloc(20);
buf10.write('Hello');
console.log(buf10.toString()); // Hello

buf.slice()

이 메서드는 지정된 시작과 끝 인덱스를 사용하여 새로운 버퍼를 반환합니다.

const buf11 = Buffer.from('Hello, Buffer!');
const slicedBuf = buf11.slice(0, 5);
console.log(slicedBuf.toString()); // Hello

다음 표는 이 메서드를 요약합니다:

메서드 설명 예제
buf.toString() 버퍼를 문자열로 디코딩 buf.toString()
buf.write() 문자열을 버퍼에 씀 buf.write('Hello')
buf.slice() 새로운 버퍼를 반환 buf.slice(0, 5)

클래스 메서드

마지막으로, 버퍼를 다루는 데 매우 유용한 클래스 메서드를 몇 가지 살펴보겠습니다.

Buffer.isBuffer()

이 메서드는 객체가 버퍼인지 확인합니다.

const buf12 = Buffer.from('Hello');
console.log(Buffer.isBuffer(buf12)); // true
console.log(Buffer.isBuffer('Not a buffer')); // false

Buffer.byteLength()

이 메서드는 문자열 또는 버퍼의 바이트 길이를 반환합니다.

console.log(Buffer.byteLength('Hello')); // 5
console.log(Buffer.byteLength('?')); // 4 (이 이모지는 4 바이트입니다)

다음 표는 이 클래스 메서드를 요약합니다:

메서드 설명 예제
Buffer.isBuffer() 객체가 버퍼인지 확인 Buffer.isBuffer(obj)
Buffer.byteLength() 문자열 또는 버퍼의 바이트 길이 반환 Buffer.byteLength('Hello')

그렇게 다양한 버퍼의 세계를 탐험해보았습니다. 이제 실제 프로젝트에서 버퍼를 사용해보세요. 파일을 버퍼로 읽어들이거나, 네트워크를 통해 버퍼 데이터를 보내보세요. 더 많이 사용할수록 더 자연스럽게 느껴질 것입니다.

마지막으로, 작은 버퍼에 대한 이야기를 전해드리겠습니다: 버퍼가 도로를 건너는 이유는 다른 바이트로 가기 위해서입니다! (알고 계시죠, 코딩에만 집중해야 합니다...)

행복한 코딩 되세요, 여러분! 여러분의 버퍼가 항상 필요한 데이터로 가득 차기를 바랍니다!

Credits: Image by storyset