본문 바로가기
Android

Protocol Buffer - 프로토콜 버퍼

by 오늘도 깨달았다 2022. 8. 9.
반응형

프로토콜 버퍼란?

  • 구글에서 개발하고 오픈소스로 공개한 직렬화 데이터 구조(Serialized Data Structure)
    • 직렬화란? 데이터를 파일로 저장하거나 네트워크로 전송하기 위하여 바이너리 스트림 형태로 저장하는 행위
    • 바이너리? 두 조각을 의미 / 이진법 / 이진 파일 / 텍스트 형태가 아닌 이진형태로 인코딩된 파일 / Binary Digits → bits  
    • 스트림형태? 흐름 → 열거되어 있다 → 배열이나 리스트같은 구조라고 이해함  

 

  • 구조적데이터(XML과 같은)를 직렬화하기 위한 메커니즘
  • 구글에서 검색 색인 작업에 사용하려고 만들었다고 한다. 
  • C++,C#, Go, Java, Python, Object C, Javascript, Ruby 등 다양한 언어를 지원
  • 하나의 파일에 최대 64M까지 지원할 수 있으며 JSON이랑 서로 전환이 가능하다

 

  • 왜 사용하게 되었을까?
    • JSON은 편리하게 많이 사용되지만 텍스트 기반이라 파싱하는데 비용이 많이 들고 데이터가 커진다는 단점이 있다.
    • 이러한 점이 웹 애플리케이션에서는 문제가 안될수 있지만 IoT 플랫폼에서는 문제 될 수 있음
    • IoT는 저전력 환경에서 작동하는 컴퓨팅 파워가 약한 기기들이 수용할 수 있어야함 -> 메세지의 양이 대규모 -> 빠르고 효율적으로 처리할 수 있는 프로토콜이 중요함 
    • 메세지의 크기를 30~40%만 줄여도 효율을 크게 높일 수 있다.
    • 프로토콜버퍼외에도 Thrift, Avro 등의 프로토콜등이 있음

 

  • JSON, xml과 비교

JSON

  • 인간이 읽고 쓸 수 있다. : 개발과 디버깅이 편하다.
  • 스키마에 대한 정보 없이, 사용할 수 있다.
  • 웹 브라우저에서 사용하기 좋다.
  • XML에 비해서 가볍다.
  • 딱히 표준이라 할 만한 것들이 없다.

XML

  • 인간이 읽고 쓸 수 있다. : JSON 보다는 복잡하긴 하지만..
  • 스키마에 대한 정보 없이, 사용할 수 있다.
  • SOAP등의 표준이 있다.
  • xsd, xslt, sax, dom 과 같은 좋은 툴들이 많다.
  • JSON에 비해서 좀 장황하다.

Protocol Buffer

  • 데이터 압축률이 좋다.
  • 정보를 얻기 위해서는 스키마에 대한 정확한 지식이 필요하다.
  • 처리속도가 빠르다.
  • 이진 데이터라서 사람의 눈으로 확인할 수 없다.

 

 

  • 장점 
    • 다양한 형태의 데이터를 대량으로 빠르게 직렬화&역직렬화
    • 직렬화, 역직렬화 속도가 빠르다
    • 직렬화된 파일의 크기가 월등히 작아서 대용량 데이터를 처리할 때 성능이 좋다
    • 구글에서 말하는 장점
      • 더 간단합니다
      • 3 ~ 10배 더 작습니다
      • 20 ~ 100배 더 빠릅니다
      • 덜 모호합니다
      • 프로그래밍 방식으로 사용하기 더 쉬운 데이터 접근 클래스(data access classes)를 생성합니다.
  • 단점
    • JSON과 달리 사람이 읽기 어려움
    • proto 파일 필수 (없으면 데이터 해석 불가)

<xml 포맷과 읽어들이는 방식의 예>

<프로토콜 버퍼와 읽어들이는 방식의 예>

반응형

댓글