gRPC
[gRPC] C#으로 gRPC 서버, 클라이언트 만들기 - 튜토리얼(1)
UnaUna
2023. 10. 30. 20:52
반응형
C# gRPC Server, Client 시작하기(Tutorial) - 1
1. Server 프로젝트 생성
[새 프로젝트 만들기] → grpc 검색 → ASP.NET Core gRPC 서비스 선택 -> 솔루션 이름 GrpcDemo
, 프로젝트 이름 GrpcServer
로 생성
- GrpcServer : gRPC의 Server Side
Protos 폴더의 great.proto
- 서버와 클라이언트 간의 계약을 정의하는 방식
// 최신 proto 구문 또는 스키마를 사용하려면 proto3
syntax = "proto3";
// 특정 proto에 대한 namespace 지정
option csharp_namespace = "GrpcService";
// 패키지 이름
package greet;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
- service : service 정의
- message : 클래스를 정의하면 된다.
- 여러가지 속성이 있고 0개 이상의 항목을 지정한다.
- 숫자는 속성이 진행되는 순서를 나타낸다.
- HelloRequest : 데이터가 수신할 메시지
- HelloReply : 데이터 유형
C#으로 따지면 아래와 같다.
public HelloReply SayHello(HelloRequest input){
}
GreeterService.cs
using Grpc.Core;
using GrpcService;
namespace GrpcService.Services
{
// Greeter.GreeterBase 의 Greeter : service name
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}
// SayHello 자신의 코드로 재정의
// SayHello 호출 시 이 메서드 실행
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
}
2. GrpcServer Run
해당 로컬 서버의 주소는 Client에서 사용하므로 기억해두자.
3. GrpcClient 프로젝트 생성
[새 프로젝트 만들기] → 콘솔앱 선택 → 프로젝트 이름 GrpcClient로 생성
꼭 콘솔 앱일 필요 없으며 가장 쉬운 방법이 콘솔 앱이라 선택
4. NugetPackege 설치
GrpcClient 프로젝트 마우스 오른쪽 버튼 클릭 후 NeGet 패키지 관리 선택
아래 목록 검색 후 Install
- Google.protobuf
- Grpc.Net.Client
- Grpc.Tools
또는 패키지 관리자 콘솔에 아래 붙여넣기
- NuGet\Install-Package Google.Protobuf --version 3.24.4
- NuGet\Install-Package Grpc.Net.Client -Version 2.58.0
- NuGet\Install-Package Grpc.Tools -Version 2.59.0
5. GrpcServer의 Protos 폴더를 GrpcClient에 복사/붙여넣기
- GrpcClient 프로젝트 더블 클릭 후
GrpcServices="Client"
로 수정<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
6. GrpcClient의 Program.cs 코드 수정
- GrpcClient 프로젝트만 빌드
- 아래와 같이 Program.cs 코드 수정(localhost는 본인에 맞게 대입)
Program.cs
using Grpc.Net.Client;
using GrpcService;
namespace GrpcClient;
class Program
{
static async Task Main(string[] args)
{
var input = new HelloRequest { Name = "TIm" };
var channel = GrpcChannel.ForAddress("https://localhost:"); // 본인 local host에 맞게 수정
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(input);
Console.WriteLine($"reply : {reply.Message}");
Console.ReadLine();
}
}
시작 프로젝트 설정 후 실행
- 여러 개의 시작 프로젝트로 설정하고 서버 프로젝트가 먼저 수행되게 순서를 조정한다.
- 없음을 시작으로 선택한다.
- 그 후 Run
결과
참고 : https://www.youtube.com/watch?si=rJ1WYZjo7L7T_IUf&v=QyxCX2GYHxk&feature=youtu.be
반응형