원문
기본 https://developers.google.com/protocol-buffers
문법 https://developers.google.com/protocol-buffers/docs/proto3
go 튜토리얼 https://developers.google.com/protocol-buffers/docs/gotutorial
protocol buffer 란
구글에서 개발하고 오픈소스로 공개한 직렬화된 데이터 구조입니다.
다음과 같은 특징을 갖습니다.
- C++, c#, java, python, object c, javascript, php, go 등 다양한 언어를 지원합니다.
- 직렬화 속도가 빠르며, 용량이 적습니다.
- 직렬화 데이터를 파싱할 필요가 없습니다. 데이터를 객체를 그대로 사용 할 수 있습니다.
- proto 문법 학습이 필요합니다.
- gRPC 에서도 메시지 전달 방식을 protocol buffer 로 사용하고 있어 숙지한다면 gRPC도 쉽게 접근이 가능합니다.
직렬화: 파일을 바이너리 스트림 형태로 저장하는 행위
구성 및 사용
proto
문법으로 데이터 포맷을 작성합니다.protoc
를 통해 원하는 프로그래밍 언어 형식의 데이터 파일을 생산합니다.- 개발하고자 하는 언어에서 제공되는
protocol buffer API
를 사용한다.
protoc 컴파일러 설치
컴파일러와 언어별 SDK 를 아래 사이트에서 다운받을 수 있습니다.
https://github.com/protocolbuffers/protobuf/releases
protoc-3.11.4-win64.zip
cmd 또는 bash 에서 protoc 를 인식할 수 있도록 환경변수를 셋팅해야합니다.
1 | $ protoc --version |
.proto 파일 작성
go 를 활용한 예제
.proto 파일 작성
/unit/pencil.proto
1 | syntax = "proto3"; |
protoc-gen-go 의존성 설치
go
에서는 .proto
파일을 protoc
하기위해 별도 의존성을 따로 제공하고 있습니다.
1 | $ go install google.golang.org/protobuf/cmd/protoc-gen-go |
protoc 로 컴파일
1 | $ cd unit |
컴파일 이후 아래 /unit/pancil.pb.go
파일이 생성된것을 확인할 수 있습니다.
go 직렬화 & 역직렬화
mod init
1 | $ go mod init protocol_buffer |
code
1 | package main |
Run & Result
1 | $ go run main.go |
직렬화된 파일
/pencil
1 |
|
사람이 읽을 수 없도록 인코딩 되어있습니다.