1. 개요
다양한 종류의 데이터를 기계가 쓰고 읽기 편리하게 직렬화(serialize)하여 나타낸 형식을 말한다. 데이터를 저장하거나 기기 간에 주고받을 때 일정한 형식으로 직렬화함으로서 데이터의 손실을 방지하고 올바르게 해석할 수 있게 한다.일반적으로 사람이 읽을 수 있는 문자만을 사용한 텍스트 기반 형식과, 컴퓨터가 쉽게 처리할 수 있게 2진법으로 데이터를 저장하는 형식이 있다.
마크업 언어와는 '기계가 읽을 수 있는 데이터를 다룬다'는 점이 비슷하나 그 목적이 다르다. 마크업 언어는 본격적으로 형식과 모양을 갖추어 사람이 보기 위한 문서를 다루는 데 반해, 데이터 직렬화 형식은 '데이터를 저장한다'는 목적에 더 충실하다. XML은 두 개념 사이에 걸친 언어인데, 문서를 나타내는 용도로도, 데이터를 저장하는 용도로도 쓸 수 있다.
2. 텍스트 기반 형식
다양한 소프트웨어 간의 호환성을 유지하기 위해 인코딩을 제약하는 경우가 많다. 과거에는 ASCII 문자만 허용하는 경우도 많았지만, UTF-8이 널리 쓰이게 되면서 이를 허용하는 경우도 많다.YAML[1]이나 TOML등은 이론적으로는 데이터 직렬화가 가능하더라도, 해당 기능을 염두에 두고 만들어진 포맷이 아니기 때문에 보통 설정 파일로 분류한다. 자세한 목록은 해당 문서 참고.
3. 이진 형식
- CBOR
- BSON - MongoDB에서 사용하는 타입이 추가된 JSON 형식. 바이너리로 직렬화되기 때문에 공간을 적게 차지한다.
- LEB128 - 대용량의 정수들을 무손실 압축해 저장하는 용도로 사용하는 바이너리 형식.
- MessagePack
- Pickle: Python에서 객체를 직렬화하는 용도로 사용하는 전용 형식이다.
- Protocol Buffers: 구글에서 개발한 형식이다.
4. 둘러보기
[1]
사실 YAML은 json의 수퍼셋이기 때문에 json이 직렬화 형식이라면 yaml도 직렬화 형식이 맞다. 다만 실제로 yaml serialization을 지원하는 라이브러리가 없다시피 하고, 파싱 전용
설정 파일로 쓰이는 경우가 많기 때문에 예외로 친다.