본문 바로가기

IT 살이/04. 기술 - 프로그래밍

[연재 05] WCF 관련 용어들

앞에서는 "Hello world WCF 버전"을 제작해 봄으로써 WCF 애플리케이션을 작성하는 단계를 하나씩 짚어봤다. 그 과정에서 나온 용어들을 몇개 정리해 보고자 한다.

  l      
엔드 포인트(endpoint)


엔드 포인트들은 메세지를 주고 받는 종점으로서 메세지 교환에 필요한 정보를 정의한다. WCF 서비스는 하나 또는 이상의 애플리케이션 엔드 포인트를 노출시킨다. 클라이언트는 서비스가 노출시킨 엔드 포인트와 상호작용할 수 있는 엔드 포인트를 사용해야 한다.


l       
바인딩(binding)

바인딩(binding) "엔드 포인트(endpoint)에 연결하는데 필요한 것들을 지정하기 위해서 사용되는 객체들"이라고 정의할 수 있겠다. 바인딩은 엔드 포인트가 어떻게 바깥 세계와 통신을 하는지를 정의한다.  바인딩을 구성하는 바인딩 요소(binding elements)라는 것이 있어서 여러 바인딩 요소들이 차례로 쌓여서 바인딩을 정의한다고 보면 된다. 예를 들어서 전송(transport, TCP or HTTP)를 정의하는 요소가 있고 인코딩 방식(텍스트 or 바이너리등)을 정의하는 요소가 있다. 그외 보안, 데이터 무결성 등을 결정하는 바인딩 요소들을 추가할 수 있다.

바인딩에 포함된 정보는 복잡하다. 그리고 어떤 요소들은 같이 사용될 수 없는 경우도 있다. 이런 이유로 해서 WCF에는 미리 정의된 바인딩(System-provided bindings)가 있다. 대부분의 애플리케이션에서는 이런 미리 정의된 바인딩을 사용해도 무리가 없을 것이다. 미리 정의된 것이 마음에 안들면 나름대로 정의할 수 있다는 말이기도 하다.

바인딩은 코드 또는 환경 설정을 통해서 정의되거나 설정될 수 있다. 만약 바인딩이 코드와 환경 설정을 이용하여 동시에 정의된다면, 코드에 의한 정의가 환경 설정 파일에 의해 설정된 내용을 오버라이트하게 된다.

WCF 서비스가 IIS의 호스팅을 받게 된다면 환경 설정 파일로 web.config를 사용하게 된다. 그리고 VS.NET을 사용하여 클라이언트 애플리케이션을 제작하는 경우는 익히 하는 대로 app.config를 이용하게 된다.


l       
서비스 컨트랙트

컨트랙트 하면 얼른 인터페이스가 떠오를 것이다. 맞다. 서비스 컨트랙트를 정의하면 이것은 인터페이스로 표현하게 된다( 클래스를 이용해서 서비스 컨트랙트를 표현해도 되지만 주로 인터페이스를 권장한다)
서비스 컨트랙트에서는 서비스의 요구 조건을 표시만 하고, 어떻게 그 조건이 충족되어야 하는지는 말하지 않는다.
서비스 요구 조건이라하면 다음과 같은 것들이 있을 수 있다. 예를 들어, 메세지 암호화 , 메세지 타입, 데이터 타입, 메세지 교환 패턴, 세션 지원등. 이런 요구을 구체적으로 어떻게 충족시켜야 하는지는 서비스의 구현 단계에서 환경 설정, 바인딩 설정을 통해서 표시하게 된다. 그리고 마지막으로 호스트 애플리케이션에서는 서비스의 환경설정이나 바인딩을 통해서 제시한 요구 조건을 지원할 수 있어야 한다.

예를 들어, 서비스 컨트랙트에서 세션을 지원할 필요가 있다는 것을 표시했다면, 그 서비스의 요구 조건을 충족시킬 수 있도록 바인딩을 설정해야 한다. 그렇지 않으면 서비스는 작동하지 않을 것이다. 만약 IIS를 호스팅 애플리케이션으로 사용하는 서비스가 윈도우 통합 인증(Windows Integratred Authentication)을 요구한다면, 서비스가 실행되는 웹 애플리케이션의 윈도우 통합 인증이 활성화되고 익명 액세스 가능 옵션이 언체크되어야 한다.

요약을 하면 다음과 같다.

1. 서비스 컨트랙트에서 요구 조건을 표시한다.

2. 환경설정과 바인딩을 통해서 요구 충족을 위한 구체적인 방법을 표시(또는 코딩)한다.

3. 호스팅 애플리케이션에서는 제시한 요구 조건에 대한 방법을 제공한다.


l       
데이터 컨트랙트

서비스 컨트랙트를 정의하는 것에는 서비스의 오퍼레이션의 파라미터값과 리턴값을 통해서 오가는 데이터 타입을 정의하는 것이 포함된다. 이런 타입에 대한 정의를 데이터 컨트랙트라고 한다. 오퍼레이션의 파라미터와 리턴값으로 사용된다는 것은 그 타입이 모두 직렬화가 가능해야 한다는 의미를 포함하고 있다. 즉 타입의 객체에서 바이트 스트림으로 그리고 바이트 스트림에서 다시 타입의 객체로 변환이 가능해야 한다는 것이다.

이 데이터 컨트랙트에 대한 내용이 다음 포스트 주제가 될 것이다.