구글 프로토콜 버퍼 (Protocol Buffer)

 

개요

  1. <프토토콜 버퍼>는 랭귀지 중립적, 플랫폼 중립적인 데이터 시리얼라이즈 포맷

    • 서로 다른 종류의 머신, 서로 다른 종류의 플랫폼에서 동일한 의미를 갖도록 데이터의 포맷을 정의한다는 점에서 <프로토콜 버퍼>라는 이름은 (구글의 저질 작명 센스를 고려할 때, 의외로) 적절
      --> 프로토콜(통신)을 위한 버퍼(데이터)
  2. <프로토콜 버퍼>는 이제 구글의 데이터 공용어 (gRPC의 디폴트 데이터 포맷)

    • What is gRPC?
      . 구글이 정의한 RPC
      . 구글의 최신 API는 이제 REST API 뿐 아니라 gRPC API도 함께 제공함
      . gRPC는 <프로토콜 버퍼>를 기본 데이터 시리얼라이즈 포맷으로 사용
        (but, JSON 등 다른 포맷도 사용 가능)
      . 다양한 랭귀지 지원: C++, Java, Python, Go, Ruby, C#, Node.js, PHP, ...
  3. JSON을 <프로토콜 버퍼>로 <프로토콜 버퍼>를 JSON으로 변환 가능

  4. XML보다 작고, 빠르고, 간단

 

XML 대비 <프로토콜 버퍼>의 장단점

  1. XML 대비 장점

    • 더 간단함
    • 더 작음: 3배~10배
    • 더 빠름: 20~100배
    • 더 명료함
    • 컴파일러 등 도구를 제공함
  2. XML 대비 단점

    • 본질적으로 바이너리 포맷
      . HTML과의 호환성이 약함
      . human readable 특성이 약함
    • 데이터 포맷을 완전히 파악하려면 .proto 파일이 필요
      . XML은 어느 정도는 자기 완결성을 가짐

 

proto 파일

  1. <프로토콜 버퍼>의 데이터 포맷을 정의하는 소스파일

  2. proto 파일 고유의 문법 존재

  3. proto 파일 안에서 다른 proto 파일 참조 가능

  4. proto 파일을 컴파일하면 각 랭귀지별 라이브러리가 생성됨

    • 지원 랭귀지
      . proto2: C++, Java, Python, Go
      . proto3: C++, Java, Python, Go, Ruby, Objective-C, C#, JavaScript

 

Ref.


Posted by ingeeC
,