[Server] TCP Server - Buffer
JavaScript에서 Buffer란?
● Node.js에서 이진 데이터를 다루기 위한 특별한 객체
● JavaScript 문자열 = UTF-16 형식으로 인코딩 되어 있어 이진 데이터를 효율적 처리가 어렵다.
UTF-16?
- 유니코드 문자를 16bit(2byte) 단위로 인코딩하는 방식
- 대부분의 일반적인 문자는 하나의 16bit 단위로 표현되지만, 일부 문자(보조 평면의 문자 등)는
두 개의 16비트 단위(서로게이트 페어)로 표현된다.
● Buffer 객체(object)는 원시적인 이진 데이터를 저장하고 조작하는데 최적화되어 있다.
그래서 Buffer 객체를 쓰면 좋은 점?
● 이진 데이터를 다루기 위해 고안된 객체이기에 UTF-16의 비효율성을 해결
○ 고정 길이 : 고정된 크기의 바이트 배열이기에 모든 데이터가 1byte 단위로 처리되므로,
데이터를 다루기 쉽고 효율적이다.
○ 빠른 접근 : 바이트 단위로 데이터를 직접 접근하고 조작할 수 있기에 이진 데이터 처리에 매우 유용하다.
// Buffer 사용 예
const buffer = Buffer.from('Hello');
console.log(buffer); // <Buffer 48 65 6c 6c 6f>
console.log(buffer[0]); // 72 (H의 ASCII 값)
- 문자열 'Hello'는 각 문자의 ASCII 코드 값으로 변환되어 byte 배열에 저장된다.
○ 'H': 72 (10진수), 0x48 (16진수)
○ 'e': 101 (10진수), 0x65 (16진수)
○ 'l': 108 (10진수), 0x6c (16진수)
○ 'l': 108 (10진수), 0x6c (16진수)
○ 'o': 111 (10진수), 0x6f (16진수)
○ 메모리 효율성 : 필요한 만큼의 메모리만 사용한다.
→ 1byte 데이터 처리할 때마다 1byte 메모리만 사용
○ 호환성 : 대부분의 네트워크 프로토콜과 파일 포맷이 byte 단위로 데이터를 처리하므로
추가적인 변환 과정 없이 쉽게 데이터를 주고받을 수 있다.
Buffer가 어떻게 받아지나 예시 코드로 봐보자
- 기본적으로 Server, Client 구조로 테스트
// server.js
import net from 'net';
const PORT = 5555;
const server = net.createServer((socket) => {
console.log(`Client connected from: ${socket.remoteAddress}:${socket.remotePort}`);
socket.on('data', (data) => {
console.log(data);
socket.write(data); // 'data' 이벤트로 받은 data를 같은 socket에게 쓰기
});
socket.on('end', () => {
console.log('Client disconnected');
});
socket.on('error', (err) => {
console.error('Socket error:', err);
});
});
server.listen(PORT, () => {
console.log(`Echo server listening on port ${PORT}`);
console.log(server.address());
});
// client.js
import net from 'net';
// 서버에 연결할 호스트와 포트
const HOST = 'localhost';
const PORT = 5555;
const client = new net.Socket();
client.connect(PORT, HOST, () => {
console.log('Connected to server');
const message = 'Hello';
const buffer = Buffer.from(message);
client.write(buffer); // write 메서드로 버퍼 쓰기
});
client.on('data', (data) => {
console.log(data);
});
client.on('close', () => {
console.log('Connection closed');
});
client.on('error', (err) => {
console.error('Client error:', err);
});
실행 결과 ▼
1. 처음실행하면 아무것도 없다가...

2. 클라이언트가 접속하면...

3. 서버에서는 접속했다는 메시지와 Buffer 객체를 받는다.
