프로토콜 버퍼
Protocol Buffers| 개발자 | 구글 |
|---|---|
| 초기 릴리즈 | 2001년 초(내부)[1] 2008년 7월 7일 ( (공용) |
| 안정된 릴리스 | 3.20.1 / 2022년 4월 ; 전[2] 22일) |
| 저장소 | |
| 기입처 | C++, C#, Java, Python, JavaScript, Ruby, Go, PHP, Dart |
| 운영 체제 | 조금도 |
| 플랫폼 | 크로스 플랫폼 |
| 유형 | 시리얼라이제이션 포맷 및 라이브러리, IDL 컴파일러 |
| 면허증. | BSD |
| 웹 사이트 | developers |
Protocol Buffers(Protobuf)는 구조화된 데이터를 직렬화하는 데 사용되는 자유 오픈 소스 크로스 플랫폼 데이터 형식입니다.네트워크를 통해 서로 통신하는 프로그램을 개발하거나 데이터를 저장하는 데 유용합니다.이 방법에는 일부 데이터의 구조를 기술하는 인터페이스 기술 언어와 구조화된 데이터를 나타내는 바이트 스트림을 생성하거나 구문 분석하기 위한 소스 코드를 생성하는 프로그램이 포함됩니다.
개요
Google은 내부 사용을 위해 Protocol Buffers를 개발했으며, 오픈 소스 라이센스로 여러 언어를 위한 코드 생성기를 제공했습니다(아래 참조).
Protocol Buffers의 설계 목표는 단순성과 성능을 강조했습니다.특히 [3]XML보다 작고 빠를 수 있도록 설계되었습니다.
프로토콜 버퍼는 구글에서 모든 종류의 구조화된 정보를 저장하고 교환하기 위해 널리 사용됩니다.이 메서드는 Google의 [4]거의 모든 머신 간 통신에 사용되는 커스텀 리모트 프로시저 호출(RPC) 시스템의 기초가 됩니다.
Protocol Buffers는 Apache Trift(Facebook,[5] Evernote에서 사용), Ion(Amazon에서 사용) 또는 Microsoft Bond 프로토콜과 유사하며 gRPC라는 정의된 서비스에 사용할 구체적인 RPC 프로토콜 스택을 제공합니다.
데이터 구조(메시지라고 함)와 서비스는 프로토타입 정의 파일로 기술됩니다..proto) 및 컴파일 대상protoc이 컴파일은 이러한 데이터 구조의 송신자 또는 수신자가 호출할 수 있는 코드를 생성합니다.예를들면,example.pb.cc그리고.example.pb.h에서 생성되다example.proto메시지 및 서비스별로 C++ 클래스를 정의합니다.example.proto.
캐논리적으로 메시지는 콤팩트하고 순방향 및 역방향 호환성이 있지만 자기 설명이 아닌 바이너리 와이어 형식으로 시리얼화됩니다(즉, 외부 사양이 없는 필드의 이름, 의미 또는 완전한 데이터 유형을 알 수 있는 방법은 없습니다).Protocol Buffers 파일 내에 이러한 외부 사양(schema)을 포함하거나 참조하는 정의된 방법은 없습니다.공식적으로 지원되는 구현에는 ASCII 시리얼라이제이션포맷이 [6]포함되어 있습니다만, 이 포맷은 자기 설명이지만 정방향 및 역방향 호환성이 없기 때문에 디버깅 이외의 어플리케이션에는 적합하지 않습니다.
Protocol Buffers의 주된 목적은 네트워크 통신을 용이하게 하는 것이지만, 그 단순성과 속도 때문에 Protocol Buffers는 데이터 중심의 C++ 클래스 및 구조를 대체할 수 있으며, 특히 향후 다른 언어 또는 시스템과의 상호 운용성이 필요할 수 있습니다.
예
프로토콜 버퍼의 특정 용도를 위한 스키마는 각 필드를 식별하기 위해 정수를 사용하여 데이터 유형을 필드 이름과 연관짓습니다. (프로토콜 버퍼 데이터는 필드 이름이 아닌 숫자만 포함하므로 데이터에 필드 이름을 포함하는 시스템에 비해 대역폭/저장 공간을 다소 절약할 수 있습니다.)
// polyline.syslog 구문 = "param2"; 메세지 포인트 { 필수의 int32 x = 1; 필수의 int32 y = 2; 선택적. 스트링 라벨. = 3; } 메세지 선 { 필수의 포인트 개시하다 = 1; 필수의 포인트 끝. = 2; 선택적. 스트링 라벨. = 3; } 메세지 폴리라인 { 반복했다 포인트 포인트 = 1; 선택적. 스트링 라벨. = 2; } "Point" 메시지는 x와 y의 두 가지 필수 데이터 항목을 정의합니다.데이터 항목 레이블은 선택 사항입니다.각 데이터 항목에는 태그가 있습니다.태그는 등호 뒤에 정의됩니다.예를 들어 x에는 태그 1이 붙어 있습니다.
둘 다 Point를 사용하는 "Line" 및 "Polyline" 메시지는 프로토콜 버퍼에서 구성이 어떻게 작동하는지 보여줍니다.폴리선에는 벡터처럼 동작하는 반복 필드가 있습니다.
이 스키마는 이후 하나 이상의 프로그래밍 언어로 사용할 수 있도록 컴파일할 수 있습니다.구글은 라고 불리는 컴파일러를 제공한다.protocC++, Java 또는 Python의 출력을 생성할 수 있습니다.다른 스키마 컴파일러는 다른 소스로부터 제공되어 20개 이상의 다른 [7]언어에 대한 언어 의존형 출력을 생성할 수 있습니다.
예를 들어 위의 C++ 버전의 프로토콜 버퍼 스키마가 생성된 후 C++ 소스 코드 파일 polyline.cpp는 다음과 같이 메시지 개체를 사용할 수 있습니다.
// polyline.cpp #실패하다 polyline.pb.h"// "protoc polyline.param"을 호출하여 생성됨 선* create New Line(새 라인 생성)(컨스턴트 표준::스트링& 이름.) { // (10, 20)에서 (30, 40)까지의 행을 작성합니다. 선* 선 = 신규 선; 선->가변_스타트()->set_x(10); 선->가변_스타트()->set_y(20); 선->가변형()->set_x(30); 선->가변형()->set_y(40); 선->set_label(이름.); 돌아가다 선; } 폴리라인* create New Polyline(새 폴리라인 생성)() { // (10,10) 및 (20,20)에 점을 가진 폴리선 작성 폴리라인* 폴리라인 = 신규 폴리라인; 포인트* 포인트 1 = 폴리라인->add_point(추가 포인트)(); 포인트 1->set_x(10); 포인트 1->set_y(10); 포인트* 포인트 2 = 폴리라인->add_point(추가 포인트)(); 포인트 2->set_x(20); 포인트 2->set_y(20); 돌아가다 폴리라인; } 언어 지원
Protobuf 2.0은 C++, Java, C#[8] 및 [9]Python용 코드 생성기를 제공합니다.
Protobuf 3.0은 C++, Java(저자원 환경을 위한 언어인 JavaNano 포함), Python, Go, Ruby, Objective-C, C#[10]을 위한 코드 생성기를 제공합니다.3.0.0-beta-2 [11]이후 JavaScript도 지원합니다.
서드파티 실장은 [13][14][15]Balerina, C, C++, Dart,[16][17] Elixir,[18][19] Erlang,[20] Haskell, JavaScript, [21][22]Perl,[23] [24][25][26]PHP, Prolog, Rust,[27] Scala[28], Swift,[12] Julia 및 [29]Nim에서도 사용할 수 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Frequently Asked Questions Protocol Buffers". Google Developers. Retrieved 2 October 2016.
- ^ "Releases - google/protobuf" – via GitHub.
- ^ Eishay Smith. "jvm-serializers Benchmarks". GitHub. Retrieved 2010-07-12.
- ^ Kenton Varda. "A response to Steve Vinoski". Retrieved 2008-07-14.
- ^ "grpc". grpc.io. Retrieved 2 October 2016.
- ^ "text_format.h - Protocol Buffers - Google Code". Retrieved 2012-03-02.
- ^ 서드파티 애드온 - protobuf - 서드파티 애드온 링크 - 프로토콜 버퍼 - Google의 데이터 교환 형식 - Google 프로젝트 호스팅.Code.google.com 를 참조해 주세요.2013-09-18에 회수.
- ^ "Protocol Buffers in C#". Code Blockage. Retrieved 2017-05-12.
- ^ "Protocol Buffers Language Guide". Google Developers. Retrieved 2016-04-21.
- ^ "Language Guide (proto3) Protocol Buffers". Google Developers. Retrieved 2020-08-09.
- ^ "Release Protocol Buffers v3.0.0-beta-2 · protocolbuffers/protobuf". GitHub. Retrieved 2020-08-09.
- ^ "Ballerina - GRPC".
- ^ "Nanopb - protocol buffers with small code size". Retrieved 2017-12-12.
- ^ "Protocol Buffers implementation in C". GitHub. Retrieved 2017-12-12.
- ^ "Embedded Proto - Protobuf for microcontrollers". Retrieved 2021-08-15.
- ^ "Protox". GitHub. 25 October 2021.
- ^ "Protobuf-elixir". GitHub. 26 October 2021.
- ^ "Tomas-abrahamsson/GPB". GitHub. 19 October 2021.
- ^ "Proto-lens". GitHub. 16 October 2021.
- ^ "Protocol Buffers for JavaScript". github.com. Retrieved 2016-05-14.
- ^ "SWI-Prolog: Google's Protocol Buffers Library".
- ^ "SWI-Prolog / contrib-protobufs". Retrieved 2022-04-21.
- ^ "Rprotobuf/SRC at master · eddelbuettel/Rprotobuf". GitHub.
- ^ "Rust-protobuf". GitHub. 26 October 2021.
- ^ "PROST!". GitHub. 21 August 2021.
- ^ "Quick-protobuf". GitHub. 12 October 2021.
- ^ "Swift Protobuf". GitHub. 26 October 2021.
- ^ "ThirdPartyAddOns - protobuf - Links to third-party add-ons. - Protocol Buffers - Google's data interchange format - Google Project Hosting". Retrieved 2012-11-07.
- ^ "Protobuf implementation in pure Nim that leverages the power of the macro system to not depend on any external tools". GitHub. 21 October 2021.
