프로토콜버퍼 살펴보기
2021-09-19 15:59:29
개요
- 프로토콜버퍼는 구글에서 만든 구조화된 데이터를 직렬화하는 방식을 의미 한다
- 현재는 3(proto3)이 최신 문법이고 다양한 언어를 지원 한다
- 파일 확장자는 .proto
작성
가볍게 봤으며 아래는 예시
1 | syntax = "proto3"; |
- syntax는 문법 버전을 표기, 현재는 3 이전에는 2 (proto2)
- 하나의 메세지가 구조체 또는 Object라 생각하면 됨
- 자료형, 키워드, 그리고 고유번호를 기입
- Go 구조체처럼 안에 구조체를 선언하여(ResSinglePost 이 부분) 사용 가능
- repeated는 배열을 의미
통신
- 콘텐츠 헤더는 application/octet-stream
- 바이너리 데이터로 통신을 하며 클라, 서버는 해당하는 proto 파일의 메세지로 디코딩
JSON과 비교
Express로 서버를 띄웠고 protobufjs를 사용하여 간단한 API 테스트를 해보았다
JSON
JSON으로 보냈을 시 서버에서 응답 받은 길이는 96Byte
protobuf
Protoman을 이용해서 요청을 했고 서버에서 응답 받은 길이는 44Byte
느낀점
- 프로토콜 버퍼를 사용하면 확실히 용량이 줄어든다 (네트워크 비용 절약?)
- 크기가 줄었다고 빨라지진 않는다 오히려 인코딩,디코딩으로 인해 추가 시간 소모
- 클라와 서버가 같은 언어이면, 예로 TS면 인터페이스를 공유하면 되므로 굳이 쓸?
- 반대로 언어가 다르다면 고정해서 공유할 수 있으므로 나쁘지 않을 꺼 같다
참조