언어와 플랫폼에 상관없이 쓸 수 있고 확장할 수 있는 데이터를 구조화 하고 직렬화 하는 메커니즘
프로토콜 버퍼를 사용하면 데이터 구조를 정의 가능하고 지원되는 많은 언어의 코드로 컴파일 할 수 있으며 이후 구조화 된 데이터를 다른 데이터 스트림에 쓰거나 읽을 수 있다.
Twiter에서 일하며 Tweets object type을 다뤄야 한다고 상상해보자. Tweet은 최소한 작정자의 메시지가 있어야 한다.
syntax = "proto3";
package twitter;
message Tweet {
string message = 1;
}
protobuf로 의미하는 바를 인코딩하고 서비스 전반에 걸쳐 사용하면 전체 시스템의 일관성이 보장.
버전을 확인할 필요성을 없애고 다음과 같은 지저분한 코드 작겅을 피한다.
if (version == 3) {
...
} else if (version > 4) {
if (version == 5) {
...
}
...
}
protobuf에서는 메시지의 필드마다 번호를 매기는데 새로운 기능을 내놓거나 변경할때 하위 호환성을 관리하려는 것이다.
compile로생성한 protobuf library에 encoding decoding method가 만들어진다. 직접 관련된 코드를 짤 필요가 없다.
protobuf compiler는 확장을 지원한다. 자신만의 컴파일 로직으로 protobuf를 컴파일할 수 있다는 뜻.
고성능이며 payload가 적고, 직렬화할 때 JSON보다 6배나 빠르다.