protocol buffer
Protocol Buffers is a free and open source cross-platform library used to serialize structured data
https://en.wikipedia.org/wiki/Protocol_Buffers
데이터를 직렬화할 때 사용하는 오픈소스 라이브러리이다.
메시지 타입 정의
search request에 대한 예제 .proto 파일
syntax = "proto3";
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 result_per_page = 3;
}
- SearchRequest라는 이름의 message를 정의
- message는 데이터를 나타내는 필드를 다음과 같이 작성한다.
Type Name = Unique Number;
- 여기서 Unique Number는 이진 형식의 필드를 식별하는 데 사용되며 사용중일때 변경하면 안됨
- Unique Number 1-15 값은 1바이트를 사용, 16-2047 값은 2바이트를 사용
* https://developers.google.com/protocol-buffers/docs/encoding#structure 자세한 인코딩 내용 참고
필드 rule
- 메시지 필드는 2개의 rule을 가지게 됨
- singular: (default) 해당 필드를 0개, 1개만 가질 수 있음
- repeated: 해당 필드를 여러번 반복할 수 있다.
: repeated는 언제쓰이는걸까..?
예약 필드
- 필드 넘버나 이름을 지정하여 예약할 수 있음
- 이전에 Unique Number가 사용중일때는 변경하면 안된다고 했다. 따라서 proto 파일을 통해 새로 나만의 메시지를 만들거나 할 때 reserved field를 사용하면됨
예시
message Foo {
reserved 2, 15, 9 to 11;
reserved "foo", "bar";
}
compile .proto
protocol buffer compiler를 통해 .proto 파일을 컴파일 하게되면 선택한 언어로 코드를 생성하는데 다음을 포함한다.
- getting, setting field values
- serializing messages to an output stream
- parsing messsages from an input stream
예시 (go)
syntax = "proto3";
package pb;
option go_package = "pb/;pb";
service Vault {
rpc Hash(HashRequest) returns (HashResponse) {}
rpc Validate(ValidateRequest) returns (ValidateResponse) {}
}
message HashRequest {
string password = 1;
}
message HashResponse {
string hash = 1;
string err = 2;
}
message ValidateRequest {
string password = 1;
string hash = 2;
}
message ValidateResponse {
bool valid = 1;
}
다음과 같이 .proto 파일로 메시지 및 서비스를 정의하고,
protoc --go_out=. --go-grpc_out=. --go-grpc_opt=paths=source_relative pb/vault.proto
다음과 같이 compile을 진행해주면...
다음과 같이 2개의 go 파일 (코드)가 생성되고, 직접 활용할 수 있다.
1/3 정도 정리했다.. 꽤나 내용이 많아서 차근차근 정리하겠다.
** reference : https://developers.google.com/protocol-buffers/docs/proto3
'etc' 카테고리의 다른 글
[gRPC] gRPC 간단 정리 (0) | 2021.08.03 |
---|