반응형
프로토콜 버퍼란?
- 구글에서 개발하고 오픈소스로 공개한 직렬화 데이터 구조(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 포맷과 읽어들이는 방식의 예>
<프로토콜 버퍼와 읽어들이는 방식의 예>
반응형
'Android' 카테고리의 다른 글
Android/Kotlin - 내부저장 Shared Preferences vs Data Store vs Room (0) | 2022.08.09 |
---|---|
[Android/Java] 다중이미지 미리보기 구현 (0) | 2022.01.18 |
[Java] 하나의 RecyclerView에 서로 다른 뷰 넣기 ( TCP 채팅 예제 - 카카오톡 채팅화면) (0) | 2022.01.12 |
댓글