WCF 개발자를 위한 gRPC 소개

이 콘텐츠는 .NET Docs 또는 오프라인으로 읽을 수 있는 다운로드 가능한 무료 PDF로 제공되는 eBook, WCF 개발자용 gRPC에서 발췌한 내용입니다.

WCF 개발자용 gRPC eBook 커버 썸네일.

컴퓨터가 서로 통신할 수 있도록 돕는 것은 디지털 시대의 주요 선점 중 하나입니다. 특히 현재 인프라의 상호 운용성 요구에 맞는 최적의 원격 통신 메커니즘을 결정하기 위해 지속적으로 노력합니다. 당연히 예상할 수 있듯이, 이러한 메커니즘은 수요나 인프라가 발전함에 따라 변경됩니다.

.NET Core 3.0 릴리스는 다양한 플랫폼에서 서비스를 제공하려는 개발자에게 Microsoft가 원격 통신 솔루션을 제공하는 방식의 변화를 보여줍니다. .NET Core 이상에서는 기본적으로 WCF(Windows Communication Foundation)를 제공하지 않지만 ASP.NET Core 3.0 릴리스에서는 기본 제공 gRPC 기능을 제공합니다.

gRPC는 광범위한 소프트웨어 커뮤니티에서 널리 사용되는 프레임워크입니다. 개발자는 최신 RPC 시나리오를 위해 여러 프로그래밍 언어에서 사용됩니다. 커뮤니티와 에코시스템은 활기차고 활동적입니다. gRPC 프로토콜에 대한 지원이 Kubernetes, 서비스 메시, 부하 분산 장치 등과 같은 인프라 구성 요소에 추가되고 있습니다. 성능, 효율성 및 플랫폼 간 호환성과 함께 이러한 요인으로 인해 gRPC는 .NET으로 이동하는 새 앱 및 WCF 앱에 자연스럽게 선택되고 있습니다.

기록

상호 관련된 작업 집합을 달성하기 위해 서로 데이터를 교환하는 컴퓨터 그룹에 지나지 않는 컴퓨터 네트워크의 기본 원칙은 처음부터 변경되지 않았습니다. 그러나 복잡성, 스케일링 및 기대치는 기하급수적으로 증가했습니다.

1990년 대에는 주로 동일한 언어와 플랫폼을 사용하는 내부 네트워크를 개선하는 데 중점을 두었습니다. TCP/IP는 이러한 유형의 통신에 대한 황금 기준이 되었습니다.

포커스는 금방 언어에 구애받지 않은 접근 방식을 홍보하여 여러 플랫폼에서 통신을 최적화하는 가장 좋은 방법으로 전환되었습니다. SOA(서비스 지향 아키텍처)는 애플리케이션에 제공할 수 있는 광범위한 서비스 컬렉션을 느슨하게 결합하는 구조를 제공했습니다.

웹 서비스는 모든 주요 플랫폼이 인터넷에 액세스할 수 있지만, 여전히 서로 상호 작용할 수 없을 때 개발되었습니다. 웹 서비스에는 다음을 비롯한 개방형 표준 및 프로토콜이 있습니다.

  • 태그를 지정하고 데이터를 코딩하는 XML
  • 데이터를 전송하는 SOAP(Simple Object Access Protocol)
  • 웹 서비스를 설명하고 클라이언트 애플리케이션에 연결하는 WSDL(웹 서비스 기술 언어)
  • 다른 서비스에서 웹 서비스를 검색할 수 있도록 하는 UDDI(Universal Description, Discovery, and Integration)

SOAP는 애플리케이션의 분산 요소가 서로 다른 플랫폼에 있더라도 서로 통신할 수 있는 규칙을 정의합니다. SOAP는 XML을 기반으로 하므로 사람이 읽을 수 있습니다. SOAP를 쉽게 이해할 수 있게 하는 것이 크기로, SOAP 메시지는 비슷한 프로토콜의 메시지보다 큽니다. SOAP는 보안이나 제어력을 잃지 않고 모놀리식 애플리케이션을 다중 구성 요소 형식으로 분리하도록 설계되었습니다. 따라서 WCF는 분산 시스템으로 시작된 gRPC와 달리, 이러한 종류의 시스템에서 작동하도록 설계되었습니다. WCF는 SOAP 스택에 대한 독점 확장 프로토콜을 개발하고 문서화하여 이러한 제한 사항을 일부 해결했지만, 그 대가로 다른 플랫폼에서 지원되지 않습니다.

Windows Communication Foundation은 서비스를 빌드하기 위한 프레임워크입니다. 이는 2000년대 초에 개발자가 초기 SOA를 사용하여 SOAP 작업의 복잡성을 관리하는 데 도움이 되도록 설계되었습니다. 개발자가 자체 SOAP 프로토콜을 작성해야 하는 요구 사항은 제거되지만 WCF는 여전히 SOAP를 사용하여 다른 시스템과의 상호 운용성을 지원합니다. 또한 WCF는 여러 프로토콜(HTTP/1.1, Net.TCP 등)에서 솔루션을 제공하도록 설계되었습니다.

마이크로 서비스

마이크로 서비스 아키텍처에서 대규모 애플리케이션은 더 작은 모듈식 서비스의 컬렉션으로 빌드됩니다. 각 구성 요소는 특정 작업 또는 프로세스를 수행하며 구성 요소는 상호 작동하도록 설계되었지만 필요에 따라 격리될 수 있습니다.

마이크로 서비스의 이점은 다음과 같습니다.

  • 변경 내용 및 업그레이드는 독립적으로 처리할 수 있습니다.
  • 문제는 다른 서비스와 독립적으로 격리되고, 다시 빌드, 테스트 및 재배포되는 특정 서비스로 추적될 수 있으므로 오류 처리의 효율성이 개선됩니다.
  • 확장성은 전체 애플리케이션이 아닌 특정 인스턴스 또는 서비스로 제한될 수 있습니다.
  • 개발은 여러 팀에서 발생할 수 있으며, 많은 팀이 단일 코드베이스에서 작업할 때 발생하는 것보다 마찰이 적습니다.

가상화, 클라우드 컴퓨팅, 컨테이너 및 사물 인터넷(IoT)의 증가를 향한 움직임은 마이크로 서비스의 지속적인 증가에 기여했습니다. 그러나 마이크로 서비스에 문제가 없는 것은 아닙니다. 조각화된/탈중앙화 인프라는 서비스 간 통신 시 단순성과 속도의 필요성에 더 중점을 둡니다. 그 결과 때로는 SOAP의 힘들고 왜곡된 성격에 관심을 끌었습니다.

Microsoft가 처음 릴리스된 지 10년 만에 gRPC가 이 환경에 출시되었습니다. Google의 내부 인프라 RPC(Stubby)에서 직접 진화한 gRPC는 이전의 많은 RPC의 매개 변수를 통보한 것과 동일한 표준 및 프로토콜을 기반으로 하지 않았습니다. 그리고 gRPC는 HTTP/2에만 기반했습니다. 따라서 고급 전송 프로토콜이 제공하는 새로운 기능을 활용할 수 있습니다. 특히 양방향 스트리밍, 이진 메시징 및 멀티플렉싱이 있습니다.

이 가이드의 내용

이 가이드에서는 gRPC의 주요 기능에 대해 설명합니다. 초기 장에서는 WCF의 주요 기능을 개략적으로 살펴보고 gRPC의 기능과 비교합니다. WCF와 gRPC 간에 직접적인 상관 관계가 있는 지점과 gRPC가 이점을 제공하는 지점을 식별합니다. WCF와 gRPC 간에 상관 관계가 없거나 gRPC가 WCF에 동등한 솔루션을 제공할 수 없는 경우 이 가이드에서는 해결 방법 또는 자세한 정보를 확인할 수 있는 위치를 제시할 것입니다.

5장에서는 일련의 샘플 WCF 애플리케이션을 사용하여 WCF 서비스의 주요 형식(간단한 요청-회신, 단방향 및 스트리밍)을 gRPC의 해당 항목으로 변환하는 방법을 자세히 살펴봅니다.

이 책의 마지막 섹션에서는 실제로 gRPC를 최대한 활용하는 방법을 살펴봅니다. 이 섹션에는 gRPC의 효율성을 활용하기 위해 Docker 컨테이너 또는 Kubernetes와 같은 추가 도구를 사용하는 방법에 대한 정보가 포함되어 있습니다. 또한 로깅, 메트릭 및 분산 추적을 사용하여 모니터링을 자세히 살펴봅니다.

이 가이드의 대상

이 가이드는 WCF를 사용했으며 .NET Core 3.0 이상 버전용 최신 RPC 환경으로 애플리케이션을 마이그레이션하려는 .NET Framework 또는 .NET Core에서 작업하는 개발자를 위해 작성되었습니다. 이 가이드는 일반적으로 .NET으로 업그레이드하거나 업그레이드를 고려 중인 개발자 및 기본 제공 gRPC 도구를 사용하려는 사람에게 더 유용할 수 있습니다.