본문 바로가기
프로그래밍

WCF(Windows Communication Foundation) 서비스 개발[0]

by minimax95 2020. 5. 13.

'서버와 클라이언트 간의 통신을 어떻게 구현할 것인가?' 하는 부분은 프로젝트 개발 시 항상 고민의 대상이 됩니다.

보통은 .NET Framework의 Socket 클래스를 이용하여 TCP 또는 UDP로 개발을 하곤 했지만

이번에 새롭게 WCF(Windows Communication Foundation)을 적용해 보았습니다.

 

개발하면서 참고했던 도서는 '유수석의 WCF 바이블'인데,

WCF의 기초적인 프로그래밍 기법부터 고급 기능을 포함하는 WCF 확장 부분까지 자세한 설명이 있어서 도움이 많이 되었습니다.

 

여기서는 도서의 내용을 참고하여 WCF에 대한 기본 내용을 정리하는 개념으로 포스팅을 올리고자 합니다.

WCF의 정의는 XML 웹 서비스 기반의 차세대 서비스 통신 프레임워크라 할 수 있습니다. 뭔가 느낌이 오지는 않지만 웹 서비스 기반의 통신 프레임워크로 생각하면 될 것 같습니다.

보통 통신에서는 서버 - 클라이언트라는 용어로 사용하고 있지만 WCF에서는 서버를 서비스란 용어로 사용하고 있습니다.  서비스와 클라이언트 간에 XML 메시지를 주고받음으로써 클라이언트가 서비스에게 기능적인 요청을 수행하고 서비스가 그 결과를 클라이언트에게 반환해주는 메커니즘으로 이해할 수 있습니다.

이 때문에 WCF를 메시징 프레임워크라고도 부릅니다.

 

 

이제 개발을 위해 본격적으로 WCF에서 등장하는 주요 개념에 대해 정리해 보겠습니다.

먼저 WCF에서 가장 핵심이 되는 세 가지가 있습니다.

바로 주소(address), 바인딩(binding), 계약(contract)입니다.

주소는 서비스를 호출하기 위해 사용되는 것으로 서비스 위치를 나타내는 URI를 말합니다.

 

바인딩은 XML 메시지를 전송할 때 어떤 프로토콜을 사용할 것인지, 데이터 포맷을 어떻게 해야 할지, 보안을 적용할 것인지 등을 결정할 수 있는 요소들의 묶음이라고 할 수 있습니다.

 

WCF 주소는 바인딩이 어떤 프로토콜을 사용할 것인가에 모양새가 조금씩 차이가 있는데

'http://~', 'https://~', 'net.tcp://~', 'net.pipe://~', 'net.msmq://~'로 사용할 수 있습니다.

 

계약이란 WCF 서비스가 제공하는 기능들에 대한 인터페이스를 말하는데 이는 아래에서

코드를 이용해서 다시 살펴보겠습니다.

 

코드를 살펴보자면

먼저 WCF 개발을 위해 아래의 핵심 어셈블리를 참조해야 합니다.

System.ServiceModel

 

다음은 위에서 언급한 계약 부분인데

서비스가 외부 세계에 노출할 서비스의 계약을 인터페이스로 정의합니다.

인터페이스에는 ServiceContract 특성을 명시해주고

서비스에 사용될 메서드 역시 OperationContract 특성 명시해야 합니다.

WCF 서비스 계약 선언을 아래와 같이 선언해 줍니다.

 

// 서비스 계약 선언

[ServiceContract]

public interface IHelloWorld

{

    [OperationContract]

    string SayHello{};

}

 

이후 서비스 계약을 구현하는 클래스(서비스 타입이라 함)를 작성해줍니다.

 

// 서비스 타입 구현

public class HelloWorldWCFService : IHelloWorld

{

    public string SayHello{}

    {

        return “Hello WCF World”;

    }

}

 

즉, 서비스 계약을 명시한 인터페이스를 구현하는 클래스(서비스 타입)를 정의하면

WCF 통신 메커니즘을 이용할 수 있습니다.

 

다음 포스팅에서는 위에서 살펴본 서비스 계약을 이용하는 WCF 서비스 호스트와 WCF 서비스 클라이언트 

구현에 대해서 살펴보겠습니다.

 

감사합니다.

 

 

 

댓글