SHIN STORYSHIN STORY
홈포스트C#TypeScriptNext.jsNode.js시리즈
</>SHIN STORY

sdf

탐색

  • 홈
  • 모든 포스트
  • 시리즈
  • 검색

카테고리

  • C#
  • TypeScript
  • Next.js
  • Node.js
  • 알고리즘
  • 개발 도구

© 2025 Shin Blog. All rights reserved.

GitHubRSS
목록으로
Node.js#JavaScript#Node.js

Node.js Buffer와 인코딩 완전 가이드

SHIN

2026년 4월 30일1분 읽기0
📚

Node.js 실전 팁 20선

20편
  1. 3Node.js Stream으로 대용량 파일 처리하기
  2. 4Worker Threads로 CPU 집약 작업 처리하기
  3. 5cluster 모듈로 멀티코어 CPU 100% 활용하기
  4. 6child_process로 외부 명령 실행하기
  5. 7fs/promises로 파일 시스템 다루기
  6. 20Node.js Event Loop 완전 정복
  7. 20Node.js path 모듈 완전 정복
  8. 20환경 변수 관리 — .env, dotenv, 그리고 검증
  9. 20EventEmitter 패턴으로 느슨한 결합 구현하기
  10. 20Node.js crypto 모듈로 해싱과 암호화 구현하기
  11. 20Node.js 메모리 누수 찾고 수정하기
  12. 20Express 미들웨어 패턴과 에러 처리
  13. 20Node.js CJS vs ESM 모듈 시스템 완전 정리
  14. Node.js Buffer와 인코딩 완전 가이드현재
  15. 20PM2로 Node.js 프로세스 관리하기
  16. 20Node.js HTTP 서버 직접 구현하기
  17. 20Node.js 성능 프로파일링 실전 가이드
  18. 20Node.js npm 스크립트 완전 활용하기
  19. 20Node.js 보안 체크리스트 10가지
  20. 20Node.js 테스팅 전략 — 단위, 통합, E2E 테스트

Node.js Buffer와 인코딩 완전 가이드

Buffer는 Node.js에서 바이너리 데이터를 다루는 핵심 클래스입니다. 파일, 네트워크, 암호화 작업에서 필수적으로 등장합니다.

Buffer 생성

CODE
// 1. 크기로 생성 (초기화됨)
const buf1 = Buffer.alloc(10); // 10바이트, 0으로 채움

// 2. 배열로 생성
const buf2 = Buffer.from([0x48, 0x65, 0x6c, 0x6c, 0x6f]); // 'Hello'

// 3. 문자열로 생성
const buf3 = Buffer.from('Hello, World!', 'utf-8');

// ❌ Buffer() 생성자는 deprecated
// new Buffer(10) → 사용 금지

인코딩 변환

CODE
const text = 'Hello 안녕';
const buf = Buffer.from(text, 'utf-8');

// Buffer → 문자열
buf.toString('utf-8')     // 'Hello 안녕'
buf.toString('hex')       // '48656c6c6f20ec9588eb8595'
buf.toString('base64')    // 'SGVsbG8g7JWI64eA'
buf.toString('base64url') // URL-safe base64

// 문자열 → Buffer
Buffer.from('SGVsbG8=', 'base64').toString('utf-8') // 'Hello'

바이너리 파일 처리

CODE
import { readFile, writeFile } from 'fs/promises';

// 이미지 파일 → base64
async function imageToBase64(imagePath) {
  const buf = await readFile(imagePath);
  return buf.toString('base64');
}

// base64 → 이미지 파일
async function base64ToImage(base64, outputPath) {
  const buf = Buffer.from(base64, 'base64');
  await writeFile(outputPath, buf);
}

Buffer 비교와 결합

CODE
const a = Buffer.from('Hello');
const b = Buffer.from('World');

// 결합
const combined = Buffer.concat([a, Buffer.from(' '), b]);
console.log(combined.toString()); // 'Hello World'

// 비교 (0: 같음, -1: a<b, 1: a>b)
Buffer.compare(a, b); // 음수 (H < W)

// 같은지 확인 (타이밍 공격 방지에는 crypto.timingSafeEqual 사용)
a.equals(Buffer.from('Hello')); // true

TypedArray와 상호 변환

CODE
// Buffer → Uint8Array
const buf = Buffer.from([1, 2, 3]);
const uint8 = new Uint8Array(buf);

// Uint8Array → Buffer (복사 없이)
const buf2 = Buffer.from(uint8.buffer, uint8.byteOffset, uint8.byteLength);

// ArrayBuffer → Buffer
const ab = new ArrayBuffer(4);
const view = new DataView(ab);
view.setInt32(0, 0xDEADBEEF);
const buf3 = Buffer.from(ab);
console.log(buf3.toString('hex')); // 'deadbeef'

스트림에서의 Buffer 활용

CODE
const chunks = [];
stream.on('data', (chunk) => chunks.push(chunk));
stream.on('end', () => {
  const full = Buffer.concat(chunks);
  const text = full.toString('utf-8');
  console.log(text);
});

성능 팁: Buffer.allocUnsafe()는 초기화 없이 빠르게 할당하지만, 이전 메모리 내용이 남아있을 수 있어 외부에 노출되는 데이터에는 절대 사용하지 마세요.

공유
S

SHIN

.NET 개발자입니다

GitHub
Node.js CJS vs ESM 모듈 시스템 완전 정리

이전 포스트

Node.js CJS vs ESM 모듈 시스템 완전 정리

다음 포스트

PM2로 Node.js 프로세스 관리하기

PM2로 Node.js 프로세스 관리하기

같은 카테고리 포스트

Node.js 테스팅 전략 — 단위, 통합, E2E 테스트

Node.js 테스팅 전략 — 단위, 통합, E2E 테스트

2026년 5월 6일· 2분
Node.js 보안 체크리스트 10가지

Node.js 보안 체크리스트 10가지

2026년 5월 5일· 2분
Node.js npm 스크립트 완전 활용하기

Node.js npm 스크립트 완전 활용하기

2026년 5월 4일· 1분

댓글