전송 선택
이 항목에서는 WCF(Windows Communication Foundation)에 포함된 3개의 주요 전송인 HTTP, TCP 및 명명된 파이프 중에서 선택하는 기준에 대해 설명합니다. WCF에는 MSMQ라고도 하는 메시지 큐 전송도 포함되지만, 이 문서에서는 메시지 큐에 대해 설명하지 않습니다.
WCF 프로그래밍 모델에서는 서비스 계약에 표현된 엔드포인트 작업을 두 엔드포인트를 연결하는 전송 메커니즘과 구분합니다. 그 결과 네트워크에 서비스를 노출시키는 방법을 결정할 수 있는 유연성이 보장됩니다.
WCF에서는 바인딩을 사용하여 엔드포인트 사이의 네트워크로 데이터를 전송하는 방법을 지정합니다. 바인딩은 일련의 binding 요소로 구성됩니다. 전송은 바인딩에 속한 전송 바인딩 요소로 표현됩니다. 바인딩에는 보안, 필수 메시지 인코더 바인딩 요소, 그리고 필수 전송 바인딩 요소와 같은 선택적인 프로토콜 바인딩 요소가 포함됩니다. 전송에서는 다른 애플리케이션과의 사이에서 serialize된 형식의 메시지를 주고 받습니다.
기존 클라이언트 또는 서버에 연결해야 하는 경우에는 특정 전송을 선택할 수 없습니다. 하지만 각각 서로 다른 전송을 사용하는 여러 엔드포인트를 통해 WCF 서비스에 액세스할 수 있습니다. 단일 전송이 서비스에서 의도하는 대상을 수용하지 못하는 경우 여러 엔드포인트를 통해 서비스를 공개해 보세요. 그러면 클라이언트 애플리케이션에서 가장 적합한 엔드포인트를 사용할 수 있습니다.
전송을 선택하고 나면 이를 사용하는 바인딩을 선택해야 합니다. 시스템 제공 바인딩을 선택하거나(시스템 제공 바인딩 참조) 고유한 사용자 지정 바인딩을 빌드할 수 있습니다(사용자 지정 바인딩 참조). 바인딩을 직접 만들 수도 있습니다. 자세한 내용은 사용자 정의 바인딩 만들기를 참조하세요.
각 전송의 이점
이 단원에서는 3개의 주요 전송 중에서 하나를 선택하는 데 대한 주된 이유를 자세한 의사 결정 차트와 함께 설명합니다.
HTTP 전송을 사용해야 하는 경우
HTTP는 클라이언트와 서버 사이의 요청/응답 프로토콜입니다. 가장 일반적인 애플리케이션은 웹 서버와 통신하는 웹 브라우저 클라이언트로 구성됩니다. 클라이언트에서 서버로 요청을 보내면 서버에서 클라이언트 요청 메시지를 수신 대기합니다. 서버에서 요청을 받으면 요청 상태가 포함된 응답을 반환합니다. 성공적인 경우 웹 페이지, 오류 메시지 또는 기타 정보와 같은 선택적인 데이터가 반환됩니다. HTTP 프로토콜에 대한 자세한 내용은 HTTP - Hypertext Transfer Protocol을 참조하세요.
HTTP 프로토콜은 연결 기반이 아닙니다. 응답을 보내고 나면 상태가 유지되지 않습니다. 여러 페이지로 된 트랜잭션을 처리하려면 애플리케이션에서 모든 필요한 상태를 유지해야 합니다.
WCF에서 HTTP 전송 바인딩은 WCF가 아닌 레거시 시스템과의 상호 운용성을 위해 최적화됩니다. 통신에 참여하는 모든 당사자가 WCF를 사용하는 경우에는 TCP 기반 또는 명명된 파이프 기반 바인딩이 가장 빠릅니다. 자세한 내용은 NetTcpBinding 및 NetNamedPipeBinding를 참조하세요.
TCP 전송을 사용해야 하는 경우
TCP는 스트리밍 지향의 연결 기반 서비스로, 엔드투엔드 오류 검색과 수정 기능이 있습니다. 연결 기반이란 데이터를 교환하기 전에 호스트 사이의 통신 세션이 설정되는 것을 의미합니다. 호스트는 TCP/IP 네트워크에서 논리 IP 주소로 식별되는 모든 디바이스입니다.
TCP를 사용하면 데이터 배달이 안정적이고 사용이 쉽습니다. 특히 TCP에서는 발신자에게 패킷 배달에 대해 알리고, 패킷이 보낸 순서와 같은 순서로 배달되도록 보장하며, 손실된 패킷을 다시 전송하고, 데이터 패킷이 중복되지 않았는지 확인합니다. 이 안정적인 배달은 2개의 TCP/IP 노드 사이에 적용되며, 포함되는 매개 노드의 수에 관계없이 엔드포인트 사이에 적용되는 WS-ReliableMessaging과 다릅니다.
WCF TCP 전송은 통신의 양 끝에서 WCF를 사용하는 시나리오를 위해 최적화되어 있습니다. 이 바인딩은 서로 다른 시스템 사이의 통신과 관련된 시나리오에서 가장 빠른 WCF 바인딩입니다. 메시지 교환에서는 최적화된 메시지 전송을 위해 BinaryMessageEncodingBindingElement를 사용합니다. TCP는 이중 통신을 제공하기 때문에 클라이언트가 NAT(Network Address Translation) 뒤에 있더라도 이중 계약을 구현하는 데 사용할 수 있습니다.
명명된 파이프 전송을 사용해야 하는 경우
명명된 파이프는 프로세스에서 통신에 사용할 수 있는 공유 메모리 섹션과 같이 Windows 운영 체제 커널에 있는 개체입니다. 명명된 파이프는 이름이 있으며 한 시스템에서 프로세스 사이의 단방향 또는 이중 통신에 사용할 수 있습니다.
단일 컴퓨터에 있는 서로 다른 WCF 애플리케이션 사이에서 통신이 필요한 경우 다른 시스템으로부터의 통신을 방지하려면 명명된 파이프 전송을 사용합니다. 추가 제한으로는 따로 권한을 부여하지 않은 한 Windows 원격 데스크톱에서 실행하는 프로세스가 같은 Windows 원격 데스크톱으로 제한될 수 있다는 것이 있습니다.
Warning
IIS에서 호스팅된 여러 사이트에서 약한 와일드카드 URL 예약과 함께 명명된 파이프 전송을 사용하는 경우 다음과 같은 오류가 발생할 수 있습니다. '2' 사이트를 수신 대기하는 동안 프로토콜 'net.pipe'의 Activation Service 'NetPipeActivator'에서 오류가 발생했으므로 사이트에 대한 해당 프로토콜을 임시로 사용할 수 없습니다. 자세한 내용은 예외 메시지를 참조하세요. URL: WeakWildcard:net.pipe:/<machine name>/ 상태: ConflictingRegistration 예외: 프로세스 이름: SMSvcHost 프로세스 ID: 1076\
전송을 선택할 때의 의사 결정 요점
다음 표에서는 전송을 선택할 때 흔히 사용되는 의사 결정 요점에 대해 설명합니다. 애플리케이션에 적용되는 추가 특성과 전송을 모두 고려해야 합니다. 애플리케이션에서 중요한 특성을 확인하고 각 특성과 잘 연결되는 전송을 확인한 다음 특성 집합에 가장 적합한 전송을 선택해야 합니다.
attribute | 설명 | 선호 전송 |
---|---|---|
진단 | 진단을 사용하면 전송 연결 문제를 자동으로 검색할 수 있습니다. 모든 전송에서는 연결을 설명하는 오류 정보를 돌려보내는 기능을 지원합니다. 하지만 WCF에는 네트워크 문제를 조사하기 위한 진단 도구가 포함되어 있지 않습니다. | None |
호스팅 | 모든 WCF 엔드포인트는 애플리케이션 내에 호스트되어야 합니다. IIS 6.0 이하 버전은 HTTP 전송을 사용하는 애플리케이션의 호스팅만 지원합니다. Windows Vista에서는 TCP 및 명명된 파이프를 비롯한 모든 WCF 전송에 대한 지원이 추가되었습니다. 자세한 내용은 인터넷 정보 서비스에서 호스팅 및 Windows Process Activation Service에서 호스팅을 참조하세요. | HTTP |
검사 | 검사는 전송 중에 메시지에서 정보를 추출하고 처리하는 기능입니다. HTTP 프로토콜에서는 메시지를 검사 및 분석하는 도구를 더 쉽게 작성할 수 있도록 데이터에서 라우팅 및 제어 정보를 분리합니다. 검사하기 쉬운 전송에는 네트워크 제품의 처리 능력도 덜 필요합니다. 사용되는 보안 수준에 따라 메시지의 검사 가능 여부가 결정됩니다. | HTTP |
대기 시간 | 대기 시간은 메시지 교환을 완료하는 데 필요한 최소 시간입니다. 모든 네트워크 작업에는 선택한 전송에 따라 어느 정도의 대기 시간이 필요합니다. HTTP와 같이 네이티브 메시지 교환 패턴이 요청 응답인 이중 또는 단방향 통신을 사용하면 메시지에 적용되는 상관 관계 때문에 대기 시간이 추가될 수도 있습니다. 이런 경우에는 TCP와 같이 네이티브 메시지 교환 패턴이 이중인 전송을 사용할 수 있습니다. | TCP, 명명된 파이프 |
도달률 | 전송의 도달 범위는 전송에서 다른 시스템과 연결하는 능력을 나타냅니다. 명명된 파이프 전송은 도달 범위가 짧으며, 같은 시스템에서 실행되는 서비스에만 연결할 수 있습니다. TCP 및 HTTP 전송은 모두 도달 범위가 크며 일부 NAT 및 방화벽 구성도 통과할 수 있습니다. 자세한 내용은 NAT 및 방화벽 작업을 참조하세요. | HTTP, TCP |
보안 | 보안은 전송 중에 기밀성, 무결성 또는 인증을 제공하여 메시지를 보호하는 기능입니다. 기밀성은 메시지를 검토로부터 보호하고, 무결성은 메시지를 수정으로부터 보호하고, 인증은 메시지의 발신자 또는 수신자에게 보증을 제공합니다. WCF에서는 메시지 수준과 전송 수준에서 모두 전송 보안을 지원합니다. 전송에서 버퍼링된 전송 모드를 지원하는 경우 메시지 보안은 전송과 함께 사용할 수 있습니다. 전송 보안에 대한 지원은 선택한 전송에 따라 달라집니다. HTTP, TCP 및 명명된 파이프 전송의 전송 보안 지원에는 적정 수준의 패리티가 사용됩니다. |
모두 |
처리량 | 처리량은 지정된 기간 내에 전송 및 처리할 수 있는 데이터의 양을 나타냅니다. 대기 시간과 마찬가지로 선택한 전송에 따라 서비스 작업의 처리량이 달라질 수 있습니다. 전송의 처리량을 최대화하려면 전송 콘텐츠의 오버헤드를 최소화하고 메시지 교환이 완료될 때까지 기다리는 시간을 최소화해야 합니다. TCP 및 명명된 파이프 전송 모두에서 메시지 본문에 약간의 오버헤드를 추가하며 메시지 응답의 대기 시간을 줄여 주는 네이티브 이중 셰이프를 지원합니다. | TCP, 명명된 파이프 |
도구 | 도구는 개발, 진단, 호스팅 및 기타 작업의 프로토콜에 대한 타사 애플리케이션 지원을 나타냅니다. HTTP 프로토콜에 사용되는 도구 및 소프트웨어를 개발하는 일에는 특히 큰 투자가 필요합니다. | HTTP |