본문 바로가기
gRPC

프로토콜 버퍼 스타일 가이드 (Protocol Buffers Style Guide)

by jayden-lee 2019. 4. 5.
728x90

회사에서 GRPC 프레임워크를 사용해서 프로젝트를 진행하면서 프로토콜 버퍼를 사용하고 있다. 프로토콜 버퍼는 구글이 만든 오픈소스로 언어와 플랫폼에 종속적이지 않은 구조화된 데이터를 직렬화하는 포맷이다. 이번에 살펴볼 내용은 프로토콜 버퍼 스타일 가이드이다. 공식 문서에 있는 내용을 번역한 글이다.

프로토 파일

프로토(.proto) 파일에 데이터를 구성하기 위한 메시지와 서비스를 정의하고, 컴파일을 하면 각 언어에 맞는 소스 코드가 생성된다. 아래 소스 코드는 간단하게 프로토 파일을 작성한 형태이다.

syntax = "proto3";

option java_multiple_files = true;
option java_package = "com.jayden.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";

package helloworld;

// 서비스 정의
service Greeter {
    rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
    string name = 1;
}

message HelloResponse {
    string message = 1;
}

메시지와 필드 이름

메시지 이름은 CamelCase(단, 처음 문자는 대문자로) 사용한다. 필드의 이름은 밑줄(_) 문자를 이용해서 작성한다. required 키워드는 proto3에서 지원하지 않는다.

message SongServerRequest {  
 string song_name = 1;  
}

문서에서는 따로 설명이 없었지만 주로 메시지를 정의할 때, 다음과 같은 명명 규칙을 사용한다. 요청에 해당하면 XXRequest로 작성하고, 응답에 해당하면 XXResponse로 작성해서 두 개의 메시지를 쉽게 구분할 수 있다.

프로토 파일을 컴파일하면, SongServerRequest 메시지의 필드 접근자는 다음 형태로 생성된다.

public String getSongName() { ... }  
public Builder setSongName(String v) { ... }

열거타입

열거 타입 이름은 CamelCase(단, 처음 문자는 대문자로) 사용한다. 그리고 값 이름에 대해서는 대문자와 밑줄(_)을 사용한다. 열거 타입 값은 0부터 시작하며, 각 값마다 콤마(,)가 아닌 세미콜론(;)으로 구분한다.

enum Foo {  
 FIRST_VALUE = 0;  
 SECOND_VALUE = 1;  
}

서비스

프로토(.proto) 파일에 RPC 서비스를 정의할 때, 서비스 이름과 RPC 메서드 모두 카멜 케이스(단, 처음 문자는 대문자)로 사용한다.

service FooService {  
 rpc GetSomething(FooRequest) returns (FooResponse);  
}

참고 문서

'gRPC' 카테고리의 다른 글

Java GRPC Quick Start  (0) 2020.02.05

댓글