개발 이야기/Node

버퍼 Buffer - 3

석구석구 2022. 1. 10. 01:04

자바스크립트는 문자열 처리에는 효과적이지만 바이너리 데이터는 잘 처리하지 못합니다. 하지만 문자열만 가지고 다양한 데이터를 처리하기란 매우 어렵습니다. 물론 일반적인 상황에서 Buffer 를 사용하는 일은 흔치 않을 것 입니다. 하지만 파일 업로드, 이미지 조작 등의 작업에 Node를 사용한다면 Buffer가 필요합니다. 개발자가 원하는 만큼의 메모리 할당이 필요한 경우에도 필요합니다.

버퍼 클래스의 경우 메모리가 자바스크립트 VM의 외부 힙에 지정되게 됩니다. 따라서 해당 데이터는 가비지 컬렉션으로 인해, 위치가 이동되지 않습니다. 이는 CPU 사용에 보다 효율적입니다.

let x = new Buffer.from('Hello')
console.log(x.toString()) // Hello

let y = new Buffer.alloc(5)
y[0] = 72
y[1] = 101
y[2] = 108
y[3] = 108
y[4] = 111
console.log(y.toString()) // Hello

문자열을 통해 버퍼 생성과 할당을 동시에 할 수도 있고, 생성한 후, 할당 할 수도 있습니다. 위의 예제에서 두가지 경우 모두를 확인 할 수 있습니다.

 

72, 101과 같은 값은 해당 문자의 유니코드 값입니다. 이러한 유니코드 값은 인코딩 규칙에 따라 바이너리 값으로 변환되어 저장됩니다. UTF-8은 8비트를 기준으로 함으로 72는 1001000의 형태로 저장되었을 것 입니다. 인코딩 규칙은 Buffer.from 함수의 두번째 파라미터로 설정할 수 있습니다.

let buf = new Buffer.from('8b76fde713ce', 'base64')
console.log(buf.toString('base64'))

위와 같이 base64 인코딩을 사용할 수도 있습니다.

 

버퍼 잘라내기

let parents = new Buffer.from('Hello World')
let child = parents.slice(0,5)
console.log(child.toString()) // 'Hello'
parents[0] = 101
console.log(child.toString()) // 'eello'

버퍼는 잘라낼 수 있지만, 새로운 버퍼가 생성되는 것이 아니기 때문에 주의해야 합니다.

 

'개발 이야기 > Node' 카테고리의 다른 글

이벤트 구독 패턴 EventEmitter - 4  (0) 2022.01.10
모듈 Module - 2  (0) 2022.01.10
노드 NodeJS - 1  (0) 2022.01.09
NodeJS + Typescript + Mongoose  (0) 2020.02.25