Protobuf에 대해

seok222·2023년 2월 24일
0

Intern

목록 보기
4/6

Protobuf 란

  • Protocol Buffers ( Protobuf)는 Google에서 개발한 데이터 직렬화 형식이다.
  • 구조화된 데이터를 이진 형식으로 효율적이고 compact하게 저장하여 네트워크 연결을 통해 더 빠르게 전송할 수 있다.
  • Protobuf 는 선택한 다양한 프로그래밍 언어를 지원하고 플랫폼 독립적이므로 Protobuf를 사용하여 작성된 프로그램을 다른 플랫폼으로 쉽게 porting할 수 있다.

Protobuf의 특징

  • 문자열, 정수, 부동 소수점, bool, 열거형(열거형), 지도(연관 배열) 등을 비롯한 많은 데이터 유형을 지원한다.
  • 언어 독립적 구문을 사용하면 선택한 서로 다른 프로그래밍 언어를 사용하여 작성된 프로그램이 서로 안정적으로 통신할 수 있다.
  • 구조화된 데이터는 binary 형식으로 저장되기 때문에 XML이나 JSON 형식과 같은 텍스트 기반 형식보다 훨씬 작아 네트워크를 통한 전송이 더 빠르다. 하지만 binary 데이터로 표현되기 떄문에 확인하기 어렵다.
  • Protobuf 는 확장하기 쉽도록 설계되어 빠르게 변화하는 데이터 구조와 새로운 기능을 처리하는 데 이상적이다.
  • Protobuf 에서 특별히 생성된 소스 코드 는 속도를 최적화할 수 있으므로 더 적은 메모리를 사용하여 더 빠른 애플리케이션을 만들 수 있다.

→ Protobuf는 결국 client와 server간 통신의 interface이자 통신 시 사용되는 데이터 형식에 해당한다. (socket을 대체하는 것이라고 생각하면 편하다.)

Protobuf vs JSON

  • Protobuf 와 JSON 의 주요 차이점은 데이터가 인코딩되는 방식이다. Protobuf 는 바이너리 형식으로 데이터를 인코딩하는 반면 JSON 은 사람이 읽을 수 있는 일반 텍스트 형식을 사용한다. 이로 인해 Protobuf 는 JSON 보다 동일한 양의 정보를 전송하는 데 더 적은 대역폭이 필요하기 때문에 네트워크를 통해 데이터를 전송하는 데 훨씬 더 빠르고 효율적이다.
  • JSON 은 두 언어 모두 쉽게 읽을 수 있으므로 JavaScript와 HTML을 사용하는 웹 기반 환경에서 사용하기가 더 쉽다. 또한 JSON 은 사람이 읽을 수 있다는 장점이 있어 Protobuf 보다 디버깅 및 문제 해결이 더 쉽다. 그러나 Protobuf 는 JSON 보다 훨씬 빠르기 때문에 네트워크를 통한 처리 능력이 덜 필요하다. 따라서 data stream 또는 장치 간 실시간 통신이 필요한 애플리케이션에 이상적인 선택이다. 또한 Protobuf 는 데이터를 binary 형식으로 인코딩하기 때문에 중간에 누군가 이를 악의적으로 수정하기 어려워 보안이 강화된다.
  • 따라서 Protobuf 와 JSON 의 차이점을 속도, 크기, 데이터 유형 및 플랫폼 호환성이라는 네 가지 주요 영역으로 나눌 수 있다.
    • 속도 : Protobuf 는 data serialization 및 data deserialization과 관련하여 JSON 보다 훨씬 빠르다. 형식이 binary이기 때문에 JSON 보다 Protobuf 에서 구조화된 데이터를 읽고 쓰는 데 시간이 덜 걸린다.
    • 크기 : Protobuf 는 JSON 보다 훨씬 작기 때문에 네트워크 대역폭이 제한될 때 매우 유용할 수 있다. Binary data stream의 compact한 특성으로 인해 JSON 메시지보다 Protobuf 메시지를 저장하고 전송하는 데 더 적은 공간을 차지한다.
    • 데이터 유형 : 두 형식 모두 문자열, 숫자 및 bool과 같은 기본 데이터 유형을 지원하지만 Protobuf 는 JSON 에서 사용할 수 없는 enum 및 map과 같은 보다 복잡한 데이터 유형을 지원한다. 이를 통해 개발자는 더 풍부한 데이터 구조가 필요한 더 정교한 응용 프로그램을 만들 수 있다.
    • 플랫폼 호환성 : Protobuf 는 오픈 소스 형식이므로 JSON 보다 플랫폼 호환성이 좋다. 언어 및 플랫폼에 독립적이기 때문에 어려움이나 호환성 문제 없이 여러 플랫폼에서 사용할 수 있다.
  • Protobuf 는 속도, 크기 효율성 및 복잡한 데이터 유형이 필요한 애플리케이션에 선호되는 데이터 형식이다. 네트워크 대역폭이 제한된 분산 시스템 또는 모바일 앱을 개발하는 데 탁월한 선택이다. 이에 비해 JSON 은 더 간단하고 많은 언어와 플랫폼에서 지원하므로 더 널리 받아들여진다. 따라서 성능보다 호환성과 단순성을 원하는 상황에서 사용할 수 있다. 궁극적으로 Protobuf 또는 JSON 사용 간의 결정은 애플리케이션의 특정 요구 사항에 따라 다르다.
  • 결론적으로 Protobuf 와 JSON 모두 애플리케이션을 구축할 때 어떤 기능을 가장 우선시하느냐에 따라 장단점이 있다. 더 빠른 읽기/쓰기 속도, 더 작은 파일 크기 및 복잡한 데이터 유형이 필요한 경우 Protobuf 가 더 나은 선택이다. 그러나 단순성과 플랫폼 호환성이 더 중요한 경우 JSON 이 더 나을 수 있다. 궁극적으로 결정은 응용 프로그램의 특정 요구 사항에 따라 달라진다.

Protobuf 종류

  • Protobuf2 구조화된 데이터를 인코딩하는 데 사용되는 원래의 프로토콜 버퍼 언어이다. Java, C++ 및 Python 과 같은 여러 언어로 코드 생성을 지원한다.
  • Protobuf3 Proto3는 proto2의 진화 버전인 Protobuf 의 최신 버전이다. 여러 기능을 추가하고 특정 시나리오에서 Protobuf 사용을 단순화한다.
  • gRPC 마지막으로 gRPC 는 Protobuf 기반의 고성능 RPC (Remote Procedure Call) framework로 서비스 간 연결 및 상호 운용을 쉽게 해준다. Java, Python, C++ 및 Node.js와 같은 여러 언어를 지원한다.

Protocol buffer 동작 흐름

  1. *.proto 파일에서 메시지 형식 작성
  2. protoc 컴파일러를 통해 원하는 언어로 컴파일
  3. 프로토콜 버퍼를 사용하는 전체 목적은 데이터를 다른 곳에서 구문 분석 할 수 있도록 직렬화, 인코딩 ( 마샬링 )
  4. 직렬화된 데이터를 사용하기 위해 디코딩 ( 언마샬링 )
profile
영차영차!!!

0개의 댓글