1. 프로토콜 버퍼(Protocol Buffer)란?
gRPC에서 사용되는 .proto를 사용하기에 앞서 프로토콜 버퍼에 대한 이해가 선행되어야 하는데, 프로토콜 버퍼는 흔히 볼수 있는 XML, JSON과 유사한 직렬화 데이터 구조이며 보통 protobuf로 줄여서 부릅니다.
직렬화란, 데이터 표현을 바이트 단위로 변환하는 작업을 의미합니다.
문자열 직렬화를 예로 들자면, hello라는 문자를 16진수로 인코딩을 해서 68 65 6C 6C 6F와 같은 형태로 표현하는 것을 말합니다.
위 그림은 json과 Protocol buffer를 사용한 직렬화의 차이를 나타낸 것인데
json: 82byte
protocol buffer: 33 byte
와 같은 차이가 납니다.
.proto 파일은 위와 같이 프로토콜 버퍼를 통해 직렬화 되며 통신을 위해 사용되는 포맷입니다.
2. 프로토콜 버퍼의 특징
기본적으로 json과 xml과 같은 포맷을 썼던 사람이라면 어? 그럼 protobuf 포맷을 사용해서 데이터를 주고 받으면 더 좋은 것이 아닌가? 하는 생각이 듭니다.
기본적으로 protobuf의 장점은 아래와 같습니다.
1) 통신이 빠릅니다.
같은 데이터를 보내더라도 데이터의 크기가 작아 같은 시간에 더 많은 데이터를 보낼 수 있고, 더 빠르게 보내질 수 있습니다.
2) 파싱을 할 필요가 없습니다.
json 포맷을 사용하게 되면 받은 데이터를 다시 객체로 파싱해서 사용하는데, protobuf를 사용하면 byte를 받아서 그 byte 그대로 메모리에 써버리고 객체 레퍼런스가 가리키는 형태로 사용하기 때문에 별도의 파싱이 필요가 없어집니다.
반대로 단점은 아래와 같습니다.
1) 인간이 읽기가 어렵습니다.
json 포맷은 사람이 읽기 편한 형태로 되어 있는데, .proto 파일이 없으면 의미를 알 수 없을 정도로 protobuf로 쓴 데이터는 사람이 읽기가 어렵습니다. 즉, .proto 파일이 반드시 있어야지 protobuf로 쓰여진 데이터를 읽을 수가 있다는 단점이 있습니다.
따라서 외부 API 통신에는 보통 사용되지 않고(각 클라이언트마다 .proto 파일이 있어야 합니다), 내부 서비스(Microservice 등)
2. proto문법을 배워야 합니다.
.proto파일은 json과 같이 key, value 쌍으로 단순하게 되어 있지 않고, 작성 방법에 따른 문법을 배워야하기 때문에 난이도가 있습니다.
'프로토콜 > gRPC' 카테고리의 다른 글
[C#] gRPC Server(Sevice) (0) | 2020.09.04 |
---|---|
[C#] gRPC Client (0) | 2020.09.03 |
[Java] gRPC Maven (2) | 2020.09.03 |
gRPC란? (0) | 2020.09.02 |