<클론받은 프로젝트를 함께 봐주세요>
.proto 파일은 Protocol Buffers(줄여서 Protobuf)라는 직렬화 형식을 정의하기 위해 사용되는 스키마 파일이다.
Protobuf는 데이터를 효율적으로직렬화/역직렬화하는 데 사용되는 Google의 데이터 포맷인데, 이 .proto 파일은 그 데이터 구조와 RPC(Service)를 정의하는 데 쓰인다.
쉽게 말해, 서버와 클라이언트 간 통신에서"데이터를 어떻게 보낼지"와"어떤 메서드를 호출할지"를 설계하는 설계도 같은 역할이다.
메시지 (Message) : 교환되는 데이터 구조 정의
서비스(Service) : 클라이언트가 호출할 수 있는 원격 메서드 정의
syntax = "proto3";
package com.test.member.grpc;
// 여기에 내가 원하는 패키지명을 적는다. 아래는 예시이며 실제 프로젝트 패키지를 잘 보면서 수정하자.
//option java_multiple_files = true;
option java_package = "com.test.member.grpc";
option java_outer_classname = "MemberProto";
**service MemberService {
// gRPC의 스트리밍 기능을 통해 다수의 요청과 응답을 효율적으로 처리하는 방식
rpc StreamCreateMember (stream MemberRequest) returns (stream MemberCreateResponse);
// 단일 회원 ID로 조회
rpc GetMemberById (MemberIdRequest) returns (MemberResponse);
// 이메일로 회원 조회
rpc GetMemberByEmail (MemberEmailRequest) returns (MemberResponse);
}**
**// 회원 ID로 조회 요청
message MemberIdRequest {
int64 id = 1;
}**
**// 이메일로 조회 요청**
message MemberEmailRequest {
string email = 1;
}
**// 주소 정보
message Address {
string street = 1;
string city = 2;
string country = 3;
string postal_code = 4;
map<string, string> additional_info = 5;
}**
// 연락처 정보
message Contact {
string phone = 1;
string mobile = 2;
string work_phone = 3;
repeated string emails = 4;
map<string, string> social_media = 5;
}
**// 회원 정보 응답
message MemberResponse {
int64 id = 1;
string email = 2;
string name = 3;
string profile_image_base64 = 4;
Address address = 5;
Contact contact = 6;
repeated string interests = 7;
repeated string skills = 8;
string metadata = 9;
}**
// 멤버 생성 요청 객체
message MemberRequest {
int64 id = 1;
string email = 2;
string password = 3;
string name = 4;
// 대용량 필드
string profileImageBase64 = 5;
string etcInfo = 6;
}
// 멤버 생성 응답
message MemberCreateResponse {
int64 id = 1;
string email = 2;
string password = 3;
string name = 4;
string profileImageBase64 = 5;
string etcInfo = 6;
}
위와 같이 작성된 proto 파일은 단순히 설계도의 역할만 하는 것이 아니다.