[CS] JSON/XML vs Protobuf

무지성개발자·2023년 8월 30일
0

Intro

  • 직렬화(Serialize) : 객체 상태를 전송 할 수 있는 형식(xml/json/protobuf)으로 변환하는 것을 뜻함.
  • 역직렬화(Deserialize) : 표현 형식(xml/json/protobuf)에서 객체 상태로 변환하는 것을 뜻함.

JSON/XML vs Protobuf

xml

<velog>
    <title>Article</name>
    <type>xml</type>
</velog>
  • 사람이 읽기/편집 가능.
  • 스키마를 미리 알지 않고도 구문 분석 가능.
  • SOAP 등의 표준.
  • 좋은 도구 지원(xsd, xslt, sax, dom 등).

JSON

velog : {
  title : "Article",
  type : "json",
}
  • 사람이 읽기/편집 가능.
  • 스키마를 미리 알지 않고도 구문 분석 가능.
  • 뛰어난 브라우저 지원.
  • XML보다 보기 편함.

Protobuf

message velog {
  required string title = "Article";
  optional string type = "protobuf";
}
  • 매우 조밀한 데이터(small output).
  • 스키마를 모르면 강력하게 디코딩하기 어려움.
    • 데이터 형식은 내부적으로 모호하며 명확히 하기 위해 스키마가 필요함.
  • 처리 속도가 매우 빠름.
  • 사람이 보기 불편함.

Protobuf가 json/xml보다 좋은 점

  • Protobuf 형식은 json/xml에 비해 데이터 구조를 표현하는 데 더 작고 빠름.
  • Protobuf는 구문 분석을 효율적이고 단순화한 스키마를 사전에 정의하여 사용.
    • json/xml은 문자열로 데이터를 교환한 다음 파서를 사용하여 검색하는 동안 이를 구문 분석.
    • 처리 및 메모리 소비 측면에서 비용이 많이 들 수 있음.
  • json 문자열, 배열 및 객체를 구문 분석하려면 순차 스캔이 필요. 즉, 본문 헤더에 대한 요소 크기나 갯수가 정해 져있지 않음. 다중 계층 구조 문서인 xml도 마찬가지.

근데 왜 아직도 json/xml을 사용할까

  • xml/json에 비해 protobuf의 러닝커브가 높음.
  • json/xml은 사람이 읽을 수 있고 편집할 수 있는 형식.
  • 웹 브라우저에 사용되는 어플리케이션은 protobuf가 적합하지 않음.
  • 웹 서비스가 데이터 모델을 protobuf에 연결할 준비가 되지 않은 경우는 별로 쓸모가 없음.

언제 Protobuf를 사용을 고려할까

  • 웹 서비스 간 통신에 사용하는 것을 고려.
  • 데이터의 크기가 MB 단위 정도 되며 혼합 유형의 데이터가 있는 경우.
    • protobuf는 xml/json에 비해 인코딩 및 디코딩 속도가 더 빠르기 때문에 성능 측면에서 도움됨.
    • 데이터가 GB 단위로 큰 경우 protobug/json/xml 중 어떤걸 선택해도 압축을 하는게 도움이 됨. 하지만 이러한 경우에도 gzip으로 압축된 protobuf가 확실히 더 좋음.
  • 이중 디코딩이 필요한 경우 protobuf는 JSON보다 훨씬 빠른 것으로 입증됨.
  • 웹 서비스가 기존 REST 프레임워크 대신 gRpc를 사용하도록 전환된 경우 protobuf사용 권장.

한 줄평 : 일반적으로 서버간의 통신에서는 protobuf를 사용하는 걸 고려해야할지 싶다.

참고 -
https://sprinkle-twinkles.medium.com/what-is-protobuf-and-when-to-consider-it-over-xml-json-for-web-services-communication-d91158b57d4a
https://stackoverflow.com/questions/14028293/google-protocol-buffers-vs-json-vs-xml

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글