2022. 10. 1. 17:17ㆍ카테고리 없음
사양
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 개요