C#으로 gRPC를 사용한 Hello, World 구현

2022. 10. 1. 17:17카테고리 없음

728x90

사양

visual studio 2022

dotnet 6.0

 

사전 지식

proto buffer


회사에서 gRPC를 이용해 서버 간 통신을 하는데 gRPC는 사용해 본 적이 없어 기술을 조사해 보니 국내 서적은 하나(gRPC 시작에서 운영까지 도커와 쿠버네티스를 위한 클라우드 네이티브 애플리케이션 구축) 있는데 go언어와 JAVA 언어로 적혀 있어 패스했다.

그 외 다른 방법(구글링, 동영상 강의)등을 시도해 볼 수 있지만 완전 백지상태일 경우 잘못된 내용을 배울 수 있기 때문에 MS 문서를 보고 하기로 결정했다.

문제는 MS 문서는 너무 장황하게 글을 쓰기 때문에 검색해서 한 번에 찾거나 요약해서 찾아보기 쉽지 않다는 거다.

삽질의 시작이다...


gRPC 서버

 

C#으로 gRPC 서비스를 만들려면 기본적으로 ASP.Net Core를 이용해 만들어야 된다.

1. 프로젝트 생성 시 gRPC로 검색하면 ASP.NET Core gRPC 서비스 구성이 나온다.

  • 프로젝트 명은 GrpcGreeterServer이름으로 생성한다

2. 기본적으로 gRPC 서비스 폴더와 GreeterService.cs 파일 하나를 만들 텐데 아래  사진과 같이 된다

눈여겨볼 것은 종속성 -> 패키지 안에 Grpc.AspNetCore 패키지를 사용하는데 gRPC에 필요한 기능들이 모여있다.

3. launchSettings.json 파일을 열어 "applicationUrl": "https://localhost:7042", 포트를 원하는 값으로 변경한다(클라이언트는 해당 포트를 통해 서버에 연결)

4. GreeterService.cs 파일을 열어 위 사진과 같이 Hello World로 변경하면 클라이언트 요청 시 해당 글을 포함해서 준다.


gRPC 클라이언트

1. Visual Studio로 C#기반의 콘솔 애플리케이션을 생성한다

  • 프로젝트 명은 GrpcGreeterClient이름으로 생성한다

2. 전체적인 내용을 적용하면 아래 사진과 같이 된다

패키지 목록

- Google.Protobuf : gRPC는 기본적인 IDL로 protobuf를 사용한다

- Grpc.Net.Client : 클라이언트에서 사용할 gRPC 패키지

- Grpc.Tools : 빌드 시 gRPC를 생성하게 해주는 패키지

 

폴더 및 파일

- Protos 폴더 :. proto파일들을 관리하는 폴더

- greet.proto 파일 : Hello, World를 gRPC를 이용해 통신하기 위한. proto파일

  • 폴더 내용
syntax = "proto3";

option csharp_namespace = "GrpcGreeterClient";

package greet;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings.
message HelloReply {
  string message = 1;
}

- Program.cs 파일 : gRPC 서버에 연결해 통신하기 위한 주 진입점 파일

  • 폴더 내용
using System.Threading.Tasks;
using Grpc.Net.Client;
using GrpcGreeterClient;

// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
                  new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();

GrpcGreeterClient.csproj 파일 : gRPC 서비스를 연결하기 위한 파일

  • ItemGroup 태그 안에 내용 추가
  • 폴더 내용
<Protobuf Include="Protos\greet.proto" GrpcServices="Client" />

 


서버를 실행 한 다음 클라이언트를 실행하면 하단과 같이 gRPC로 Hello, World를 통신한 걸 알 수 있다.


이것으로 내용은 끝났지만 결국 활용법을 알기 위해서는 MS 글들을 다 보는 게 좋다.

 

[참고]

echo 클라이언트를 만들기 위해 참고했던 내용

- 자습서: ASP.NET Core에서 gRPC 클라이언트 및 서버 만들기

전반적인 C# gRPC를 공부하기 위한 내용

-. NET의 gRPC 개요