C Core에서 .NET용 gRPC로 gRPC 마이그레이션
참고 항목
이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.
Important
이 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.
현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.
기본 스택의 구현 때문에 일부 기능은 C Core 기반 gRPC 앱과 .NET용 gRPC 간에 동일한 방식으로 작동하지 않습니다. 이 문서에서는 두 스택 간의 마이그레이션을 위해 주요 차이점을 설명합니다.
Important
gRPC C Core는 유지 관리 모드이며 .NET용 gRPC 때문에 사용 중단될 예정입니다. 새 앱에는 gRPC C-core를 사용하지 않는 것이 좋습니다.
플랫폼 지원
gRPC C Core와 .NET용 gRPC는 서로 다른 플랫폼을 지원합니다.
- gRPC C Core: 자체 TLS 및 HTTP/2 스택을 사용하는 C++ gRPC 구현입니다.
Grpc.Core
패키지는 gRPC C Core를 중심으로 하는 .NET 래퍼로, gRPC 클라이언트 및 서버가 포함되어 있습니다. .NET Framework, .NET Core 및 .NET 5 이상을 지원합니다. - .NET용 gRPC: .NET Core 3.x 및 .NET 5 이상용으로 설계되었습니다. 최신 .NET 릴리스에 기본 제공되는 TLS 및 HTTP/2 스택을 사용합니다.
Grpc.AspNetCore
패키지에는 ASP.NET Core에서 호스트되고 .NET Core 3.x 또는 .NET 5 이상이 필요한 gRPC 서버가 포함되어 있습니다.Grpc.Net.Client
패키지에는 gRPC 클라이언트가 포함되어 있습니다.Grpc.Net.Client
의 클라이언트는 WinHttpHandler를 사용하여 .NET Framework를 제한적으로 지원합니다.
자세한 내용은 .NET의 gRPC에 지원되는 플랫폼을 참조하세요.
서버 및 채널 구성
NuGet 패키지, 구성 및 시작 코드는 gRPC C-Core에서 .NET용 gRPC로 마이그레이션할 때 수정해야 합니다.
.NET용 gRPC에는 클라이언트 및 서버에 대한 별도의 NuGet 패키지가 있습니다. 추가되는 패키지는 앱이 gRPC 서비스를 호스트하는지 또는 호출하는지에 따라 달라집니다.
Grpc.AspNetCore
: 서비스가 ASP.NET Core에 의해 호스트됩니다. 서버 구성 정보는 ASP.NET Core를 사용하는 gRPC 서비스를 참조하세요.Grpc.Net.Client
: 클라이언트는 내부적으로 .NET에 기본 제공되는 네트워킹 기능을 사용하는GrpcChannel
을 사용합니다. 클라이언트 구성 정보는 .NET 클라이언트를 사용하여 gRPC 서비스 호출을 참조하세요.
마이그레이션이 완료되면 앱에서 Grpc.Core
패키지를 제거해야 합니다. Grpc.Core
에는 큰 네이티브 이진 파일이 포함되어 있으므로 패키지를 제거하면 NuGet 복원 시간과 앱 크기가 줄어듭니다.
코드 생성 서비스 및 클라이언트
gRPC C-Core 및 .NET용 gRPC는 많은 API를 공유하며 .proto
파일에서 생성된 코드는 두 gRPC 구현과 호환됩니다. 대부분의 클라이언트 및 서비스는 변경 없이 C-Core에서 .NET용 gRPC로 마이그레이션할 수 있습니다.
gRPC 서비스 구현 수명
ASP.NET Core 스택에서 gRPC 서비스는 기본적으로 범위가 지정된 수명을 사용하여 생성됩니다. 반면, gRPC C Core는 기본적으로 singleton 수명을 사용하여 서비스에 바인딩됩니다.
범위가 지정된 수명을 사용하면 서비스 구현에서 범위가 지정된 수명을 사용하는 다른 서비스를 확인할 수 있습니다. 예를 들어 범위가 지정된 수명이 생성자 주입을 통해 DI 컨테이너에서 DbContext
를 확인할 수도 있습니다. 범위가 지정된 수명 사용과 관련해서 다음 사항을 확인합니다.
- 각 요청에 대해 서비스 구현의 새 인스턴스가 생성됩니다.
- 구현 형식의 인스턴스 멤버를 통해 요청 간에 상태를 공유할 수 없습니다.
- DI 컨테이너의 단일 서비스에 공유 상태를 저장해야 합니다. 저장된 공유 상태는 gRPC 서비스 구현의 생성자에서 확인됩니다.
서비스 수명에 대한 자세한 내용은 ASP.NET Core에서 종속성 주입을 참조하세요.
singleton 서비스 추가
gRPC C Core 구현에서 ASP.NET Core로 전환하기 쉽도록 서비스 구현의 서비스 수명을 범위가 지정된 수명에서 singleton 수명으로 변경할 수 있습니다. 여기에는 서비스 구현 인스턴스를 DI 컨테이너에 추가하는 작업이 포함됩니다.
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc();
services.AddSingleton(new GreeterService());
}
그러나 singleton 수명을 사용하는 서비스 구현은 이제 생성자 주입을 통해 범위가 지정된 서비스를 확인할 수 없습니다.
gRPC 서비스 옵션 구성
C Core 기반 앱에서 grpc.max_receive_message_length
, grpc.max_send_message_length
등의 설정은 서버 인스턴스를 생성할 때 ChannelOption
을 사용하여 구성합니다.
ASP.NET Core에서 gRPC는 GrpcServiceOptions
형식을 통해 구성을 제공합니다. 예를 들어 gRPC 서비스에서 들어오는 메시지의 최대 크기는 AddGrpc
를 통해 구성할 수 있습니다. 다음 예제에서는 기본 MaxReceiveMessageSize
인 4MB를 16MB로 변경합니다.
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc(options =>
{
options.MaxReceiveMessageSize = 16 * 1024 * 1024; // 16 MB
});
}
구성에 대한 자세한 내용은 .NET용 gRPC 구성을 참조하세요.
로깅
C Core 기반 앱은 GrpcEnvironment
를 사용하여 디버깅 용도의 로거를 구성합니다. ASP.NET Core 스택은 로깅 API를 통해 이 기능을 제공합니다. 예를 들어 생성자 주입을 통해 gRPC 서비스에 로거를 추가할 수 있습니다.
public class GreeterService : Greeter.GreeterBase
{
public GreeterService(ILogger<GreeterService> logger)
{
}
}
gRPC 로깅 및 진단에 대한 자세한 내용은 .NET의 gRPC에서 로깅 및 진단을 참조하세요.
HTTPS
C Core 기반 앱은 Server.Ports 속성을 통해 HTTPS를 구성합니다. ASP.NET Core에서 서버를 구성하는 경우에도 유사한 개념이 사용됩니다. 예를 들어 Kestrel은 이 기능을 위해 엔드포인트 구성을 사용합니다.
C Core 기반 앱은 Server.Ports 속성을 통해 HTTPS를 구성합니다. ASP.NET Core에서 서버를 구성하는 경우에도 유사한 개념이 사용됩니다. 예를 들어 Kestrel은 이 기능을 위해 엔드포인트 구성을 사용합니다.
gRPC 인터셉터
ASP.NET Core 미들웨어는 C Core 기반 gRPC 앱의 인터셉터와 유사한 기능을 제공합니다. 둘 다 ASP.NET Core gRPC 앱에서 지원되므로 인터셉터를 다시 작성할 필요가 없습니다.
이러한 기능을 서로 비교한 자세한 내용은 gRPC 인터셉터와 미들웨어를 참조하세요.
non-ASP.NET Core 프로젝트에서 gRPC 호스트
C 코어 기반 서버를 모든 프로젝트 형식에 추가할 수 있습니다. .NET 서버용 gRPC에는 ASP.NET Core가 필요합니다. ASP.NET Core는 프로젝트 파일이 SDK로 지정 Microsoft.NET.SDK.Web
하기 때문에 일반적으로 사용할 수 있습니다.
gRPC 서버는 프로젝트에 추가하여 <FrameworkReference Include="Microsoft.AspNetCore.App" />
non-ASP.NET Core 프로젝트에 호스트할 수 있습니다. 프레임워크 참조를 사용하면 ASP.NET Core API를 사용할 수 있으며 ASP.NET Core 서버를 시작하는 데 사용할 수 있습니다.
자세한 내용은 non-ASP.NET Core 프로젝트의 호스트 gRPC를 참조 하세요.
추가 리소스
ASP.NET Core