Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

개발자로 살아남기

[gRPC] C#으로 gRPC 서버, 클라이언트 만들기 - 튜토리얼(1) 본문

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