[C#] ASP.NET Core gRPC Server - gRPC 서버 생성
- C#
- 2022. 4. 7. 21:11
목적
- 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.cs
는greet.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
'C#' 카테고리의 다른 글
[C# gRPC] 클래스 라이브러리 생성 후, protocol buffer(.proto) 파일 관리 (0) | 2022.04.09 |
---|---|
[C# gRPC] Blazor Server 앱 - gRPC Client 생성 (6) | 2022.04.07 |
[C# 문법] C# 7.0 에서 편리해진 out 파라미터 사용방법 (0) | 2021.05.23 |
MSDN C# 명명지침 (1) | 2021.05.19 |
C# 코딩 규칙(C# 프로그래밍 가이드) (0) | 2021.05.19 |
이 글을 공유하기