플랫버퍼(FlatBuffers)는 바이너리 직렬화(serialize) 포맷이자 라이브러리다. C++ 같은 시스템 언어에서 빠른(Zero-copy에 가까운) 역직렬화와 낮은 오버헤드를 목표로 설계된 기술이다. Google이 주도해 만들었고 게임, 실시간 처리, 네트워크, 임베디드처럼 성능이 민감한 환경에서 많이 쓰인다.
일반적인 직렬화(예: JSON, protobuf)는 보통 파싱이나 언패킹 과정에서 새 객체를 만들고 메모리를 복사한다. FlatBuffers는 데이터가 버퍼 안에 ‘읽기 좋은 형태’로 배치되도록 만들어서, 수신 후 곧바로 버퍼를 “뷰(view)”처럼 접근한다. 그래서 흔히 unpack 없이 access가 가능하고 역직렬화 비용이 매우 낮다는 점이 강점이다.
(다만 플랫버퍼가 광고하는 'Zero-copy'는 사실 **"Protobuf나 JSON처럼 별도의 객체를 생성해서 값을 채워넣는 과정이 없다"**는 뜻이지, 구조체 방식보다 물리적으로 복사가 적다는 뜻은 아님)
요약하면 플랫버퍼는 스키마(.fbs)파일을 정의하면 flatc가 파싱해 언어별 C++헤더/소스코드를 생성하고, 그 생성된 C++코드를 컴파일/링크하면 실행 파일이 나오는 방식.
스키마 작성(fbs파일) → flatc가 코드 생성 → 앱이 생성된 헤더를 포함해 ‘플랫버퍼빌더’로 버퍼를 만듬 → CreatePerson같은 헬퍼함수를 사용 → C++컴파일로 빌드하면 실행파일이 나옴
장점
table은 필드 추가/삭제에 비교적 안전하고 미사용 필드를 무시할 수 있다.단점
struct는 alignment/padding 때문에 레이아웃이 민감하다.