티스토리 뷰

📡 프로토콜 버퍼 (Protocol Buffers)

  프로토콜 버퍼는 구조화된 데이터를 직렬화하는 방식으로, 구글에서 개발하으며 gRPC에서 데이터를 주고받기 위해 기본으로 사용되는 방식입니다.

 

  프로토콜 버퍼는 다음과 같은 주요 특징을 가지고 있습니다.

 

  1. 효율적인 이진 직렬화: 다른 형식(XML 또는 JSON)에 비해 더 작은 데이터 크기로 더 빠른 데이터 전송 및 저장이 가능합니다.
  2. 스키마 정의: '.proto' 파일을 사용하여 프로토콜 버퍼 메시지를 스키마로 정의할 수 있습니다.
  3. 다양한 언어 지원: 현재 프로토콜 버퍼는 C++, Java, Python, Go 등 총 11개 언어로의 컴파일을 지원하고 있습니다.
  4. 업데이트 및 상호 호환성: 데이터 스키마에 새 필드를 추가하거나 수정 또는 제거하는 업데이트가 이루어지더라도, 기존 데이터와의 상호 호환성이 유지됩니다. 예를 들어, 추가되거나 제거된 필드는 기본값을 가지고 repeated 필드인 경우 빈 값을 가집니다.

📜 프로토콜 버퍼 파일(.proto) 구성

1. 문법 지정

 .proto 파일의 최상단에 사용할 프로토콜 버퍼 문법을 지정합니다. 사용할 수 있는 문법에는 'proto2'와 'proto3'가 있는데 일반적으로 'proto3'을 사용합니다.

syntax = "proto3";

2. 패키지 지정

 패키지는 .proto 파일이 속하는 네임스페이스를 정의합니다. 패키지는 다른 .proto 파일과 동일한 프로토콜 버퍼 메시지를 정의한 경우 이들을 구분하기 위해 사용합니다.

package todo.v1;

3. 열거형 정의

 열거형은 'enum' 키워드로 시작하여 상수를 정의하는데 사용합니다. 중괄호 '{}' 내에서 상수 이름에 해당하는 값을 지정할 수 있습니다.

enum Priority {
    UNKNOWN = 0;
    LOW = 1;
    MEDIUM = 2;
    HIGH = 3;
}

3. 메시지 정의

 메시지는 데이터 구조를 설명하는 가장 중요한 부분으로, 'message' 키워드로 시작합니다. 중괄호 '{}' 내에 필드 정의를 포함하며, 각 필드는 이름 그리고 고유한 번호로 구성됩니다.

message Todo {
    string id = 1;
    string title = 2;
    string description = 3;
    Priority priority = 4;
    bool done = 5;
}

4. 서비스 정의

 서비스는 RPC 메서드를 정의합니다. RPC 메서드에는 Unary, Client Streaming, Server Streaming 그리고 Bidirectional Streaming 네 가지 형태가 존재합니다.

service TodoService {
    rpc Create(CreateTodoRequest) returns (Todo);
    rpc CreateMany(stream CreateTodoRequest) returns (stream Todo);
    rpc Get(GetTodoRequest) returns (Todo);
    rpc GetAll(Empty) returns (stream Todo);
    rpc Update(UpdateTodoRequest) returns (UpdateTodoResponse);
    rpc UpdateMany(stream UpdateTodoRequest) returns (UpdateTodoResponse);
    rpc Delete(DeleteTodoRequest) returns (DeleteTodoResponse);
    rpc DeleteAll(Empty) returns (DeleteTodoResponse);
}

5. 주석

 두 개의 슬래시 (//) 또는 /*와 */ 사이에 주석을 추가하여 스키마와 필드에 대한 설명을 제공할 수 있습니다.

// this is a comment
/* this is a comment */

📖 참고자료

 

Overview

Protocol Buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured data.

protobuf.dev

 

Core concepts, architecture and lifecycle

An introduction to key gRPC concepts, with an overview of gRPC architecture and RPC life cycle.

grpc.io

글에서 수정이 필요한 부분이나 설명이 부족한 부분이 있다면 댓글로 남겨주세요!
최근에 올라온 글
최근에 달린 댓글
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Total
Today
Yesterday
글 보관함