.NET의 gRPC 개요

작성자: James Newton-King

gRPC는 언어 제약이 없는 고성능 RPC(원격 프로시저 호출) 프레임워크입니다.

gRPC의 주요 이점은 다음과 같습니다.

  • 최신 고성능 경량 RPC 프레임워크.
  • 기본적으로 프로토콜 버퍼를 사용하는 계약 우선 API 개발로, 언어 제약이 없는 구현이 가능합니다.
  • 여러 언어에서 강력한 형식의 서버 및 클라이언트를 생성할 수 있는 도구입니다.
  • 클라이언트, 서버 및 양방향 스트리밍 호출을 지원합니다.
  • Protobuf 이진 직렬화를 사용하여 네트워크 사용량이 감소합니다.

이러한 이점으로 인해 gRPC는 다음과 같은 분야에 이상적입니다.

  • 효율성이 중요한 경량 마이크로 서비스.
  • 개발을 위해 여러 언어가 필요한 다중 언어 시스템.
  • 스트리밍 요청 또는 응답을 처리해야 하는 지점 간 실시간 서비스.

.proto 파일에 대한 C# 도구 지원

gRPC는 API 개발에 계약 중심 접근 방식을 사용합니다. 서비스 및 메시지는 .proto 파일에서 정의됩니다.

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

프로젝트에 .proto 파일을 포함하면 서비스, 클라이언트, 메시지의 .NET 형식이 자동으로 생성됩니다.

  • Grpc.Tools 패키지에 대한 패키지 참조를 추가합니다.
  • <Protobuf> 항목 그룹에 .proto 파일을 추가합니다.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

gRPC 도구 지원에 대한 자세한 내용은 C#을 사용하는 gRPC 서비스를 참조하세요.

ASP.NET Core의 gRPC 서비스

gRPC 서비스는 ASP.NET Core에서 호스팅될 수 있습니다. 서비스는 로깅, DI(종속성 주입), 인증, 권한 부여와 같은 ASP.NET Core 기능과 완벽하게 통합됩니다.

ASP.NET Core 앱에 gRPC 서비스 추가

gRPC를 사용하려면 Grpc.AspNetCore 패키지가 필요합니다. .NET 앱에서 gRPC를 구성하는 방법에 대한 자세한 내용은 gRPC 구성을 참조하세요.

gRPC 서비스 프로젝트 템플릿

ASP.NET Core gRPC 서비스 프로젝트 템플릿은 다음과 같은 시작 서비스를 제공합니다.

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)
    {
        _logger.LogInformation("Saying hello to {Name}", request.Name);
        return Task.FromResult(new HelloReply 
        {
            Message = "Hello " + request.Name
        });
    }
}

GreeterService.proto파일의 Greeter 서비스에서 생성되는 GreeterBase 형식에서 상속됩니다. 서비스는 다음에서 클라이언트에 액세스할 수 있습니다.Program.cs

app.MapGrpcService<GreeterService>();

ASP.NET Core의 gRPC 서비스에 대한 자세한 내용은 ASP.NET Core를 사용하는 gRPC 서비스를 참조하세요.

.NET 클라이언트로 gRPC 서비스 호출

gRPC 클라이언트는 .proto 파일에서 생성되는 구체적인 클라이언트 형식입니다. 구체적인 gRPC 클라이언트에는 .proto 파일에서 gRPC 서비스로 변환되는 메서드가 있습니다.

var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);

var response = await client.SayHelloAsync(
    new HelloRequest { Name = "World" });

Console.WriteLine(response.Message);

gRPC 클라이언트는 gRPC 서비스에 대한 수명이 긴 연결을 나타내는 채널을 사용하여 만들어집니다. GrpcChannel.ForAddress를 사용하여 채널을 만들 수 있습니다.

클라이언트를 만들고 다양한 서비스 메서드를 호출하는 방법에 대한 자세한 내용은 .NET 클라이언트를 사용하여 gRPC 서비스 호출을 참조하세요.

추가 리소스

gRPC는 언어 제약이 없는 고성능 RPC(원격 프로시저 호출) 프레임워크입니다.

gRPC의 주요 이점은 다음과 같습니다.

  • 최신 고성능 경량 RPC 프레임워크.
  • 기본적으로 프로토콜 버퍼를 사용하는 계약 우선 API 개발로, 언어 제약이 없는 구현이 가능합니다.
  • 여러 언어에서 강력한 형식의 서버 및 클라이언트를 생성할 수 있는 도구입니다.
  • 클라이언트, 서버 및 양방향 스트리밍 호출을 지원합니다.
  • Protobuf 이진 직렬화를 사용하여 네트워크 사용량이 감소합니다.

이러한 이점으로 인해 gRPC는 다음과 같은 분야에 이상적입니다.

  • 효율성이 중요한 경량 마이크로 서비스.
  • 개발을 위해 여러 언어가 필요한 다중 언어 시스템.
  • 스트리밍 요청 또는 응답을 처리해야 하는 지점 간 실시간 서비스.

.proto 파일에 대한 C# 도구 지원

gRPC는 API 개발에 계약 중심 접근 방식을 사용합니다. 서비스 및 메시지는 .proto 파일에서 정의됩니다.

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

프로젝트에 .proto 파일을 포함하면 서비스, 클라이언트, 메시지의 .NET 형식이 자동으로 생성됩니다.

  • Grpc.Tools 패키지에 대한 패키지 참조를 추가합니다.
  • <Protobuf> 항목 그룹에 .proto 파일을 추가합니다.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

gRPC 도구 지원에 대한 자세한 내용은 C#을 사용하는 gRPC 서비스를 참조하세요.

ASP.NET Core의 gRPC 서비스

gRPC 서비스는 ASP.NET Core에서 호스팅될 수 있습니다. 서비스는 로깅, DI(종속성 주입), 인증, 권한 부여와 같은 ASP.NET Core 기능과 완벽하게 통합됩니다.

ASP.NET Core 앱에 gRPC 서비스 추가

gRPC를 사용하려면 Grpc.AspNetCore 패키지가 필요합니다. .NET 앱에서 gRPC를 구성하는 방법에 대한 자세한 내용은 gRPC 구성을 참조하세요.

gRPC 서비스 프로젝트 템플릿

gRPC 서비스 프로젝트 템플릿은 다음과 같은 시작 서비스를 제공합니다.

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)
    {
        _logger.LogInformation("Saying hello to {Name}", request.Name);
        return Task.FromResult(new HelloReply 
        {
            Message = "Hello " + request.Name
        });
    }
}

GreeterService.proto파일의 Greeter 서비스에서 생성되는 GreeterBase 형식에서 상속됩니다. 서비스는 다음에서 클라이언트에 액세스할 수 있습니다.Startup.cs

app.UseEndpoints(endpoints =>
{
    endpoints.MapGrpcService<GreeterService>();
});

ASP.NET Core의 gRPC 서비스에 대한 자세한 내용은 ASP.NET Core를 사용하는 gRPC 서비스를 참조하세요.

.NET 클라이언트로 gRPC 서비스 호출

gRPC 클라이언트는 .proto 파일에서 생성되는 구체적인 클라이언트 형식입니다. 구체적인 gRPC 클라이언트에는 .proto 파일에서 gRPC 서비스로 변환되는 메서드가 있습니다.

var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);

var response = await client.SayHelloAsync(
    new HelloRequest { Name = "World" });

Console.WriteLine(response.Message);

gRPC 클라이언트는 gRPC 서비스에 대한 수명이 긴 연결을 나타내는 채널을 사용하여 만들어집니다. GrpcChannel.ForAddress를 사용하여 채널을 만들 수 있습니다.

클라이언트를 만들고 다양한 서비스 메서드를 호출하는 방법에 대한 자세한 내용은 .NET 클라이언트를 사용하여 gRPC 서비스 호출을 참조하세요.

추가 리소스