맨위로가기

윈도우 커뮤니케이션 파운데이션

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

윈도우 커뮤니케이션 파운데이션(WCF)은 서비스 지향 아키텍처(SOA) 원칙에 따라 설계된 분산 컴퓨팅을 위한 마이크로소프트의 프레임워크이다. WCF는 클라이언트와 서비스 간의 통신을 지원하며, WSDL 인터페이스, WS-* 표준, 다양한 통신 프로토콜(HTTP, TCP 등)을 지원하여 플랫폼 간 상호 운용성을 제공한다. WCF 서비스는 서비스 클래스, 호스팅 환경, 엔드포인트로 구성되며, 엔드포인트를 통해 클라이언트와 통신한다. WCF는 .NET Framework 3.0의 일부로 출시되었으며, .NET Core로의 이식을 위한 노력도 진행되고 있다.

더 읽어볼만한 페이지

  • 닷넷 용어 - XAML
    XAML은 마이크로소프트에서 개발한 XML 기반의 마크업 언어로, 사용자 인터페이스, 데이터 바인딩, 이벤트 처리 등을 정의하며 WPF, Silverlight, WF, WinRT API 앱, Xamarin.Forms 등에서 UI 개발에 널리 사용된다.
  • 닷넷 용어 - 윈도우 폼
    윈도우 폼은 .NET Framework에서 이벤트 기반 애플리케이션 개발을 지원하며, Windows API를 관리 코드로 래핑하여 GUI를 쉽게 구성할 수 있게 하고, 다양한 산업 분야에서 활용되는 개발 환경이다.
  • 닷넷 프레임워크 - 파워셸
    파워셸은 마이크로소프트에서 개발한 작업 자동화 솔루션으로, 명령줄 셸과 스크립트 언어의 기능을 결합하여 윈도우 시스템 관리를 위해 설계되었으며, .NET 프레임워크 기반의 객체 지향적 특징을 갖고 다양한 플랫폼에서 자동화 스크립트 작성 및 실행, 시스템 구성 관리 등에 활용된다.
  • 닷넷 프레임워크 - 유니버설 윈도우 플랫폼
    유니버설 윈도우 플랫폼(UWP)은 마이크로소프트에서 개발한 애플리케이션 모델로, Windows 10, 11 등 다양한 기기에서 실행되는 앱 개발을 위한 통합 플랫폼이며, Visual Studio를 통해 개발되고 XAML Islands를 통해 기존 WinAPI 기반 애플리케이션에서도 활용 가능하다.
  • 윈도우 비스타 - 퍼블 플레이스
    퍼블 플레이스는 짝맞추기, 손과 눈의 협응력, 암호 해독 등 다양한 종류의 세 가지 미니 게임(퍼블 페어스, 컴피 케이크, 퍼블 숍)으로 구성된 게임 모음집이다.
  • 윈도우 비스타 - 윈도우 디스플레이 드라이버 모델
    윈도우 비스타부터 도입된 윈도우 디스플레이 드라이버 모델(WDDM)은 성능 향상, 안정성, 새로운 기술 지원을 목표로 개발된 디스플레이 드라이버 아키텍처로, 가상화된 비디오 메모리, GPU 스케줄링, 프로세스 간 Direct3D 표면 공유, 향상된 오류 허용성 등의 특징을 가지며 데스크톱 윈도우 관리자(DWM)를 통한 합성 데스크톱 환경 구현에 필수적이다.
윈도우 커뮤니케이션 파운데이션 - [IT 관련 정보]에 관한 문서
개요
윈도우 커뮤니케이션 파운데이션 로고
윈도우 커뮤니케이션 파운데이션 로고
종류소프트웨어 프레임워크
개발자닷넷 파운데이션
작성자마이크로소프트
첫 출시일2006년 11월 21일
최신 버전v3.4.0
최신 출시일2022년 8월 18일
저장소GitHub 저장소
대체웹 서비스 향상
프로그래밍 언어C#
운영 체제Linux
macOS
Windows
플랫폼.NET Framework
.NET
라이선스MIT 라이선스
웹사이트공식 웹사이트

2. 아키텍처

WCF는 서비스 지향 아키텍처(SOA) 원칙에 따라 설계되었으며, 웹 서비스, 닷넷 리모팅, MTS, 메시지 쿼리를 하나의 서비스 지향 프로그래밍으로 통합한다. 로컬 컴퓨터, 랜, 인터넷 환경에서 프로세스 통신을 위한 단일 API를 제공하며, 웹 서비스 개발을 위한 고속 개발 도구 방식을 제공한다. WCF는 모래상자(sandbox) 안에서 실행되어 닷넷 응용 프로그램의 강화된 보안 모델을 제공한다.[8]

WCF는 두 프로세스 간 통신에 SOAP 메시지를 사용한다. 이를 통해 WCF 기반 응용 프로그램은 SOAP 메시지로 통신하는 다른 프로세스와 상호 운용할 수 있다. WCF 프로세스가 WCF가 아닌 프로세스와 통신할 때는 XML 기반 인코딩을 사용하지만, 다른 WCF 프로세스와 통신할 때는 최적화된 이진 형식으로 SOAP 메시지를 인코딩할 수 있다. 두 인코딩 모두 SOAP 형식의 데이터 구조를 따르는 정보 세트라고 부른다.[8]

WCF는 서비스 지향 아키텍처 원칙에 따라 분산 컴퓨팅을 지원하며, 서비스소비자에 의해 소비된다. 클라이언트는 여러 서비스를 소비할 수 있고, 서비스는 여러 클라이언트에 의해 소비될 수 있다. 서비스는 일반적으로 WCF 클라이언트가 서비스 소비에 사용할 수 있는 WSDL 인터페이스를 가진다. WCF는 WS 어드레싱, WS 신뢰 메시지, WS 보안과 같은 다양한 고급 웹 서비스 (WS)를 사용한다.[8]

.NET Framework 3.0의 하위 시스템


.NET Framework 4.0 릴리스와 함께 WCF는 RSS 신디케이션 서비스, WS-Discovery, 라우팅 및 REST 서비스에 대한 더 나은 지원을 제공한다.

2. 1. 서비스 구성 요소

WCF 서비스는 다음 세 가지 주요 구성 요소로 이루어진다.

  • 서비스 클래스 (Service Class): 실제로 제공되는 서비스를 구현하는 부분이다. 서비스를 메서드 형태로 포함한다.
  • 호스트 환경 (Host Environment): 서비스를 호스팅하는 환경이다.
  • 종착점 (Endpoint): 클라이언트가 서비스에 연결하는 지점이다.


WCF 서비스의 모든 통신은 종착점을 통해 이루어진다. 각 종착점은 다음과 같은 요소로 구성된다.

  • 계약(Contract): 종착점을 통해 접근 가능한 서비스 클래스의 메서드를 정의한다. 즉, 어떤 방식으로 서비스 클래스에 접근할 수 있는지를 나타낸다. 각 종착점마다 다른 계약을 가질 수 있다.
  • 묶음(Binding): 클라이언트가 종착점을 통해 호스트되는 서비스와 통신하는 방법을 지정한다.
  • 주소: 종착점의 위치를 나타낸다.


WCF는 서비스를 호스팅하기 위해 윈도우 활성화 서비스를 제공한다. 또한, IIS나 `ServiceHost` 클래스를 사용하는 프로세스 내에서도 WCF 서비스를 호스팅할 수 있다. 서비스 자체 호스팅도 가능하다.

WCF 서비스 클래스는 서비스를 메서드의 집합으로 구현한다. 최소 하나 이상의 서비스 계약(Service Contract)이 정의되어 서비스가 실행할 수 있는 작업(operation)을 정의한다. 필요한 경우, 데이터 계약(Data Contract)을 정의하여 사용할 데이터 형식을 기술할 수 있다.

계약은 .NET Attributes를 사용하여 정의한다. WCF 서비스로 공개되는 클래스는 `ServiceContract` 속성을 가지거나, 이 속성이 부여된 인터페이스를 구현해야 한다. 클라이언트가 SOAP 메시지를 통해 호출할 메서드에는 `OperationContract` 속성을 부여해야 한다.[1] 이러한 속성들은 WSDL 설명을 자동 생성하여 클라이언트가 참조할 수 있게 한다.

하나의 서비스는 여러 서비스 계약을 가질 수 있다. 여러 .NET 인터페이스를 정의하고 각각에 `ServiceContract` 속성을 부여한 후, 서비스 클래스에서 이 인터페이스들을 모두 구현하면 된다.

`ServiceContract` 및 `OperationContract` 속성은 기존 계약을 참조하는 인터페이스를 가질 수 있으며, 인터페이스 버전 관리도 가능하다.

서비스 계약에는 명시적 또는 암묵적 데이터 계약이 반드시 대응되어 서비스가 사용하는 데이터를 정의한다. 서비스가 필요로 하는 데이터가 단순한 데이터 형식([정수], 부동 소수점 수 등)이면 WCF가 자동으로 데이터 계약을 정의한다. 복잡한 객체나 구조체는 명시적으로 정의해야 한다. 데이터 계약은 데이터의 직렬화 방법을 규정한다.

데이터 계약은 `DataContract` 속성을 클래스나 구조체에 부여하여 정의한다. 서비스에서 사용되는 구조체의 멤버에는 `DataMember` 속성을 부여해야 서비스와 클라이언트 간에 값이 전송된다.

서비스의 일반적인 동작과 특정 작업은 각각 `ServiceBehavior` 속성과 `OperationBehavior` 속성으로 제어된다. `ServiceBehavior` 속성에는 여러 속성이 있다. `ConcurrencyMode` 속성은 서비스가 여러 클라이언트에 동시에 제공되는지 여부를, `InstanceMode` 속성은 단일 인스턴스로 모든 요청에 대응할지, 요청마다 새 인스턴스를 생성할지, 세션마다 생성할지를 지정한다.[1]

2. 2. 엔드포인트 (Endpoints)

WCF 서비스는 다음 세 가지 부분으로 구성된다.

  • 서비스(service) 클래스: 제공해야 할 서비스를 구현한다.
  • 호스트 환경(host environments): 서비스의 환경이다.
  • 엔드포인트(endpoints): 클라이언트와 연결하는 부분이다.


WCF 서비스와의 모든 통신은 엔드포인트를 통해 이루어진다. 엔드포인트에는 "컨트랙트(contract)"로서 해당 엔드포인트를 통해 Service 클래스의 어떤 메서드에 접근할 수 있는지가 지정되어 있다. 즉, 엔드포인트에 따라 사용할 수 있는 메서드가 다를 수도 있다. 또한 클라이언트와의 통신 방법을 지정하는 "바인딩(binding)"이 있으며, 엔드포인트가 존재하는 주소도 지정되어 있다.

WCF 클라이언트는 엔드포인트를 통해 WCF 서비스에 연결된다. 각 서비스는 하나 이상의 엔드포인트를 통해 해당 계약을 노출한다. 엔드포인트는 주소(엔드포인트에 액세스할 수 있는 위치를 지정하는 URL)와 데이터 전송 방식을 지정하는 바인딩 속성을 갖는다.[1]

니모닉 "ABC"는 주소(Address)/바인딩(Binding)/계약(Contract)을 기억하는 데 사용할 수 있다. 바인딩은 서비스를 액세스하는 데 사용되는 통신 프로토콜, 보안 메커니즘 사용 여부 등을 지정한다. WCF는 HTTP를 통한 SOAP, TCP를 통한 SOAP, 메시지 큐를 통한 SOAP 등 가장 일반적인 통신 프로토콜에 대한 미리 정의된 바인딩을 포함한다. WCF 엔드포인트와 클라이언트 간의 상호 작용은 SOAP 봉투를 사용하여 수행된다. SOAP 봉투는 단순한 XML 형태로 되어 있어 WCF는 플랫폼 독립적이다. 클라이언트가 엔드포인트를 통해 서비스에 액세스하려면 계약을 알아야 할 뿐만 아니라 엔드포인트에서 지정한 바인딩도 준수해야 한다. 따라서 클라이언트와 서버 모두 호환 가능한 엔드포인트를 가지고 있어야 한다.[2]

각 서비스는 하나 이상의 종착점을 통해 계약(Contract)을 공개한다. 종착점에는 URL로 표시된 주소가 있고, 바인딩 프로퍼티에서 데이터의 전송 방식을 지정한다.[3]

Address/Binding/Contract 3개의 요소를 "ABC"라고 한다.[4]

2. 3. 동작 (Behaviors)

Behaviors는 서비스 또는 클라이언트 기능을 수정하거나 확장하는 형식이다. 개발자는 Behaviors를 사용하여 메시지를 보내거나 받을 때 적용되는 사용자 지정 처리, 변환 또는 검사를 만들 수 있다. Behaviors의 사용 예는 다음과 같다.

  • 서비스와 함께 메타데이터를 게시할지 여부를 제어한다.
  • 가상화 또는 토큰 관리와 같은 서비스에 보안 기능을 추가한다.
  • 추적, 추적 또는 로깅과 같은 메시지에 대한 정보를 기록한다.
  • 메시지 또는 매개변수 유효성 검사
  • 특정 메시지가 도착했을 때 사용자에게 알리는 것과 같이 메시지를 수신할 때 모든 추가 작업을 호출한다.


Behaviors는 서비스 확장을 위해 `IServiceBehavior` 인터페이스, 엔드포인트를 위해 `IEndpointBehavior`, 서비스 계약을 위해 `IContractBehavior` 인터페이스 또는 작업에 대해 `IOperationBehavior`를 구현한다. 서비스 동작은 단일 작업에 특정되지 않고 서비스 전체의 메시지 처리에 사용된다.

서비스의 일반적인 동작과 특정 작업은 각각 `ServiceBehavior` 속성과 `OperationBehavior` 속성으로 제어된다. `ServiceBehavior` 속성에는 몇 가지 속성이 있다. `ConcurrencyMode` 속성은 서비스가 동시 병렬로 여러 클라이언트에 제공될지 여부를 나타낸다. `InstanceMode` 속성은 단일 인스턴스로 모든 요청에 대응할 것인지, 아니면 요청마다 새로운 인스턴스를 생성할 것인지, 또는 세션마다 생성할 것인지를 지정한다.

3. 상호 운용성

WCF는 동일한 윈도우 머신에서 실행되는 WCF 애플리케이션, 다른 윈도우 머신에서 실행되는 WCF, 또는 윈도우나 다른 운영 체제에서 실행되는 자바와 같은 플랫폼에서 구축된 표준 웹 서비스와의 상호 운용성을 지원한다.[6] WCF 4는 SOAP 외에도 HTTP 또는 HTTPS를 통해 외부 통신을 위한 비-SOAP XML, RSS, JSON, 그리고 바이너리 형식을 지원한다.[6]

WCF에서는 프로세스 간 통신에 SOAP 메시지를 사용한다. 따라서 WCF 기반이 아닌 애플리케이션과도 SOAP 메시지를 사용할 수 있다면 상호 통신이 가능하다. WCF 프로세스가 비 WCF 프로세스와 통신하는 경우, SOAP 메시지는 XML 기반의 인코딩을 사용하지만, WCF 프로세스끼리는 더 최적화된 이진 형식(.NET Binary XML)의 인코딩도 가능하다.[8] 어느 경우든 SOAP 형식(Infoset)을 준수한다.

4. 서비스와의 통신

WCF는 프로세스 간 통신에 SOAP 메시지를 사용한다. 따라서 WCF 기반이 아닌 애플리케이션과도 SOAP 메시지를 사용할 수 있다면 상호 통신이 가능하다. WCF 프로세스가 비 WCF 프로세스와 통신하는 경우, SOAP 메시지는 XML 기반의 인코딩을 사용하지만, WCF 프로세스끼리는 더 최적화된 이진 형식(.NET Binary XML)의 인코딩도 가능하다[8]。어느 경우든 SOAP 형식(Infoset)을 준수한다.

WCF 서비스와의 통신을 클라이언트 측면에서 보면 메서드 호출로 서비스를 이용하는 것처럼 보이며, 일종의 RPC 기법이 된다. 서비스 호출은 블록될 수 있으며, 클라이언트는 해당 서비스 요청이 실행될 때까지 대기하게 된다. 클라이언트는 서비스와의 연결에 프록시 패턴을 사용해야 한다. 이를 통해 서비스 엔드포인트와의 연결이 객체로 추상화된다. 프록시 객체의 메서드 호출은 모두 서비스 요청이 되며, 프록시는 WCF 서비스가 반환한 결과를 호출 측에 반환한다.

WCF는 로컬 프록시 생성을 처리한다. 엔드포인트의 설정에 따라 하위 처리를 담당하며, 호출 측에 필요한 형식으로 결과를 반환한다.

WCF는 메시지에 서비스가 사용하는 데이터를 포함하여 전달하는 호출 방식뿐만 아니라 블록되지 않는 호출 방법도 지원한다. 메시지를 사용한 통신은 반드시 프록시 객체를 필요로 하지 않는다. 그 경우, 반환되는 데이터도 메시지 형식으로 반환된다. 호출 측은 서비스의 처리가 완료될 때까지 블록된다. 블록되지 않게 하려면 메시지 큐를 사용하여 메시지를 주고받아야 한다. 메시지 큐를 사용하면 서비스가 일시적으로 다운된 상태에서도 애플리케이션을 계속 실행할 수 있으며, 서비스가 복구되었을 때 쌓여 있던 요청이 처리된다.

WCF 클라이언트는 엔드포인트를 통해 WCF 서비스에 연결된다. 각 서비스는 하나 이상의 엔드포인트를 통해 해당 계약을 노출한다. 엔드포인트는 주소(엔드포인트에 액세스할 수 있는 위치를 지정하는 URL)와 데이터 전송 방식을 지정하는 바인딩 속성을 갖는다.

니모닉 "ABC"는 주소/바인딩/계약을 기억하는 데 사용할 수 있다. 바인딩은 서비스를 액세스하는 데 사용되는 통신 프로토콜, 보안 메커니즘 사용 여부 등을 지정한다. WCF는 HTTP를 통한 SOAP, TCP를 통한 SOAP, 메시지 큐를 통한 SOAP 등 가장 일반적인 통신 프로토콜에 대한 미리 정의된 바인딩을 포함한다. WCF 엔드포인트와 클라이언트 간의 상호 작용은 SOAP 봉투를 사용하여 수행된다. SOAP 봉투는 단순한 XML 형태로 되어 있어 WCF는 플랫폼 독립적이다. 클라이언트가 엔드포인트를 통해 서비스에 액세스하려면 계약을 알아야 할 뿐만 아니라 엔드포인트에서 지정한 바인딩도 준수해야 한다. 따라서 클라이언트와 서버 모두 호환 가능한 엔드포인트를 가지고 있어야 한다.

2007년 11월 .NET Framework 3.5가 출시되면서 마이크로소프트는 WCF에 JSON 직렬화 형식에 대한 지원을 추가하는 인코더를 출시했다. WCF는 동일한 윈도우 머신에서 실행되는 WCF 애플리케이션, 다른 윈도우 머신에서 실행되는 WCF, 또는 윈도우나 다른 운영 체제에서 실행되는 자바와 같은 플랫폼에서 구축된 표준 웹 서비스와의 상호 운용성을 지원한다. WCF 4는 SOAP 외에도 HTTP 또는 HTTPS를 통해 외부 통신을 위한 비-SOAP XML, RSS, JSON, 그리고 바이너리 형식을 지원한다.[6]

5. .NET Core 이식

ASP.NET Core gRPC로 이전하는 것이 권장된다[9]..NET 재단에서 .NET Core 기반의 WCF 호환 라이브러리[10]를 제공하고 있지만, 이는 클라이언트 측의 서브세트에 불과하다. 서버 측(WCF 서비스 호스트)을 포함하여 WCF를 .NET Core로 이식하기 위한 커뮤니티 기반의 노력으로, Core WCF 프로젝트가 시작되었다[11]

참조

[1] 웹사이트 Hosting WCF Services http://www.code-maga[...] CODE Magazine
[2] 웹사이트 Deploying an Internet Information Services-Hosted WCF Service http://msdn.microsof[...] Microsoft Developer Network 2021-09-15
[3] 웹사이트 CoreWCF 1.0 has been Released, WCF for .NET Core and .NET 5+ https://devblogs.mic[...] 2022-04-28
[4] 뉴스 AJAX Integration and JSON Support http://msdn2.microso[...] Microsoft 2008-04-24
[5] 뉴스 Custom Authentication and Authorization in WCF https://www.tatvasof[...] TatvaSoft UK 2018-11-14
[6] 뉴스 Introducing Windows Communication Foundation in .NET Framework 4 http://msdn.microsof[...] Microsoft 2011-07-17
[7] 웹사이트 WCF (Windows Communication Foundation) チュートリアル 前編 (1/5):CodeZine(コードジン) https://codezine.jp/[...]
[8] 웹사이트 大規模データとストリーミング - WCF | Microsoft Docs https://docs.microso[...]
[9] 웹사이트 ASP.NET Core gRPC に WCF を移行する理由 | Microsoft Docs https://docs.microso[...]
[10] Github dotnet/wcf: This repo contains the client-oriented WCF libraries that enable applications built on .NET Core to communicate with WCF services. https://github.com/d[...]
[11] Github CoreWCF/CoreWCF: Main repository for the Core WCF project https://github.com/C[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com