[C#] ASP.NET Core gRPC Server - gRPC 서버 생성

목적

  • gRPC 통신을 하기 위해서는 Server/Client 각각의 프로그램이 있어야 합니다.
  • .NET 에서 ASP.NET Core gRPC Server 프로젝트 생성을 하게 되면, 매우 쉽게 gRPC Server 프로그램을 생성할 수 있습니다.

개발 환경

  • 개발 환경은 다음과 같습니다.
    • OS : Windows 10
    • .NET Version : .NET 6
    • 개발도구 : Visual Studio 2022

ASP.NET Core gRPC Server

  • gRPC 서버를 만들기 위해서는 Visual Studio 2022 실행합니다.
  • 실행하여 ASP.NET Core gRPC Server 프로젝트를 생성합니다.

ASP.NET Core gRPC Server 프로젝트 구조

  • ASP.NET Core gRPC Server 프로젝트의 구조는 다음과 같습니다.

  • 프로젝트 구조

    ├─properties
    │   ├───────launchSettings.json
    │   └───────종속성
    │   │         ├────패키지
    │   │         │      └────Grpc.AspNetCore(2.40.0)
    │   │         └────프레임워크
    │   │                ├────Microsoft.AspNetCore.App
    │   │                └────MicrosoftNETCore.App
    │   ├───────Protos
    │   │         └────greet.proto
    │   └───────Services
    │             └────GreeterServices.cs
    ├─appsettings.json
    └─program.cs

  • 위에서 핵심은 Protos, Services 2개의 폴더안에 있는 greet.proto, GreeterService.cs 입니다.
  • .proto 확장자는 프로코톨 버퍼라고 하여 Server/Client 간의 gRPC 통신을 하기 위해 사전에 미리 메시지, 서비스를 정의해 놓은 파일이라고 이해하시면 됩니다.
  • GreeterService.csgreet.proto 에서 정의된 서비스안에 메서드를 정의하여, Client 에서 보내는 메시지를 처리하는 로직이 들어 있습니다.

greet.proto

  • greet.proto 는 ASP.NET Core gRPC Server 프로젝트를 생성하게 되면 Default 로 생성되는 프로토콜 버퍼 입니다.
  • 간단히 설명하면, 현재 Greeter 서비스안에 SayHello 라는 rpc Mrehod(원격 메서드) 가 있습니다.
  • SayHello 원격 메서드 는 받은 메시지를 다시 반환합니다.
syntax = "proto3";

option csharp_namespace = "GrpcService1";

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;
}

GreeterService.cs

  • 다음은 GreeterService.cs 서비스 코드 입니다.
  • 아래에서 SayHello 원격 메서드가 Override 되어서 새롭게 정의되어 있습니다.
  • 앞에서 greet.proto 파일에서 SayHello 는 원격 메서드 였고, Client로 부터 받은 메시지를 다시 반환해주는 메서드였습니다.
  • 때문에 SayHello 메서드는 결과값을 다시 return 해주고 있습니다.
using BlazorClient;
using Grpc.Core;

namespace GrpcService1.Services
{
    public class GreeterService : Greeter.GreeterBase
    {
        private readonly ILogger<GreeterService> _logger;
        public GreeterService(ILogger<GreeterService> logger)
        {
            _logger = logger;
        }

        public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
        {
            return Task.FromResult(new HelloReply
            {
                Message = "Hello " + request.Name
            });
        }
    }
}

launchSettings.json

  • launchSettings.json 은 개발 환경에 변수값들을 정의하는 파일 입니다.
  • ASP.NET Core gRPC Server 프로젝트를 생성하게 되면, Default 값으로 다음과 같이 변수들이 설정되어 있습니다.
{
  "profiles": {
    "GrpcService1": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": false,
      "applicationUrl": "http://localhost:5005;https://localhost:7005",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

서버 실행

  • 실제로 gRPC 서버를 실행해 보도록 하겠습니다.
  • 실행 결과, 정상적으로 서버가 실행되면서 해당 정보들이 로그로 표현되는 것을 확인할 수 있습니다.
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5005
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://localhost:7005
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\Users\bh.cho\OneDrive\바탕 화면\blazor_grpc_sample\GrpcService1\
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY