프로토콜 버퍼
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
프로토콜 버퍼(Protocol Buffers, protobuf)는 구글에서 개발한, 구조화된 데이터를 직렬화하기 위한 언어 중립적이며 플랫폼 중립적인 방법이다. XML보다 작고 빠르도록 설계되었으며, 단순성과 성능을 강조한다. 프로토콜 버퍼는 인터페이스 정의 언어(IDL)로서, 데이터 구조 스키마를 정의하는 데 사용되며, 직렬화 형식으로서 데이터를 이진 형식으로 변환하여 네트워크 통신 및 데이터 저장을 용이하게 한다. 다양한 프로그래밍 언어를 지원하며, 효율성, 간결성, 확장성을 제공하지만, 스트리밍 형식으로 적합하지 않고 자기 설명적이지 않다는 단점이 있다. 구글을 비롯한 여러 IT 기업에서 서버 간 통신 및 데이터 처리에 활용되고 있다.
더 읽어볼만한 페이지
- 데이터 직렬화 포맷 - XML
XML은 태그 중첩 방식 구문을 사용하는 범용 언어로서, 인터넷을 통한 구조화된 문서 및 데이터 공유를 용이하게 하고, 웰 폼 및 유효 XML 문서 개념을 통해 구문 정확성을 검사하며, 데이터 교환 등 다양한 분야에서 널리 사용된다. - 데이터 직렬화 포맷 - S-표현식
S-표현식은 Lisp 구문에서 소스 코드와 데이터를 표현하는 기본 구조로, 원자와 `(x . y)` 형태의 표현식으로 정의되며, 이진 트리 표현, 다양한 데이터 형식 지원, 그리고 여러 분야에서 활용된다. - 구글의 소프트웨어 - 구글 어시스턴트
구글 어시스턴트는 2016년 구글에서 개발한 인공지능 음성 비서 서비스로, 양방향 대화 지원, 다양한 기기 및 플랫폼 확장성, 인터넷 검색, 일정 관리, 홈 오토메이션 제어 등의 기능을 제공하지만 개인정보 보호 문제에 대한 비판도 존재한다. - 구글의 소프트웨어 - 제미니 (챗봇)
구글이 개발한 대화형 인공지능 챗봇 제미니는 챗GPT에 대응하기 위해 개발되었으며, LaMDA에서 PaLM 2를 거쳐 자체 개발한 제미니 모델로 업그레이드되었고, 현재 구글 서비스와 통합되어 정보를 제공하지만 편향성 논란도 있다.
프로토콜 버퍼 - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
개발자 | 구글 |
최초 공개 | 2001년 초 (내부) |
공개일 | 2008년 7월 7일 |
최신 버전 | 25.1 |
최신 버전 배포일 | 2023년 11월 15일 |
프로그래밍 언어 | C++, C#, Java, Python, JavaScript, Ruby, Go, PHP, Dart |
운영 체제 | 모든 운영 체제 |
플랫폼 | 크로스 플랫폼 |
종류 | 직렬화 포맷 및 라이브러리, 인터페이스 정의 언어 컴파일러 |
라이선스 | BSD 라이선스 |
웹사이트 | 프로토콜 버퍼 공식 웹사이트 |
파일 확장자 | .proto |
기술 정보 | |
유형 | 인터페이스 정의 언어 |
무료 여부 | 예 |
공개 여부 | 예 |
2. 역사
구글은 내부 사용을 위해 프로토콜 버퍼를 개발했으며, 코드 생성기를 오픈 소스 라이선스 하에 여러 언어에 대해 제공했다.[36] 프로토콜 버퍼의 설계 목표는 단순성과 성능을 강조했으며, 특히 XML보다 작고 빠르게 설계되었다.[3] 구글은 XML과 비교하여 3~10배 작고, 20~100배 빠르다고 주장한다.[37]
프로토콜 버퍼는 XML보다 작고 빠르며 단순하게 설계되었다.[3] 구글은 구조화된 정보를 저장하고 교환하는 데 프로토콜 버퍼를 널리 사용하며, 이는 구글에서 거의 모든 머신 간 통신에 사용되는 사용자 지정 원격 프로시저 호출(RPC) 시스템의 기반이 된다.[4]
프로토콜 버퍼는 구글에서 모든 종류의 구조화된 정보를 저장하고 교환하는 데 널리 사용된다. 이 방법은 구글에서 거의 모든 머신 간 통신에 사용되는 사용자 지정 원격 프로시저 호출(RPC) 시스템의 기초가 된다.[4]
프로토콜 버퍼는 아파치 스리프트(Apache Thrift), 이온(Ion), 마이크로소프트 본드(Microsoft Bond) 프로토콜과 유사하며, gRPC라고 하는 정의된 서비스에 사용할 구체적인 RPC 프로토콜 스택을 제공한다.[5]
데이터 구조 스키마(''메시지''라고 함)와 서비스는 프로토 정의 파일(.proto
)에 설명되어 있으며, protoc
으로 컴파일된다. 이 컴파일은 이러한 데이터 구조의 송신자 또는 수신자가 호출할 수 있는 코드를 생성한다. 예를 들어 example.pb.cc
와 example.pb.h
는 example.proto
에서 생성된다. 이들은 example.proto
의 각 메시지와 서비스에 대한 C++(C++) 클래스를 정의한다.
일반적으로, 메시지는 소형이며 전방 및 후방 호환성이 있지만 자기 설명은 아닌(즉, 외부 사양 없이는 필드의 이름, 의미 또는 전체 데이터 형식을 알 수 없음) 이진 와이어 형식으로 직렬화된다.
프로토콜 버퍼의 주요 목적은 네트워크 통신을 용이하게 하는 것이지만, 단순성과 속도 때문에 프로토콜 버퍼는 데이터 중심의 C++ 클래스 및 구조체에 대한 대안이 될 수 있으며, 특히 다른 언어 또는 시스템과의 상호 운용성이 미래에 필요할 수 있는 경우에 유용하다.
현재 구글에서 개발하고 있다. 오리지널 구글 구현은 C++, Java, Python으로 이루어져 있으며, 자유 소프트웨어로서 오픈 소스 라이선스로 공개되어 있다. 또한 ActionScript·C 언어·C 샤프·Clojure·Common Lisp·D 언어·Erlang·Go·Haskell·JavaScript·Lua·MATLAB·Mercury·Objective-C·OCaml·Perl·PHP·R 언어·Ruby·Scala·.NET Framework 등의 구현이 가능하다.[38]
3. 특징
데이터 구조(메시지)와 서비스는 `.proto` 파일에 정의되며, `protoc` 컴파일러를 통해 각 언어에 맞는 코드가 생성된다. 예를 들어 `example.proto` 파일은 `example.pb.cc`와 `example.pb.h` 파일을 생성하며, 여기에는 해당 `.proto` 파일에 정의된 메시지와 서비스에 대한 C++(C++) 클래스가 포함된다.
프로토콜 버퍼는 이진 형식으로 직렬화되어 사람이 직접 읽기는 어렵지만, 전방 호환성 및 후방 호환성을 지원한다.[6][7] 단순성과 속도 덕분에, 다른 언어 또는 시스템과의 상호 운용성이 필요한 경우 데이터 중심의 C++ 클래스 및 구조체에 대한 대안으로 사용될 수 있다.
3. 1. 장점
프로토콜 버퍼는 XML보다 효율적으로 데이터를 직렬화/역직렬화하도록 설계되었다. 구글은 XML에 비해 3~10배 작고, 20~100배 빠르다고 주장한다.[37] 예를 들어, XML에서 69바이트 이상인 데이터가 프로토콜 버퍼에서는 28바이트로 줄어들며, XML 파싱에는 5~10 마이크로초가 걸리는 반면 프로토콜 버퍼 파싱은 0.1~0.2 마이크로초만에 완료된다.[37]
데이터 구조는 `.proto` 파일에 명확하게 정의되어 있어 간결하다. 프로토콜 버퍼는 필드 추가 및 삭제에 유연하게 대응할 수 있어 확장성이 뛰어나다.
프로토콜 버퍼는 다양한 프로그래밍 언어를 지원한다.
버전 | 지원 언어 |
---|---|
proto2 | C++, 자바, 파이썬[43] (타사 구현체: 자바스크립트[44]) |
proto3 | C++, 자바(자바나노 포함), 파이썬, Go, 루비, 오브젝티브-C, C#[45], 자바스크립트(3.0.0 베타 2부터)[46] (타사 구현체: 펄, PHP, 스칼라, 줄리아[47]) |
구글(Google)은 내부 사용을 위해 프로토콜 버퍼를 개발했으며, 코드 생성기를 오픈 소스 라이선스 하에 여러 언어에 대해 제공한다.[38]
3. 2. 단점
프로토콜 버퍼는 다음과 같은 단점을 갖는다.- 가독성: 이진 형식으로 직렬화되므로 사람이 직접 읽기 어렵다.
- 자기 설명성 부족: 별도의 스키마 정의 없이는 필드 이름, 의미, 데이터 형식을 알 수 없다. 이러한 특징 때문에 C++ 클래스 및 구조체를 사용한 데이터 저장의 유력한 대체 수단으로도 사용된다.[36]
- 스트리밍 불가: 몇 메가바이트를 넘지 않고 즉시 메모리에 로드/전송할 수 있는 작은 데이터 덩어리에 가장 적합하며, 따라서 스트리밍 가능한 형식이 아니다.[9]
- 단일 규격 부재: 단일 규격을 가지고 있지 않다.[8]
- 압축 기능 미제공: 라이브러리는 압축 기능을 기본적으로 제공하지 않는다.
- 특정 언어 지원 부족: 객체 지향 언어가 아닌 언어(예: 포트란)에서는 제대로 지원되지 않는다.[10]
4. 구조
프로토콜 버퍼는 `.proto` 파일에 정의된 *메시지*를 기반으로 데이터를 직렬화한다.[36] 메시지는 필드(field)로 구성되며, 각 필드는 이름, 타입, 태그 번호를 갖는다. 필드 타입으로는 `int32`, `string`, `bool` 등 기본 타입과 다른 메시지를 사용할 수 있다. `repeated` 키워드를 사용하여 반복 필드를 정의할 수 있다.
데이터 구조 스키마(''메시지''라고 함)는 프로토 정의 파일(.proto
)에 설명되어 있으며, `protoc`으로 컴파일된다. 이 컴파일은 이러한 데이터 구조의 송신자 또는 수신자가 호출할 수 있는 코드를 생성한다. 일반적으로 메시지는 소형이며 전방 및 후방 호환성이 있지만 자기 설명은 아니다. 즉, 외부 사양 없이는 필드의 이름, 의미 또는 전체 데이터 형식을 알 수 없다.[6][7]
프로토콜 버퍼는 네트워크 통신을 용이하게 하는 것이 주 목적이지만, 단순성과 속도 때문에 데이터 중심의 C++ 클래스 및 구조체에 대한 대안이 될 수 있으며, 특히 다른 언어 또는 시스템과의 상호 운용성이 미래에 필요할 수 있는 경우에 유용하다.
특정 프로토콜 버퍼 사용에 대한 스키마는 각 필드를 식별하기 위해 정수를 사용하여 데이터 유형을 필드 이름과 연결한다. 프로토콜 버퍼 데이터에는 필드 이름이 포함되지 않고 숫자만 포함되어 있어, 데이터에 필드 이름을 포함하는 시스템에 비해 대역폭/저장 공간을 절약할 수 있다.
```protobuf
// polyline.proto
syntax = "proto2";
message Point {
required int32 x = 1;
required int32 y = 2;
optional string label = 3;
}
message Line {
required Point start = 1;
required Point end = 2;
optional string label = 3;
}
message Polyline {
repeated Point point = 1;
optional string label = 2;
}
```
위 코드는 `polyline.proto` 파일의 예시이다.
- "Point" 메시지는 ''x''와 ''y'' 두 개의 필수 데이터 항목을 정의한다.
- ''label'' 데이터 항목은 선택 사항이다.
- 각 데이터 항목에는 태그가 있으며, 등호 다음에 정의된다. (예: ''x''는 태그 1)
"Line" 및 "Polyline" 메시지는 Point를 사용하여 프로토콜 버퍼에서 구성이 어떻게 작동하는지 보여준다. Polyline은 ''repeated'' 필드를 가지므로 지정되지 않은 수의 점 집합처럼 동작한다.
4. 1. 인터페이스 정의 언어 (IDL)
프로토콜 버퍼는 자체적인 인터페이스 정의 언어(IDL)를 사용한다.[36] IDL은 `.proto` 파일에 데이터 구조와 서비스를 정의하는 데 사용된다.protobuf IDL은 형식을 정의한다. 각 언어의 형식이 protobuf 형식으로 변환되므로 인터페이스를 사이에 둔 형식 시스템의 차이를 의식하지 않고 값을 전달할 수 있다.
다양한 스칼라 형식을 지원하며 다음과 같다.[39]
- `bool`
- `string`
- `bytes`
- 수치 형식
효율성을 위해 고정 길이/가변 길이 인코딩을 형식 단계에서 표현한다. (예: `fixed32` 와 `int32`).
colspan="2" rowspan="2" | | 고정 길이 인코딩 | 가변 길이 인코딩 | |||
---|---|---|---|---|---|
32bit | 64bit | 32bit | 64bit | ||
부동 소수점 | `float` | `double` | |||
정수 | `fixed32` | `fixed64` | `int32` | `int64` | |
부호 없음 | `uint32` | `uint64` | |||
부호 있음 | `sfixed32` | `sfixed64` | `sint32` | `sint64` |
```protobuf
// polyline.proto
syntax = "proto2";
message Point {
required int32 x = 1;
required int32 y = 2;
optional string label = 3;
}
message Line {
required Point start = 1;
required Point end = 2;
optional string label = 3;
}
message Polyline {
repeated Point point = 1;
optional string label = 2;
}
```
위 코드는 `polyline.proto` 파일의 예시이다.
- "Point" 메시지는 ''x''와 ''y'' 두 개의 필수 데이터 항목을 정의한다.
- ''label'' 데이터 항목은 선택 사항이다.
- 각 데이터 항목에는 태그가 있으며, 등호 다음에 정의된다. (예: ''x''는 태그 1)
"Line" 및 "Polyline" 메시지는 Point를 사용하여 프로토콜 버퍼에서 구성이 어떻게 작동하는지 보여준다. Polyline은 ''repeated'' 필드를 가지므로 지정되지 않은 수의 점 집합처럼 동작한다.
이 스키마는 이후 하나 이상의 프로그래밍 언어에서 사용할 수 있도록 컴파일될 수 있다. 구글은 C++, Java 또는 Python에 대한 출력을 생성할 수 있는 `protoc`이라는 컴파일러를 제공한다. 다른 소스에서 다른 스키마 컴파일러를 사용하여 20개 이상의 다른 언어에 대한 언어 종속적 출력을 생성할 수 있다.[11]
```cpp
// polyline.cpp
#include "polyline.pb.h" // generated by calling "protoc polyline.proto"
Line* createNewLine(const std::string& name) {
// create a line from (10, 20) to (30, 40)
Line* line = new Line;
line->mutable_start()->set_x(10);
line->mutable_start()->set_y(20);
line->mutable_end()->set_x(30);
line->mutable_end()->set_y(40);
line->set_label(name);
return line;
}
Polyline* createNewPolyline() {
// create a polyline with points at (10,10) and (20,20)
Polyline* polyline = new Polyline;
Point* point1 = polyline->add_point();
point1->set_x(10);
point1->set_y(10);
Point* point2 = polyline->add_point();
point2->set_x(20);
point2->set_y(20);
return polyline;
}
```
위 코드는 `protoc polyline.proto` 명령어로 생성된 `polyline.pb.h` 파일을 포함하여 C++에서 메시지 객체를 사용하는 예시를 보여준다.
4. 2. 직렬화 형식
프로토콜 버퍼는 직렬화 형식으로서의 측면을 가진다.[36] 각 필드는 순서대로 인코딩되지만, 각 필드의 시작 부분에는 태그 번호와 3비트로 표현되는 유형이 붙는다.int32와 같은 정수를 인코딩하는 경우, 반드시 4바이트를 사용하지 않고 0에 가까운 숫자는 더 적은 바이트 수로 표현되는 가변 길이 숫자 표현을 이용한다. 7비트 이하로 표현할 수 있는 정수는 1바이트로 인코딩된다. int32와 int64의 인코딩 결과는 동일한 값이 된다. 태그 번호와 3비트 유형 종류도 마찬가지로 가변 길이 숫자 표현으로 인코딩된다. 단, fixed32, fixed64 등을 사용하면 고정 길이로 인코딩된다. 또한 float, double 등의 부동 소수점 수도 고정 길이로 인코딩된다.
문자열과 바이트 배열은 처음에 길이가 붙는 형태로 인코딩된다. 길이는 가변 길이 숫자 표현을 사용하기 때문에, 길이의 32비트 제한 등은 없다. 문자열은 UTF-8로 부호화한다.
가변 길이 숫자 표현은 숫자를 리틀 엔디안으로 표현하고 7비트 단위로 구분하며, 각 최상위 비트에 플래그를 세워 8비트 단위의 바이트 열로 변환한다. 최상위 비트는 최종 바이트만 0으로 하고, 그 외는 1을 세운다. 부호 있는 정수의 경우 지그재그 인코딩을 사용하여, 32비트의 경우 `(n << 1) ^ (n >> 31)`로 양수로 변환한 다음 가변 길이 숫자 표현을 사용한다. 두 가지를 병용하는 경우, -64 ~ 63이 1바이트, -8192 ~ 8191이 2바이트가 되며, 32비트 정수는 최장 5바이트로 표현된다.
5. 언어 지원
프로토콜 버퍼는 다양한 프로그래밍 언어를 지원한다. 공식적으로 지원되는 언어와 타사 구현을 통해 지원되는 언어로 나눌 수 있다.
6. 예제
protobuf
// polyline.proto
syntax = "proto2";
message Point {
required int32 x = 1;
required int32 y = 2;
optional string label = 3;
}
message Line {
required Point start = 1;
required Point end = 2;
optional string label = 3;
}
message Polyline {
repeated Point point = 1;
optional string label = 2;
}
```
"Point" 메시지는 ''x''와 ''y''라는 두 개의 필수 데이터 항목을 정의한다. ''label'' 데이터 항목은 선택 사항이다. 각 데이터 항목에는 태그가 있다. 태그는 등호 다음에 정의된다. 예를 들어, ''x''는 태그 1을 갖는다.
Point를 모두 사용하는 "Line" 및 "Polyline" 메시지는 프로토콜 버퍼에서 구성이 어떻게 작동하는지 보여준다. Polyline은 ''repeated'' 필드를 가지므로 Polyline은 (지정되지 않은 수의) 점 집합처럼 동작한다.
이 스키마는 이후 하나 이상의 프로그래밍 언어에서 사용할 수 있도록 컴파일될 수 있다. 구글은 C++, Java 또는 Python에 대한 출력을 생성할 수 있는 `protoc`이라는 컴파일러를 제공한다. 다른 소스에서 다른 스키마 컴파일러를 사용하여 20개 이상의 다른 언어에 대한 언어 종속적 출력을 생성할 수 있다.[11]
위 프로토콜 버퍼 스키마의 C++ 버전이 생성된 후, C++ 소스 코드 파일인 polyline.cpp는 다음과 같이 메시지 객체를 사용할 수 있다.
```cpp
// polyline.cpp
#include "polyline.pb.h" // protoc polyline.proto 명령을 호출하여 생성됨
Line* createNewLine(const std::string& name) {
// (10, 20)에서 (30, 40)으로의 선 생성
Line* line = new Line;
line->mutable_start()->set_x(10);
line->mutable_start()->set_y(20);
line->mutable_end()->set_x(30);
line->mutable_end()->set_y(40);
line->set_label(name);
return line;
}
Polyline* createNewPolyline() {
// (10,10)과 (20,20)에 점이 있는 폴리라인 생성
Polyline* polyline = new Polyline;
Point* point1 = polyline->add_point();
point1->set_x(10);
point1->set_y(10);
Point* point2 = polyline->add_point();
point2->set_x(20);
point2->set_y(20);
return polyline;
}
7. 활용 사례
구글에서 프로토콜 버퍼는 구조화된 정보를 저장하고 교환하는 데 널리 사용된다. 이 방식은 구글에서 거의 모든 머신 간 통신에 사용되는 사용자 지정 원격 프로시저 호출(RPC) 시스템의 기초가 된다.[4] gRPC는 프로토콜 버퍼를 기반 기술로 사용하는 프레임워크이다.[5]
프로토콜 버퍼는 아파치 스리프트(Apache Thrift), 이온(Ion), 마이크로소프트 본드(Microsoft Bond)와 같은 오픈 소스 프로젝트들과 유사하다.[5]
8. 한계
프로토콜 버퍼는 자체적인 규격이 없다.[8] 이 형식은 몇 메가바이트를 넘지 않는 작은 데이터 덩어리에 적합하며, 스트리밍 형식이 아니다.[9] 압축 기능을 기본적으로 제공하지 않는다. 객체 지향 언어가 아닌 언어(예: 포트란)에서는 제대로 지원되지 않는다.[10]
9. 기타
프로토콜 버퍼는 아파치 스리프트(Apache Thrift), 이온(Ion), 마이크로소프트 본드(Microsoft Bond) 프로토콜과 유사하며, gRPC라고 하는 정의된 서비스에 사용할 구체적인 RPC 프로토콜 스택을 제공한다.[5] 프로토콜 버퍼는 페이스북의 Thrift 프로토콜과 매우 유사하지만, 이미 존재하는 서비스를 위한 명확한 RPC 스택을 포함하지 않는 부분이 다르다. 프로토콜 버퍼는 오픈 소스이며, 이러한 갭을 메우기 위해 RPC 스택이 등장했다.
프로토콜 버퍼의 주요 목적은 네트워크 통신을 용이하게 하는 것이지만, 단순성과 속도 때문에 데이터 중심의 C++ 클래스 및 구조체에 대한 대안이 될 수 있으며, 특히 다른 언어 또는 시스템과의 상호 운용성이 미래에 필요할 수 있는 경우에 유용하다.
참조
[1]
웹사이트
Frequently Asked Questions
https://developers.g[...]
2016-10-02
[2]
웹사이트
Releases - google/protobuf
https://github.com/p[...]
[3]
웹사이트
jvm-serializers Benchmarks
https://github.com/e[...]
2010-07-12
[4]
웹사이트
A response to Steve Vinoski
http://steve.vinoski[...]
2008-07-14
[5]
웹사이트
grpc
http://www.grpc.io/
2016-10-02
[6]
웹사이트
text_format.h - Protocol Buffers - Google Code
http://code.google.c[...]
2012-03-02
[7]
웹사이트
Proto Best Practices
https://protobuf.dev[...]
2023-05-26
[8]
웹사이트
Overview
https://protobuf.dev[...]
2023-05-28
[9]
웹사이트
Overview
https://protobuf.dev[...]
2023-05-28
[10]
웹사이트
Overview
https://protobuf.dev[...]
2023-05-28
[11]
웹사이트
ThirdPartyAddOns - protobuf - Links to third-party add-ons. - Protocol Buffers - Google's data interchange format - Google Project Hosting
http://code.google.c[...]
2013-09-18
[12]
웹사이트
Protocol Buffers in C#
http://codeblockage.[...]
2017-05-12
[13]
웹사이트
Protocol Buffers Language Guide
https://developers.g[...]
2016-04-21
[14]
웹사이트
Language Guide (proto3)
https://developers.g[...]
2020-08-09
[15]
웹사이트
Release Protocol Buffers v3.0.0-beta-2 · protocolbuffers/protobuf
https://github.com/p[...]
2020-08-09
[16]
웹사이트
Ballerina - GRPC
https://ballerina.io[...]
2021-03-24
[17]
웹사이트
Nanopb - protocol buffers with small code size
https://jpa.kapsi.fi[...]
2017-12-12
[18]
웹사이트
Protocol Buffers implementation in C
https://github.com/p[...]
2017-12-12
[19]
웹사이트
Embedded Proto - Protobuf for microcontrollers
https://embeddedprot[...]
2021-08-15
[20]
웹사이트
Protox
https://github.com/a[...]
2021-10-25
[21]
웹사이트
Protobuf-elixir
https://github.com/e[...]
2021-10-26
[22]
웹사이트
Tomas-abrahamsson/GPB
https://github.com/t[...]
2021-10-19
[23]
웹사이트
Proto-lens
https://github.com/g[...]
2021-10-16
[24]
웹사이트
Protocol Buffers for JavaScript.
https://github.com/d[...]
github.com
2016-05-14
[25]
웹사이트
ThirdPartyAddOns - protobuf - Links to third-party add-ons. - Protocol Buffers - Google's data interchange format - Google Project Hosting
http://code.google.c[...]
2012-11-07
[26]
웹사이트
Protobuf implementation in pure Nim that leverages the power of the macro system to not depend on any external tools
https://github.com/P[...]
2021-10-21
[27]
웹사이트
SWI-Prolog: Google's Protocol Buffers Library
https://www.swi-prol[...]
[28]
웹사이트
SWI-Prolog / contrib-protobufs
https://github.com/S[...]
2022-04-21
[29]
웹사이트
RProtoBuf
https://github.com/e[...]
[30]
웹사이트
Rust-protobuf
https://github.com/s[...]
2021-10-26
[31]
웹사이트
PROST!
https://github.com/d[...]
2021-08-21
[32]
웹사이트
Quick-protobuf
https://github.com/t[...]
2021-10-12
[33]
웹사이트
ScalaPB
https://github.com/s[...]
2022-09-27
[34]
웹사이트
Swift Protobuf
https://github.com/a[...]
2021-10-26
[35]
문서
Protocol buffers provide ... mechanism for serializing structured data
https://developers.g[...]
Google
2022-12-30
[36]
간행물
Overview
https://developers.g[...]
Google
2022-12-30
[37]
웹사이트
Developer Guide - Protocol Buffers — Google Developers
https://developers.g[...]
[38]
웹사이트
Third-Party Add-ons for Protocol Buffers
https://code.google.[...]
[39]
간행물
Language Guide (proto3)
https://developers.g[...]
Google
2022-12-30
[40]
웹사이트
Steve Vinoskiへの返事(英語)
http://steve.vinoski[...]
2008-07-14
[41]
웹인용
Frequently Asked Questions
https://developers.g[...]
2016-10-02
[42]
웹인용
Releases - google/protobuf
https://github.com/p[...]
[43]
웹인용
Protocol Buffers Language Guide
https://developers.g[...]
2016-04-21
[44]
웹인용
Protocol Buffers for JavaScript.
https://github.com/d[...]
github.com
2016-05-14
[45]
웹인용
Protocol Buffers Language Guide (proto3)
https://developers.g[...]
2016-04-21
[46]
웹인용
Protocol Buffers v3.0.0-beta-2
https://github.com/g[...]
2016-05-14
[47]
웹인용
ThirdPartyAddOns - protobuf - Links to third-party add-ons. - Protocol Buffers - Google's data interchange format - Google Project Hosting
http://code.google.c[...]
Code.google.com
2012-11-07
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com