오늘은 gRPC에 대해 공부하던중 Protobuf(프로토컬 버퍼)란 말이 많이 등장하는데 얕게나마 이해를 하고 넘어가고 싶어서 정리하게 되었습니다
Protobuf란
Protocol Buffers는 Google에서 개발한 데이터 직렬화 방식 줄여서 protobuf, 더 줄여서 pb라고도 불립니다
protobuf -> pb는 다른 IDL(XML, JSON...)에 비해 더 작은 용량(이진 형식)으로 데이터를 저장할 수 있기 때문에 네트워크 연결을 통해 더 빠르게 전송할 수 있습니다
인터페이스 정의 언어 (Interface Description Language 또는 Interface Definition Language, IDL) 는 소프트웨어 컴포넌트의 인터페이스 를 묘사하기 위한 명세 언어 이다. IDL은 어느 한 언어에 국한되지 않는 언어중립적인 방법으로 인터페이스를 표현함으로써, 같은 언어를 사용하지 않는 소프트웨어 컴포넌트 사이의 통신을 가능하게 한다.
이유는 protobuf는 데이터를 -> 바이너리 형식으로 저장
XML, JSON 데이터를 -> 텍스트 기반으로 저장하기 때문 또한 protobuf는 확장되기 쉽도록 설계돼 빠르게 변화하는 데이터 구조와 새로운 기능을 처리하는데 아주 뛰어납니다
이러한 이점으로 인해 Protocal Buffers는 분산시스템, 웹 서비스 및 모바일 앱에 점점 의존함으로써 개발자들에게 인기를 끌고 있다고 합니다
현재 Protocal Buffers를 쓰는 대기업들
Google, Twitter, DropBox
현재 Protobuf는 JSON, XML에 비해 잘 알려지지 않았지만 점점 알아가고자 하는 사람들이 많아지고 있습니다
Protobuf를 사용하는 방법은 많은데 그중에서 효율적인 API를 만들 수 있다는 겁니다
데이터로 통신을 계속해서 하는 API에서 데이터의 크기는 무척중요합니다 그래서 JSON보다 더 빠른 Protobuf로 API의 데이터를 처리하는데 사용할 수 있습니다.
또한 개발자는 데이터 구조를 정의한 다음 이진 형식으로 직렬화하여 시스템 간에 데이터를 이식할 수 있기 때문에
분산 시스템에 데이터를 쉽게 저장할 수도 있습니다, 추가로 RPC통신에도 사용되는데
예를 들어 두 어플리케이션 간에 전송되는 메시지를 protobuf로 정의할 수 있습니다
직렬화 및 역질렬화만으로 동일한 메시지를 서로에게 전달할 수 있습니다
잘 정리가 되어 있는 사진이 있어서 가져와봤습니다. 사진을 보시면 어떻게 바이너리 형식인지 알 수 있습니다.
응용 프로그램 간의 RPC 통신이란?
RPC (원격 프로시저 호출)는 응용 프로그램이 네트워크를 통해 서로 통신할 수 있도록 하는 통신 유형입니다. 한 응용 프로그램의 기능이나 프로시저를 다른 응용 프로그램에서 호출할 수 있으므로 분산 컴퓨팅과 더 큰 확장성이 가능합니다.
RPC 는 호출 응용 프로그램(클라이언트라고도 함)에서 다른 응용 프로그램(서버라고도 함)으로 요청을 보내고 응답을 받는 방식으로 작동합니다.
요청은 일반적으로 매개변수 및 반환 값과 같이 실행해야 하는 절차에 대한 정보가 포함된 데이터 패킷으로 전송됩니다.서버가 패킷을 수신하면 이를 처리하고 관련 데이터 또는 결과와 함께 응답을 반환합니다.
(출처: https://appmaster.io/ko/blog/peurotobeopeuran-mueosibnigga)
마지막으로 Protobuf와 JSON의 차이점
- 속도 JSON보다 Protobuf에서 구조화된 데이터를 읽고 쓰는데 시간이 덜 걸립니다
- 크기 Protobuf는 JSON보다 훨신 작다 --> Protobuf는 바이너리 데이터 형식이기 때문
- 플랫폼 호환성: Protobuf는 오픈 소스라 JSON보다 플랫폼 호환성이 좋습니다
결론
결론적으로 Protocol Buffers 는 구조화된 데이터를 인코딩하기 위한 효율적이고 확장 가능한 메커니즘입니다.
형식이 안전하고 언어 중립적이며 JSON 또는 XML과 같은 대안보다 적은 대역폭이 필요합니다.
네트워크를 통해 다른 애플리케이션과 효율적으로 통신하거나 데이터를 저장하는 애플리케이션을 개발해야 하는 경우 Protocol Buffers 사용을 고려하십시오.
'CS > 네트워크' 카테고리의 다른 글
분산시스템속 브로드캐스트 (0) | 2024.08.06 |
---|---|
[네트워크] ARP 프로토콜 (0) | 2024.04.20 |
[네트워크] 로그란 무엇인가 (0) | 2023.03.05 |
[네트워크] Restful하게? Rest란 무엇일까? (0) | 2023.02.23 |
[네트워크] JWT(Token)를 위주로 Cookie & Session 파헤치기 (0) | 2023.01.07 |