Protocol Buffer란

‘protocol buffer’ 먼저 단어의 의미를 살펴보자.

protocol은 통신규약 어떠한 데이터 구조로 통신을 할 것인지를 정의하는 용어이고, buffer는 ‘완충제’ 라는 의미로 데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역을 의미한다.

공식문서를 보면,

Protocol buffers are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages.

구조화된 데이터를 직렬화를 통해서 플랫폼간,언어간 통신에서 자유롭다는 얘기를 하고 있다. 또한 더 작고 빠르다고 설명한다.

직렬화란?

직렬화(serialization)는 컴퓨터 과학의 데이터 스토리지 문맥에서 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정이다.

일련의 바이트로부터 데이터 구조를 추출하는 일은 역직렬화(deserialization) 이라고도 한다.

예를들면, 직렬화는 메모리를 디스크에 저장하거나 네트워크 통신에 사용하기 위한 형식으로 변환하는 것을 말한다고 볼 수 있다. 반대로 역직렬화는 디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 변환하는 것이다.

참고자료에 적어둔 블로그에 직렬화에 대한 내용이 있으니 참고하면 좋을 것이다.

왜 더 작고 빠른가?

https://martin.kleppmann.com/2012/12/05/schema-evolution-in-avro-protocol-buffers-thrift.html

JSON의 경우 필드값과 그 필드에 해당하는 값이 함께 저장된 형태에서 필드값을 1,2,3(스키마) 과 같은 숫자로 번형하여 필드에 대한 문자열을 간소화함으로써 데이터 사이즈를 줄이는 것으로 보인다.

현재 tfrecord와 관련하여 공부 중인데 protobuf가 데이터 저장 방식으로 이용된다. 더 공부한 후 protobuf 가 작고 빠른이유에 대해서 글을 작성해보도록 하자.

Reference

Categories:

Updated: