Protocol buffer

민정·2025년 7월 3일

gRPC

목록 보기
2/7

Protocol buffer Overview를 바탕으로 작성했다.


프로토콜 버퍼란?

  • 구조화된 데이터를 직렬화하는 데이터 포맷
  • 언어, 플랫폼에 대한 제약이 없으며 확장성이 높음
  • JSON과 유사
    • 데이터 구조화 및 직렬화를 위한 포맷이라는 점에서 유사
    • JSON과 비교했을 때 더 작고 빠름

정의

  • 데이터 구조를 .proto 파일로 직접 정의
  • .proto 파일을 컴파일해 소스 코드 생성
    • 소스 코드에서 다양한 데이터 스트림을 정의 가능
    • 소스 코드는 다양한 언어로 컴파일 가능

프로토콜 버퍼 구성 요소

  • 데이터 구조
    • .proto 파일에서 정의
  • proto 컴파일러가 생성하는 코드
    • .proto 파일을 원하는 언어로 컴파일
    • .proto 파일의 정의에 맞는 특정한 언어의 소스 코드가 자동으로 생성
  • 언어별 런타임 라이브러리
    • 각 언어에서 직렬화/역직렬화, 데이터 접근 등을 지원하는 라이브러리
  • 직렬화 형식
  • 직렬화된 데이터


프로토콜 버퍼의 이점

  • 컴팩트한 데이터 저장
  • 빠른 파싱
  • 다양한 프로그래밍 언어로 사용 가능
  • 자동 생성된 클래스를 통해 최적화된 기능

교차 언어 호환성

  • 프로토콜 버퍼는 여러 프로그래밍 언어에서 동일한 데이터 구조를 사용할 수 있도록 지원
  • 하나의 .proto 파일을 만들면, 해당 파일을 protoc 컴파일러로 다양한 언어(Java, Python 등)의 소스 코드를 생성할 수 있음
    • Java, Python으로 작성된 애플리케이션이 같은 .proto 파일 공유
    • Java 애플리케이션이 데이터를 .proto 정의에 따라 직렬화해서 Python 애플리케이션에 전송
    • Python 애플리케이션에서 해당 직렬화된 데이터를 받아서 동일한 구조로 값을 읽고 사용 가눙

코드를 업데이트하지 않고 Proto 정의 업데이트

  • .proto 파일을 수정해도 기존 코드를 사용해서 문제없이 새 메시지를 읽을 수 있음
  • 버전 간 호환성이 뛰어남


프로토콜 버퍼가 부적합한 경우

  • 메시지 크기가 너무 큰 경우
    - 프로토콜 버퍼는 전체 메시지를 한 번에 모두 메모리로 불러옴
    - 데이터가 몇 메가바이트 이상으로 너무 크면 메모리 사용량이 급격히 증가
  • 압축이 필요할 때
    • 프로토콜 버퍼 메시지는 기본적으로 압축되지 않음
    • 일반적인 압축(zip, gzip 등)은 사용 가능
    • 이미지(JPEG, PNG 등)처럼 특수한 압축이 필요한 데이터에는 다른 포맷 사용 권장
  • 자체적으로 데이터 구조를 설명하지 않음
    • 메시지를 해석하려면 반드시 해당 .proto 파일이 필요
  • 공식 표준이 아님
    - 프로토콜 버퍼는 어떤 국제 표준 기구에서 정한 공식 표준이 아님


핵심 정리

  • 프로토콜 버퍼는 데이터 구조화 및 직렬화를 위한 데이터 포맷
  • .proto 파일을 통해 자체적으로 데이터 구조 정의
  • .proto 파일을 여러 언어로 컴파일 가능, 컴파일을 통해 만들어진 소스 코드를 사용
  • 같은 .proto 파일, 다른 언어를 사용하는 다른 애플리케이션 간 같은 메시지 구조로 통신 가능
profile
시스템 + 리눅스 + 클라우드

0개의 댓글