PHpullh

GO · 패턴

gRPC 기초

Protocol Buffers와 gRPC로 고성능 서비스 간 통신을 구현합니다.

패턴고급grpcprotobufrpcservice

핵심 설명

Protocol Buffers와 gRPC로 고성능 서비스 간 통신을 구현합니다.

Go code

package main

import "fmt"

// protobuf 정의 (user.proto):
// syntax = "proto3";
// package user;
// option go_package = "./pb";
//
// service UserService {
//   rpc GetUser (GetUserRequest) returns (User);
//   rpc ListUsers (ListUsersRequest) returns (stream User);
// }
//
// message GetUserRequest { int32 id = 1; }
// message ListUsersRequest { int32 page = 1; int32 size = 2; }
// message User {
//   int32 id = 1;
//   string name = 2;
//   string email = 3;
// }

// gRPC 서버 구현 예시:
// type server struct {
//     pb.UnimplementedUserServiceServer
// }
// func (s *server) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.User, error) {
//     return &pb.User{Id: req.Id, Name: "Gopher"}, nil
// }

func main() {
	fmt.Println("gRPC 워크플로우:")
	fmt.Println("1. .proto 파일 정의")
	fmt.Println("2. protoc --go_out=. --go-grpc_out=. user.proto")
	fmt.Println("3. 서버: pb.RegisterUserServiceServer(grpcServer, &server{})")
	fmt.Println("4. 클라이언트: pb.NewUserServiceClient(conn)")
	fmt.Println("5. grpc.NewServer() → Serve(listener)")
}

학습 팁

gRPC는 HTTP/2 기반으로 양방향 스트리밍, 바이너리 직렬화로 REST보다 빠릅니다. 서비스 간 내부 통신에 적합합니다.

주의할 점

UnimplementedXxxServer를 임베딩하지 않으면 새 RPC 메서드 추가 시 컴파일 에러가 발생합니다. 항상 임베딩하세요.

자주 묻는 질문

gRPC 기초란 무엇인가요?

Protocol Buffers와 gRPC로 고성능 서비스 간 통신을 구현합니다.

gRPC 기초 학습 시 주의할 점은 무엇인가요?

UnimplementedXxxServer 를 임베딩하지 않으면 새 RPC 메서드 추가 시 컴파일 에러가 발생합니다. 항상 임베딩하세요.