구글 프로토콜 버퍼 (Protocol Buffer)
개요
<프토토콜 버퍼>는 랭귀지 중립적, 플랫폼 중립적인 데이터 시리얼라이즈 포맷
- 서로 다른 종류의 머신, 서로 다른 종류의 플랫폼에서 동일한 의미를 갖도록 데이터의 포맷을 정의한다는 점에서 <프로토콜 버퍼>라는 이름은 (구글의 저질 작명 센스를 고려할 때, 의외로) 적절
--> 프로토콜(통신)을 위한 버퍼(데이터)
- 서로 다른 종류의 머신, 서로 다른 종류의 플랫폼에서 동일한 의미를 갖도록 데이터의 포맷을 정의한다는 점에서 <프로토콜 버퍼>라는 이름은 (구글의 저질 작명 센스를 고려할 때, 의외로) 적절
<프로토콜 버퍼>는 이제 구글의 데이터 공용어 (gRPC의 디폴트 데이터 포맷)
- What is gRPC?
. 구글이 정의한 RPC
. 구글의 최신 API는 이제 REST API 뿐 아니라 gRPC API도 함께 제공함
. gRPC는 <프로토콜 버퍼>를 기본 데이터 시리얼라이즈 포맷으로 사용
(but, JSON 등 다른 포맷도 사용 가능)
. 다양한 랭귀지 지원: C++, Java, Python, Go, Ruby, C#, Node.js, PHP, ...
- What is gRPC?
JSON을 <프로토콜 버퍼>로 <프로토콜 버퍼>를 JSON으로 변환 가능
XML보다 작고, 빠르고, 간단
XML 대비 <프로토콜 버퍼>의 장단점
XML 대비 장점
- 더 간단함
- 더 작음: 3배~10배
- 더 빠름: 20~100배
- 더 명료함
- 컴파일러 등 도구를 제공함
XML 대비 단점
- 본질적으로 바이너리 포맷
. HTML과의 호환성이 약함
. human readable 특성이 약함 - 데이터 포맷을 완전히 파악하려면 .proto 파일이 필요
. XML은 어느 정도는 자기 완결성을 가짐
- 본질적으로 바이너리 포맷
proto 파일
<프로토콜 버퍼>의 데이터 포맷을 정의하는 소스파일
proto 파일 고유의 문법 존재
proto 파일 안에서 다른 proto 파일 참조 가능
proto 파일을 컴파일하면 각 랭귀지별 라이브러리가 생성됨
- 지원 랭귀지
. proto2: C++, Java, Python, Go
. proto3: C++, Java, Python, Go, Ruby, Objective-C, C#, JavaScript
- 지원 랭귀지
Ref.
프로토콜 버퍼, 구글 홈
gRPC, 구글 홈
- https://grpc.io/docs/
- 구글 공식 문서
쌍쌍바나나: 구글 프로토콜 버퍼란?
- http://ourcstory.tistory.com/47
- 2016-03-23
- 참조할만한 문서링크 제공
조대협의 블로그: 구글 프로토콜 버퍼
- http://bcho.tistory.com/1182
- 2017-06-25
- 참조할만한 코드샘플 제공