개발자공부일기
패킷 처리 및 데이터 전송 본문
패킷 처리 및 데이터 전송
1. 패킷의 구조
패킷은 네트워크를 통해 데이터를 전송할 때 사용하는 작은 데이터 단위로, 특정한 형식에 따라 데이터를 포함합니다. 주요 구성 요소는 다음과 같습니다:
- 헤더 (Header)
- 패킷의 출발지, 목적지, 패킷 번호, 프로토콜 정보 등을 포함.
- 데이터 전달 경로를 결정하고 오류를 처리하는 데 사용됩니다.
- 예: IP 헤더(출발지 IP, 목적지 IP 등), TCP 헤더(포트 번호 등).
- 페이로드 (Payload)
- 실제 전송하려는 데이터.
- 응용 계층의 데이터가 여기에 포함됩니다.
- 트레일러 (Trailer)
- 데이터 무결성을 검증하기 위한 정보(예: 오류 검출 코드).
- 모든 패킷에 포함되지는 않습니다.
2. 직렬화와 역직렬화 (Serialization & Deserialization)
- 직렬화 (Serialization)
- 데이터 구조나 객체를 네트워크 전송이나 파일 저장을 위해 바이트 스트림 형태로 변환.
- 네트워크 전송이나 데이터베이스 저장에 적합한 형식으로 데이터를 변환합니다.
- 대표적인 직렬화 형식: JSON, XML, Protocol Buffers, Avro.
- 사용 예시:
const data = { name: "Alice", age: 25 }; const serializedData = JSON.stringify(data); // 직렬화
- 데이터 구조나 객체를 네트워크 전송이나 파일 저장을 위해 바이트 스트림 형태로 변환.
- 역직렬화 (Deserialization)
- 직렬화된 바이트 스트림을 다시 원래 데이터 구조나 객체로 복원.
- 사용 예시:
const deserializedData = JSON.parse(serializedData); // 역직렬화 console.log(deserializedData.name); // Alice
3. 프로토콜 버퍼 (Protocol Buffers)
- 개념
- Google에서 개발한 고성능 데이터 직렬화 도구.
- 데이터 전송과 저장을 효율적으로 처리하도록 설계.
- JSON보다 빠르고, 더 작은 크기로 직렬화.
- 특징
- 컴팩트한 크기: JSON이나 XML보다 훨씬 더 작은 크기로 데이터 표현.
- 빠른 속도: 직렬화 및 역직렬화가 매우 빠름.
- 언어 독립적: 다양한 프로그래밍 언어에서 사용 가능.
- 명확한 스키마: .proto 파일로 데이터 구조 정의.
- 사용 방법
- 스키마 정의
.proto 파일에서 데이터 구조를 정의. - syntax = "proto3"; message Person { string name = 1; int32 age = 2; }
- 코드 생성
protoc 명령어를 사용해 정의된 스키마로 언어별 코드를 생성. - 직렬화와 역직렬화
- const person = { name: "Alice", age: 25 }; const buffer = Person.encode(person).finish(); // 직렬화 const decodedPerson = Person.decode(buffer); // 역직렬화 console.log(decodedPerson.name); // Alice
- 스키마 정의
Protocol Buffers는 특히 대규모 분산 시스템에서 데이터 전송의 효율성을 극대화하기 위해 자주 사용됩니다.