What is it?
Structure data
를 Serialize
하는 방식
Why we use it?
Other solutions
- 특정한 라이브러리를 쓴다.
- 하지만 이 방식은 특정 언어 플랫폼에 종속되는 문제가 있음
다양한 language platform에서 효과적으로 사용이 가능함
- 데이터를 특정 스트링으로 인코딩한다.
- 간단한 데이터에 대해서 효과적이지만, 파싱하는데 런타임 과정에서 시간이 소요될 수 있음
간단한 데이터를 인코딩하는데 효과적임
- 데이터를 XML로 serilize한다.
- XML은 human-readable하기 때문에 효과적인 방식이지만, 성능적으로 굉장히 안 좋음
Protocol Buffer (ProtoBuf)
- 효율적이고 유연하며, 위의 문제들에 대한 automated solution
.proto
파일은 저장하기를 희망하는 데이터의 structure임
- 이를 이용하여 protobuf 컴파일러는 클래스를 만들고 바이너리 형태의 데이터를 효과적으로 인코딩과 파싱을 함
Benefits of ProtoBuf
- Cross-language Compatibility : 여러 언어에서 호환 됨
- Cross-project Support :
.proto
의 message를 정의함으로 여러 프로젝트에서 사용 가능
- Updating Proto Definitions Without Updating Code :
repaeted
키워드 이용하여 forward compatibilty 지원
When ProtoBuf is a not good fit
- 데이터가 MB를 넘을 때
- 메모리 사용에 비효율적임
- 동일한 데이터가 여러 binary serialization을 가질 때
- fully parsing하지 않고는 데이터 비교가 불가능함
- 압축이 필요할 때
- ProtoBuf의 Message는 압축되지 않음
- Multi dimension array나 floating number를 많이 포함할 때
- FITS 같은 어플리케이션이 더 적합
- OOP(객체지향)를 지원하지 않은 언어일 때
- Fortran, IDL 같은 언어는 지원이 잘 안됨
How do ProtoBufs work?
- 인터페이스 정의용 언어 (IDL)을 이용하여 데이터를 저장하기 위해 proto라는 형태로 정의
- protoc (proto compile)이 언어에 맞는 코드를 생성해줌
Who use ProtoBuf
- gRPC
- Google cloud
- Envoy Project