WCF 개발자를 위한 gRPC 소개

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

.NET Core 3.0 릴리스는 Microsoft가 다양한 플랫폼에서 서비스를 제공하려는 개발자에게 원격 통신 솔루션을 제공하는 방식의 변화를 나타냅니다. .NET Core 이상에서는 Windows Communication Foundation(WCF)을 제공하지 않지만 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(유니버설 설명, 검색 및 통합)

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 등)에서 솔루션을 제공하도록 설계되었습니다.

마이크로 서비스

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

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

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

가상화, 클라우드 컴퓨팅, 컨테이너 및 사물 인터넷 증가하는 방향으로 이동하면서 마이크로 서비스의 지속적인 증가에 기여했습니다. 하지만 마이크로 서비스는 문제가 없는 것은 아닙니다. 조각화된/탈중앙화 인프라는 서비스 간 통신 시 단순성과 속도의 필요성에 더 중점을 둡니다. 그러면 SOAP의 때로는 고부가가치고 왜곡되는 특성에 주의를 끌 수 있습니다.

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

이 가이드의 내용

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

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

이 책의 마지막 섹션에서는 실제로 gRPC에서 최상의 방법을 살펴봅다. 이 섹션에서는 Docker 컨테이너 또는 Kubernetes와 같은 추가 도구를 사용하여 gRPC의 효율성을 활용하는 방법을 안내합니다. 또한 로깅, 메트릭 및 분산 추적을 사용하여 모니터링을 자세히 살펴봅니다.

이 가이드의 대상

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