{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name                   = 프로토콜 버퍼
| logo                   = 
| developer              = [[구글]]
| released               = 2001년 초 (내부)<ref name="faq">{{웹 인용|title=Frequently Asked Questions {{!}} Protocol Buffers|url=https://developers.google.com/protocol-buffers/docs/faq|website=[[Google Developers]]|accessdate=2 October 2016}}</ref><br>{{시작 날짜와 나이|2008|7|7}} (공개)
| latest release version = {{wikidata|property|edit|P348}}
| latest release date = {{시작 날짜와 나이|{{wikidata|qualifier|P348|P577}}|df=yes}}<ref name="github-releases">{{웹 인용|url=https://github.com/protocolbuffers/protobuf/releases|via=[[GitHub]]|title=Releases - google/protobuf}}</ref>
| operating_system       = 전체
| platform               = [[크로스 플랫폼]]
| status                 = 지원 중
| genre                  = 직렬화 포맷 및 라이브러리, [[인터페이스 정의 언어|IDL]] 컴파일러
| license                = [[BSD 라이선스|BSD]]
| website                = {{URL|https://developers.google.com/protocol-buffers/}}
}}
'''프로토콜 버퍼'''(Protocol Buffers, Protobuf)는 구조화된 데이터를 [[직렬화]]하는 방식이다. 유선이나 데이터 저장을 목적으로 서로 통신할 프로그램을 개발할 때 유용하다.

== 예 ==
<syntaxhighlight lang="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;
}
</syntaxhighlight>

위에서 C++ 버전의 프로토콜 버퍼 스키마를 만든 다음 C++ 소스 코드 파일 polyline.cpp은 아래와 같은 메시지 오브젝트를 사용할 수 있다:
<syntaxhighlight lang="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;
}
</syntaxhighlight>

== 언어 지원 ==
'''proto2'''는 [[C++]], [[자바 (프로그래밍 언어)|자바]], [[파이썬]]을 위한 [[코드 생성|코드 생성기]]를 제공한다.<ref>{{웹 인용| title = Protocol Buffers Language Guide| work = Google Developers| accessdate = 2016-04-21| url = https://developers.google.com/protocol-buffers/docs/proto}}</ref>

타사 구현체는 자바스크립트를 지원한다.<ref>{{웹 인용|url=https://github.com/dcodeIO/protobuf.js |title=Protocol Buffers for JavaScript. |publisher=github.com |date= |accessdate=2016-05-14}}</ref>

'''proto3'''는 [[C++]], [[자바 (프로그래밍 언어)|자바]](자바나노 포함), [[파이썬]], [[Go (프로그래밍 언어)|Go]], [[루비 (프로그래밍 언어)|루비]], [[오브젝티브-C]], [[C 샤프|C#]]를 위한 코드 생성기를 제공한다<ref>{{웹 인용| title = Protocol Buffers Language Guide (proto3)| work = Google Developers| accessdate = 2016-04-21| url = https://developers.google.com/protocol-buffers/docs/proto3}}</ref>. 3.0.0 베타 2부터 자바스크립트를 지원한다.<ref>{{웹 인용| title = Protocol Buffers v3.0.0-beta-2| work = Google Developers| accessdate = 2016-05-14| url = https://github.com/google/protobuf/releases/tag/v3.0.0-beta-2}}</ref>

타사 구현체는 [[펄]], PHP, 스칼라, [[줄리아]]를 지원한다.<ref>{{웹 인용|url=http://code.google.com/p/protobuf/wiki/ThirdPartyAddOns |title=ThirdPartyAddOns - protobuf - Links to third-party add-ons. - Protocol Buffers - Google's data interchange format - Google Project Hosting |publisher=Code.google.com |date= |accessdate=2012-11-07}}</ref>

== 같이 보기 ==
* [[GRPC]]
* [[ASN.1]]
== 각주 ==
{{각주}}

== 외부 링크 ==
* {{언어링크|en}} [https://developers.google.com/protocol-buffers/ Official documentation] at developers.google.com
* {{언어링크|en}} [https://github.com/google/protobuf Official project page] at Github project hosting

{{데이터 교환}}
{{토막글|소프트웨어}}

[[분류:데이터 직렬화 포맷]]
[[분류:구글의 소프트웨어]]