0Pricing
gRPC & High Performance APIs · 강의

Protobuf 스키마 정의

강한 타입을 적용할 수 있도록 Protocol Buffers(Protobuf) 문법으로 메시지와 서비스를 정의하는 방법을 배웁니다.

Protobuf 스키마 정의은(는) CoddyKit의 무료 gRPC & High Performance APIs 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 gRPC & High Performance APIs 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. gRPC & High Performance APIs 강의에는 총 4개의 강의가 포함되어 있습니다.

이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.

What are Protocol Buffers?

Welcome! In this lesson, we'll dive into Protocol Buffers, often called Protobuf. It's a key technology for gRPC.

  • Protobuf is a language-neutral, platform-neutral, extensible mechanism for serializing structured data. Think of it as a highly efficient way to define and exchange data.
  • It's like JSON or XML, but smaller, faster, and simpler.
  • gRPC uses Protobuf to define the service interface and the structure of the payload messages.

The .proto File

Protobuf schemas are defined in special files ending with the .proto extension. These files act as contracts for your data.

  • Every .proto file starts with a syntax declaration, usually syntax = "proto3";. This tells the Protobuf compiler which version of the syntax to use.
  • It's crucial for forward and backward compatibility.
syntax = "proto3";

// Your Protobuf definitions go here

Defining Your First Message

In Protobuf, a message is a structured record of information. It's similar to a class in object-oriented programming or a struct in C.

You define a message using the message keyword, followed by its name and a body containing its fields.

syntax = "proto3";

message MyMessage {
  // fields will go here
}

Fields, Types & Numbers

Inside a message, you define fields, each with a specific data type and a unique field number.

  • Data Type: Specifies the type of data (e.g., string, int32, bool).
  • Field Name: A unique identifier for the field within the message.
  • Field Number: A unique, positive integer tag (from 1 to 229-1). These numbers are critical for identifying fields in the binary format and must remain stable for compatibility.

Common Scalar Data Types

Protobuf supports a range of scalar data types. Here are some of the most common ones:

  • int32, int64: Integer numbers.
  • float, double: Floating-point numbers.
  • bool: Boolean (true/false).
  • string: UTF-8 encoded text.
  • bytes: Raw byte sequences.

Choose the type that best fits your data to optimize storage and transmission.

Example: A Simple Person Message

Let's define a Person message with a few common fields. Notice the unique field numbers assigned to each field.

These numbers are like unique IDs for your data pieces. If you change a field's name, its number must stay the same for older systems to understand it.

syntax = "proto3";

message Person {
  string name = 1;
  int32 age = 2;
  bool is_active = 3;
}

Using Enums for Fixed Choices

Sometimes you need a field to have a value from a predefined list of options. This is where enums come in handy.

  • Enums define a set of named integer constants.
  • The first value in an enum must be 0, as it's the default value when a field isn't set.
syntax = "proto3";

enum UserRole {
  GUEST = 0;
  MEMBER = 1;
  ADMIN = 2;
}

Example: User Message with Role

Now, let's create a User message and include our UserRole enum as a field. This ensures that the user's role can only be one of the defined values.

It provides strong typing and prevents invalid data from being sent.

syntax = "proto3";

enum UserRole {
  GUEST = 0;
  MEMBER = 1;
  ADMIN = 2;
}

message User {
  string id = 1;
  string username = 2;
  UserRole role = 3;
}

Nesting Messages for Structure

For more complex data, you can nest messages within other messages. This helps organize your schema and represent hierarchical data naturally.

Think of it like having an object inside another object in programming languages.

syntax = "proto3";

message UserProfile {
  string email = 1;
  message Address {
    string street = 1;
    string city = 2;
    string zip_code = 3;
  }
  Address home_address = 2;
}

Quick Check: Protobuf Basics

Consider the following Protobuf message definition:

syntax = "proto3";

message Product {
  string name = 1;
  int32 price_cents = 2;
  bool in_stock = 3;
  enum ProductCategory {
    ELECTRONICS = 0;
    BOOKS = 1;
    CLOTHING = 2;
  }
  ProductCategory category = 4;
}

Recap: Protobuf Schema

Great job! You've learned the fundamentals of defining Protobuf schemas:

  • .proto Files: The contract for your data.
  • Messages: Structured data definitions, similar to classes.
  • Fields: Each has a type, name, and unique field number.
  • Scalar Types: Common types like string, int32, bool.
  • Enums: For predefined sets of values, starting with 0.
  • Nesting: Organizing complex data by embedding messages.

Next, we'll see how to turn these definitions into code!

자주 묻는 질문

“Protobuf 스키마 정의” 강의는 무료인가요?

네 — “Protobuf 스키마 정의” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 gRPC & High Performance APIs 강의 전체를 잠금 해제할 수 있습니다. gRPC & High Performance APIs 강의에는 총 4개의 강의가 포함되어 있습니다.

“Protobuf 스키마 정의”에서 뭘 배우나요?

강한 타입을 적용할 수 있도록 Protocol Buffers(Protobuf) 문법으로 메시지와 서비스를 정의하는 방법을 배웁니다. 브라우저에서 직접 실행하는 실습 코드로 gRPC & High Performance APIs을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

gRPC & High Performance APIs을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 gRPC & High Performance APIs은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“Protobuf 스키마 정의” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 gRPC & High Performance APIs 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 gRPC & High Performance APIs 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Protobuf 스키마 정의
  2. gRPC 코드 생성
  3. 간단한 단항 gRPC 서비스
  4. 스트리밍 RPC: 서버, 클라이언트 및 양방향
← gRPC & High Performance APIs(으)로 돌아가기