바이너리가 필요한 이유
JSON 은 사람이 읽고 디버깅하기 쉽지만 느리고 커. 멀티플레이어 게임의 위치, 시장 시세, 센서 스트림처럼 작고 빈번한 메시지에서는 JSON 의 부담이 대역폭 비용과 프레임 누락으로 드러나. 바이너리를 쓰면 페이로드 크기를 60~80% 줄이고 해석 시간도 더 크게 단축할 수 있어. 브라우저가 바이너리를 기본 지원하지만 인코더와 디코더는 직접 만들어야 해.
DataView 를 활용해
DataView 는 ArrayBuffer 의 특정 바이트 위치에서 자료형이 있는 값을 읽고 써. 바이트 순서는 명시적으로 정해야 하는데, 보통 little-endian 을 뜻하는 true 를 넘겨. 그래야 같은 전송 형식을 JavaScript 클라이언트와 Python 서버가 함께 쓸 수 있어. 정해진 위치에 여러 필드를 한 버퍼로 묶으면 직접 만든 바이너리 프로토콜이 완성돼.
MessagePack 이나 Protobuf 를 골라야 할 때
직접 만든 바이너리 형식은 필드가 적고 엄격히 정의된 메시지에 잘 맞아. 프로토콜에 스키마 변경, 선택 필드, 중첩 구조가 생기면 JSON 을 바로 대체하면서 약 30% 작은 MessagePack 이나, .proto 정의가 필요하지만 압축 효율이 뛰어난 Protobuf 가 나아. 트랙 5 에서 다시 다룰 거야.