직렬화 (Serialization) 개요 및 분류
Source
Evernote/Technote scraps/직렬화.md
Summary
본문은 직렬화(데이터를 일차원으로 펼치고 복원하는 과정)의 중요성과 분류 기준을 다룬다. 직렬화는 데이터 모델이 고정된 ‘Schematic’(예: Protocol Buffers, Cap’n Proto)과 범용 모델을 사용하는 ‘Schemaless’(예: JSON, MessagePack)로 나뉜다. Schematic은 효율성과 검증이 강점이나 확장성과 사용 편의성이 약점이며, Schemaless는 상호운용성이 높으나 효율성이 낮다. XML은 두 특성을 명확히 구분하지 못한 복잡한 포맷으로 평가된다. 또한 직렬화의 핵심 특성으로 스트리밍(Streaming), 정규화(Normalization), 랜덤 접근(Random Access) 가능성을 제시하며, ASN.1과 XDR 같은 초기 Schematic 포맷의 역사적 배경과 장단점(복잡성, 컴파일러 의존성 등)을 분석한다.
Key Points
- 직렬화는 프로토콜 인코딩의 핵심이며, 데이터 모델의 결정 시기에 따라 Schematic과 Schemaless로 분류된다.
- Schematic 직렬화(Protocol Buffers 등): 데이터 모델 고정 시 효율성(성능/크기)과 검증이 우수하나, 확장성 부족과 컴파일러 의존성(사용 난이도)이 단점이다.
- Schemaless 직렬화(JSON 등): 범용 데이터 모델 사용으로 상호운용성과 표준화 수준이 높으나, 효율성이 낮고 수동 검증이 필요하다.
- XML은 Schematic과 Schemaless의 장점을 모두 살리지 못한 복잡하고 반구조화된 포맷으로, 현대에는 표준화라는 유일한 장점도 약화되었다.
- 직렬화의 주요 특성: 스트리밍(전체 크기 미지정 시 인코딩 가능), 정규화(동일 데이터에 대해 유일한 직렬화 결과 생성), 랜덤 접근(전체 디코딩 없이 부분 접근 가능).
- ASN.1: 1984년 제정된 초기 Schematic 포맷으로 기능이 풍부하나 복잡도가 높아 컴파일러 구현이 어렵고, 수동 파싱으로 인한 보안 버그가 빈번하다.
- XDR: 썬 마이크로시스템즈의 RPC용 포맷으로 ASN.1보다 문법이 단순하고 파서 구현이 용이하나, 4바이트 패딩 등 현대적 관점에서의 비효율적 요소가 존재한다.