마이크로서비스와 분산 시스템의 세계에서는 서비스 간의 효율적인 통신이 중요합니다. Google이 개발한 고성능 RPC(원격 프로시저 호출) 프레임워크인 gRPC가 작동하는 곳입니다. 단순성과 효율성을 위해 설계된 정적으로 유형이 지정되고 컴파일된 프로그래밍 언어인 Go와 결합된 gRPC는 강력하고 확장 가능한 웹 서비스를 구축하는 데 도움이 될 수 있습니다.
gRPC는 google Remote Procedure Call을 의미합니다. 이는 전송을 위해 HTTP/2, 인터페이스 설명 언어로 프로토콜 버퍼를 사용하고 인증, 로드 밸런싱 등과 같은 기능을 제공하는 오픈 소스 프레임워크입니다. gRPC를 사용하면 .proto 파일에서 서비스 방법과 메시지 유형을 정의할 수 있으며, 이를 사용하여 여러 언어로 클라이언트 및 서버 코드를 생성할 수 있습니다.
### 전제 조건
시작하기 전에 다음이 설치되어 있는지 확인하세요.
다음 명령을 사용하여 Go 플러그인을 설치할 수 있습니다.
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
protoc 컴파일러가 플러그인을 찾을 수 있도록 PATH를 업데이트하세요.
export PATH="$PATH:$(go env GOPATH)/bin"
터미널을 열고 다음을 입력하여 시스템에 protoc이 설치 및 구성되어 있는지 확인하세요.
protoc --version
다음과 유사한 출력이 표시됩니다.
C:\Users\Guest>protoc --version ~ libprotoc 27.3
protoc 명령을 인식하지 못하는 경우 Windows용 Chocolatey를 사용하여 프로토콜 버퍼를 설치할 수 있습니다.
choco install protoc
그렇지 않고 초콜릿이 설치되어 있지 않거나 다른 OS를 사용하는 경우 여기에서 공식 설치 문서를 참조할 수 있습니다.
gRPC 서비스를 정의하는 .proto 파일을 만듭니다. 예를 들어:
helloworld.proto
syntax = "proto3"; package helloworld; message HelloRequest { string name = 1; } message HelloResponse { string message = 1; } service Greeter { rpc SayHello (HelloRequest) returns (HelloResponse) {} }
.proto 파일에서 Go 코드를 생성합니다.
protoc --go_out=. --go-grpc_out=. helloworld.proto
Go에서 서버 만들기:
server.go
package main import ( "context" "log" "net" "google.golang.org/grpc" pb "path/to/your/proto" ) type server struct { pb.GreeterServer } func main() { lis, err := net.Listen("tcp", ":8080") if err != nil { log.Fatalf("failed to listen: %v", err) } log.Printf("Server started at %v", lis.Addr()) grpcServer := grpc.NewServer() pb.RegisterGreeterServer(grpcServer, &server{}) if err := grpcServer.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } } // SayHello name should be the same RPC name as defined in your proto file func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) { return &pb.HelloResponse{Message: "Hello " in.Name}, nil }
Go에서 클라이언트 만들기:
client.go
package main import ( "context" "log" "os" "time" "google.golang.org/grpc" pb "path/to/your/proto" ) func main() { conn, err := grpc.NewClient("localhost:8080", grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close() client := pb.NewGreeterClient(conn) name := "John Doe" if len(os.Args) > 1 { name = os.Args[1] } callSayHello( client, name ) } func callSayHello(client pb.GrpcServiceClient, name string) { ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() res, err := client.SayHello(ctx, &pb.HelloRequest{Name: name}) if err != nil { log.Fatalf("Failed to called: %v", err) } log.Printf("%v", res) }
gRPC와 Go는 함께 확장 가능한 고성능 웹 서비스를 구축하기 위한 강력한 조합을 제공합니다. 두 가지의 장점을 모두 활용하면 유지 관리 및 확장이 용이하고 효율적이고 안정적인 애플리케이션을 만들 수 있습니다.
데모 저장소 링크: Github.com
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3