개요
TCP를 공부하면서 protobuf를 사용하는데, 사실 '그냥 그런 게 있는 갑다.' 하면서 쓰고 있는 중...
대충 JSON 형식이랑 비슷하게 생겼으니 데이터 구조 중 하나겠지...
하고 넘어가면 안된다!!!!!
이번 시간에는 protobuf를 확실히 짚고 넘어가는 시간을 가져보자!
Protocol Buffers (프로토콜 버퍼, Protobuf)
Google에서 개발한 언어 중립적이고 플랫폼 독립적인 데이터 직렬화(format serialization) 시스템. 주로 데이터 구조를 정의하고 이를 효율적으로 저장하거나 전송하기 위해 사용된다.
protobuf 는 다른 IDL (XML, JSON 등) 에 비해 더 작은 용량(이진 형식)으로 데이터를 저장할 수 있기 때문에, 네트워크 연결을 통해 더 빠르게 전송할 수 있다. 또한, protobuf는 확장되기 쉽도록 설계되어 빠르게 변화하는 데이터 구조와 새로운 기능을 처리하는데 아주 뛰어나다.
인터페이스 정의 언어 (Interface Description Language 또는 Interface Definition Language, IDL) 는 소프트웨어 컴포넌트의 인터페이스를 묘사하기 위한 명세 언어다. IDL은 어느 한 언어에 국한되지 않는 언어중립적인 방법으로 인터페이스를 표현함으로써, 같은 언어를 사용하지 않는 소프트웨어 컴포넌트 사이의 통신을 가능하게 한다.
protobuf: 데이터 → 바이너리 형식으로 저장.
XML, JSON: 데이터 → 텍스트 기반으로 저장.
이러한 이점으로 인해 Protocal Buffers는 분산시스템, 웹 서비스 및 모바일 앱에 점점 의존함으로써 개발자들에게 인기를 끌고 있다.
왜 사용할까?
- 효율성: Protobuf는 JSON이나 XML보다 더 작은 크기로 데이터를 직렬화할 수 있어, 네트워크 대역폭과 저장 공간을 절약할 수 있다.
- 속도: Protobuf는 바이너리 형식으로 데이터를 인코딩하기 때문에, 직렬화 및 역직렬화 과정에서 더 빠른 성능을 제공한다.
- 스키마 정의: Protobuf는 명확한 스키마(데이터 구조)를 정의할 수 있어, 데이터의 형태와 타입을 명시적으로 지정할 수 있다. 이는 데이터의 일관성을 높이고, 자동으로 유효성을 검사할 수 있게 해준다.
- 호환성: Protobuf는 데이터 구조의 버전 관리를 지원하여, 이전 버전의 데이터와의 호환성을 유지할 수 있다. 필드를 추가하거나 제거해도 기존 데이터와의 호환성을 쉽게 관리할 수 있다.
역할
- 데이터 직렬화: 데이터를 바이너리 형식으로 변환하여 저장하거나 전송할 수 있도록 한다. 예를 들어, 클라이언트와 서버 간의 통신에서 데이터를 효율적으로 주고받을 수 있게 한다.
- 데이터 구조 정의: .proto 파일을 사용하여 메시지 형식과 구조를 정의. 이는 코드 생성기와 함께 사용되어 다양한 프로그래밍 언어로 해당 구조에 맞는 클래스를 자동으로 생성한다.
- API 설계: Protobuf는 gRPC와 같은 원격 프로시저 호출(RPC) 시스템에서 API를 정의하는 데 사용된다. 이를 통해 서비스 간의 효율적인 통신을 지원한다.
Protobuf와 JSON의 차이점
- JSON보다 Protobuf에서 구조화된 데이터를 읽고 쓰는데 시간이 덜 걸린다.
- Protobuf는 JSON보다 작은 크기를 가진다. → Protobuf는 바이너리 형식 데이터이기 때문에.
- Protobuf는 오픈 소스이기에 JSON보다 플랫폼 호환성이 좋다.
https://appmaster.io/ko/blog/peurotobeopeuran-mueosibnigga
'Side Projects' 카테고리의 다른 글
TCP Multi-Player - 트러블 슈팅 (0) | 2024.11.05 |
---|---|
ORM / Low-Level Query (0) | 2024.10.29 |
Text-RPG(CLI) - 트러블슈팅 (1) | 2024.10.22 |
모듈 시스템에서 변수 바인딩 방식 (0) | 2024.10.11 |
Chrome dino 모작 - 트러블 슈팅 (1) | 2024.10.07 |