Protobuf

RuuNee
|2024. 7. 20. 18:38
반응형

FlatBuffers를 protobuf와 비교했을때,
가장 큰 차이점은 serialize된 버퍼에 parsing이나 unpacking 없이 값에 접근할 수 있다는 점이다.


protobuf는 버퍼에서 값을 구하려면 ParseFrom… 함수를 불러 순차적으로 parsing을 수행한 후에 값에 접근이 가능.

FlatBuffers에서 데이터를 정의하는 과정을 보면, 스키마에 struct 혹은 table을 사용하는데, struct는 정의된 그대로 serialize하지만 table은 조금 다른 형태를 가지게 된다.
C++에서 가상함수의 주소를 vtable에 저장하는 것처럼, serialize를 할 때 버퍼의 앞부분 vtable이라고 부르는 곳에 값들의 offset들을 저장하고 그 뒤에 실제 값들을 저장한다.

즉, vtable에 값으로 접근할 수 있는 offset들이 저장되어 있기 때문에, 전체 parsing을 수행하지 않고 offset들만 parsing하면 값에 바로 접근할 수 있게 된다.

 

프로토 버프 사용 이유 : 

언어 호환성 (C++, C#), 버그도 없을 확률이 더 높고, 이미 많이 알려져서 공용 기술.

최적화, 데이터의 직관성: xml과 달리 패킷 설계가 직관적이라 쉬운편

반응형