1. 프로토콜 버퍼란?
구글에서 개발한 데이터 직렬화 구조. 데이터를 주고 받을 때 JSON보다 더 효율적으로 정의하고 압축한다.
언어와 플랫폼에 중림적이다. 포맷을 정하기만 하면 컴파일시 C++, Java, Python등에서 이용 가능.
2. Type
Java Type | Proto Type |
int | int32/sint32 |
long | int64/sint64 |
float | float |
double | double |
boolean | bool |
String | string |
byte[] | bytes |
*sint means signed int (음수, 양수 모두 허용)
3. JSON 과 속도차이
- JSON을 ObjectMapper로 직렬화/역직렬화 하는것과 굉장한 차이가 난다. (거의 8배)
*자바는 cold start problem 때문에 첫번째 테스트 결과는 신뢰하기 힘드니 여러번 하는 것이 좋다.
20:06:28.775 [main] INFO com.example.sec03.Lec03PerformanceTest -- time taken for ProtoBuf: 355 ms
20:06:30.566 [main] INFO com.example.sec03.Lec03PerformanceTest -- time taken for Json: 1784 ms
20:06:30.567 [main] INFO com.example.sec03.Lec03PerformanceTest -- =====================================
20:06:30.709 [main] INFO com.example.sec03.Lec03PerformanceTest -- time taken for ProtoBuf: 142 ms
20:06:31.816 [main] INFO com.example.sec03.Lec03PerformanceTest -- time taken for Json: 1106 ms
20:06:31.817 [main] INFO com.example.sec03.Lec03PerformanceTest -- =====================================
20:06:31.962 [main] INFO com.example.sec03.Lec03PerformanceTest -- time taken for ProtoBuf: 145 ms
20:06:33.052 [main] INFO com.example.sec03.Lec03PerformanceTest -- time taken for Json: 1090 ms
20:06:33.052 [main] INFO com.example.sec03.Lec03PerformanceTest -- =====================================
20:06:33.195 [main] INFO com.example.sec03.Lec03PerformanceTest -- time taken for ProtoBuf: 143 ms
20:06:34.327 [main] INFO com.example.sec03.Lec03PerformanceTest -- time taken for Json: 1132 ms
20:06:34.327 [main] INFO com.example.sec03.Lec03PerformanceTest -- =====================================
20:06:34.463 [main] INFO com.example.sec03.Lec03PerformanceTest -- time taken for ProtoBuf: 136 ms
20:06:35.515 [main] INFO com.example.sec03.Lec03PerformanceTest -- time taken for Json: 1052 ms
20:06:35.515 [main] INFO com.example.sec03.Lec03PerformanceTest -- =====================================
- 직렬화된 바이트의 길이도 차이가 크다.
20:13:48.300 [main] INFO com.example.sec03.Lec03PerformanceTest -- json bytes length: 128
20:13:48.355 [main] INFO com.example.sec03.Lec03PerformanceTest -- proto bytes length: 40
출처:
https://www.markany.com/blog/weekly-markany-5-protobuf/
Udemy:
'Build > MSA' 카테고리의 다른 글
캐싱을 도입했다가 철회한 경우들. (0) | 2024.12.03 |
---|---|
로드 밸런싱, 하다보면 결국 MSA하고 싶어지지 않을까? (0) | 2024.07.31 |
자바, 스프링 내부망 통신 1편: 서버간 통신에 쓰일 라이브러리 (0) | 2024.07.31 |
최소한의 AWS 보안: Bastion Host (1) | 2024.07.22 |