프로토콜버퍼 살펴보기
2021-09-19 15:59:29

개요

  • 프로토콜버퍼는 구글에서 만든 구조화된 데이터를 직렬화하는 방식을 의미 한다
  • 현재는 3(proto3)이 최신 문법이고 다양한 언어를 지원 한다
  • 파일 확장자는 .proto

작성

가볍게 봤으며 아래는 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
syntax = "proto3";

message ReqPost {
int64 writerId = 1;
string title = 2;
string content = 3;
string tag = 4;
}

message ResSinglePost {
int64 postId = 1;
int64 writerId = 2;
string title = 3;
string content = 4;
string tag = 5;
int64 createAt = 6;
int64 updateAt = 7;
}

message ResMultiplePost {
repeated ResSinglePost posts = 1;
}
  • syntax는 문법 버전을 표기, 현재는 3 이전에는 2 (proto2)
  • 하나의 메세지가 구조체 또는 Object라 생각하면 됨
  • 자료형, 키워드, 그리고 고유번호를 기입
  • Go 구조체처럼 안에 구조체를 선언하여(ResSinglePost 이 부분) 사용 가능
  • repeated는 배열을 의미

통신

  • 콘텐츠 헤더는 application/octet-stream
  • 바이너리 데이터로 통신을 하며 클라, 서버는 해당하는 proto 파일의 메세지로 디코딩

JSON과 비교

Express로 서버를 띄웠고 protobufjs를 사용하여 간단한 API 테스트를 해보았다

JSON

json

JSON으로 보냈을 시 서버에서 응답 받은 길이는 96Byte

protobuf

protobuf

Protoman을 이용해서 요청을 했고 서버에서 응답 받은 길이는 44Byte

느낀점

  • 프로토콜 버퍼를 사용하면 확실히 용량이 줄어든다 (네트워크 비용 절약?)
  • 크기가 줄었다고 빨라지진 않는다 오히려 인코딩,디코딩으로 인해 추가 시간 소모
  • 클라와 서버가 같은 언어이면, 예로 TS면 인터페이스를 공유하면 되므로 굳이 쓸?
  • 반대로 언어가 다르다면 고정해서 공유할 수 있으므로 나쁘지 않을 꺼 같다

참조

Prev
2021-09-19 15:59:29
Next