Web Server/IIS

WCF 와 IIS 의 관계 및 환경 설정

박쿠리 2024. 9. 1. 19:06

WCF 란?

WCF (Windows Communication Foundation) 는 Microsoft 에서 만든 통신 (Communication) 프레임워크.

다양한 네트워크 프로토콜과 데이터 형식을 지원하며, 분산 컴퓨팅 환경에서 애플리케이션 간의 통신을 쉽게 만들 수 있도록 설계되었다.

서비스는 하나 이상의 엔드포인트를 통해 외부 애플리케이션과 통신할 수 있다.

쉽게 말하면 WCF 는 프로그램끼리 안전하게 대화할 수 있게 해주는 기술이다.

 

*Endpoint : 클라이언트가 서비스를 호출할 때 사용하는 주소, 바인딩 및 계약을 정의

  • Address : 서비스가 어디에서 호스팅되고 있는지 나타내는 URL
  • Binding : 서비스가 클라이언트와 통신하기 위해 사용할 프로토콜과 보안 요구 사항을 정의 (ex) HTTP, TCP, ...등)
  • Contract : 서비스가 제공하는 기능이나 메서드를 정의하는 인터페이스. 클라이언트는 계약에 정의된 메서드를 호출하여 서비스를 사용할 수 있다.

WCF 서비스는 여러 가지 방식으로 호스팅될 수 있다. 

  • IIS(Internet Information Services) : HTTP/S를 통한 통신에 적합하며, 보안, 안정성, 확장성을 제공
  • Windows 서비스 : 백그라운드 서비스로 실행되며, 서버와 같은 환경에서 오래 실행되는 프로세스에 적합
  • 콘솔 애플리케이션 : 개발 및 테스트 목적으로 간단히 wcf 서비스를 호스팅할 수 있다.
  • Windows Forms or WPF 애플리케이션 : 데스크톱 애플리케이션의 일부로 WCF 서비스를 포함할 수 있다.

WCF 와 IIS 의 관계

구분 설명
IIS 역할 WCF 서비스를 호스팅(실행) 하는 서버 역할
왜 IIS를 쓰나? HTTP 요청을 자동으로 받아주고, WCF 서비스 라이프사이클을 관리해주기 때문
이점 서버 관리(프로세스 관리, 재시작, 스케일링, 보안 인증)를 IIS가 대신 해준다.

 

WCF 서비스와 환경 설정

여기에선 IIS 토대로 설명한다. 참고로 IIS 는 HTTP(S) 기반 WCF 서비스를 호스팅하는데 가장 많이 사용되는 플랫폼이다. 웹 서버로서의 역할을 수행하며, WCF 서비스의 호스팅 및 관리 기능을 제공한다.

 

A, B 서버가 있다고 가정하자.

A 서버는 클라이언트 역할이며, 사용자가 접속한다. B 서버에서 호스팅하는 WCF 서비스에 접근하여 데이터를 요청하거나 작업을 수행한다.

B 서버는 WCF 서비스를 제공하기 위해 IIS 를 설치하고, IIS 에 WCF 서비스를 호스팅한다.

A, B 서버 모두 엔드포인트 정보가 있어야 접속이 가능하다.

 

A 서버에서 해야할 일 

A 서버는 B 서버의 WCF 서비스에 연결하기 위해 WCF 클라이언트 프록시를 생성해야 한다. A 서버의 애플리케이션은 WCF 클라이언트 코드에서 B 서버의 WCF 서비스 주소와 계약을 사용하여 서비스 메서드를 호출한다.

A 서버에선 B 서버에 정의된 엔드포인트 정보와 일치하도록 구성해야한다.

 

*Proxy : 클라이언트와 WCF 서비스 간의 통신을 추상화한 객체. 프록시는 WCF 서비스의 메서드를 로컬 메서드처럼 호출할 수 있도록 하고, 이런 메서드 호출을 실제 네트워크 요청으로 변환하여 WCF 서비스로 전달한다.

Visual Studio 에서 WCF 서비스 참조를 추가하면 자동으로 프록시 클래스를 생성해주거나, 직접 코드에서 프록시를 생성하는 방법이 있다.

 

app.config (서비스 참조 추가 시, 자동으로 엔드포인트 설정)

<configuration>
  <system.serviceModel>
    <client>
      <!-- 클라이언트 엔드포인트 설정 -->
      <endpoint 
        address="http://B-server-address/ChartService.svc" 
        binding="basicHttpBinding" 
        contract="ServiceReference1.IChartService" 
        name="BasicHttpBinding_IChartService" />
    </client>
  </system.serviceModel>
</configuration>

 

클라이언트 코드 (수동으로 엔드포인트 설정)

// WCF 서비스 계약 인터페이스 정의
[ServiceContract]
public interface IChartService
{
    [OperationContract]
    string GetChartData(string chartType);
}

// B 서버의 WCF 서비스 주소 (예시)
string serviceUrl = "http://B-server-address/ChartService.svc";

// WCF 클라이언트 생성
ChannelFactory<IChartService> factory = new ChannelFactory<IChartService>(
    new BasicHttpBinding(), new EndpointAddress(serviceUrl)
);

// 클라이언트 프록시 객체 생성
IChartService proxy = factory.CreateChannel();

// WCF 서비스 메서드 호출
string chartData = proxy.GetChartData("bar");

Console.WriteLine(chartData);

// 프록시 종료
((IClientChannel)proxy).Close();

IChartService 는 B 서버에서 제공하는 서비스 계약(interface) 를 나타내며, GetChartData 는 WCF 서비스의 메서드이다.

 

 

B 서버에서 해야할 일

 

B 서버는 IIS 를 설치한 후 , WCF 서비스 라이브러리 프로젝트를 생성하고, 필요한 인터페이스와 서비스를 정의한다.

 

WCF 기능 활성화를 위해 IIS 의 역할과 기능에서 WCF 서비스 관련 기능(WCF HTTP Activation, WCF Non-HTTP Activation 등) 을 활성화 해야한다. (제어판->프로그램->Windows 기능 켜기/끄기)

 

생성한 WCF 서비스 프로젝트를 IIS 에 배포한다. 이를 위해 '.svc' 파일, 'web.config' 파일, 기타 파일(dll..) 이 필요하다. IIS 관리자에서 새로운 애플리케이션 풀 및 사이트를 생성하고, 배포한 파일을 해당 디렉토리에 복사한다.

 

*.svc : WCF 서비스의 엔드포인트를 정의하는 파일로, 서비스의 진입점을 제공한다.

*web.config : WCF 서비스의 설정 파일로 서비스가 사용할 엔드포인트를 설정하는데 주로 해당 파일에서 이루어진다.

 

web.config

<configuration>
  <system.serviceModel>
    <services>
      <service name="MyNamespace.ChartService">
        <!-- WCF 서비스의 엔드포인트 설정 -->
        <endpoint 
          address="" 
          binding="basicHttpBinding"  
          contract="MyNamespace.IChartService" /> 
          <!--
          상대 경로로, 기본적으로 빈 문자열이다.
          HTTP 를 사용하는 기본 바인딩
          WCF 서비스의 contract
          -->
        
        <!-- 메타데이터 엔드포인트 (WCF 서비스 정보 제공) -->
        <endpoint 
          address="mex" 
          binding="mexHttpBinding" 
          contract="IMetadataExchange" />
      </service>
    </services>
    <!-- 서비스 동작 설정 -->
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 메타데이터 공개 설정 -->
          <serviceMetadata httpGetEnabled="true" />
          <!-- 디버깅 정보 설정 -->
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

 

A 서버와 B 서버 간의 통신을 위한 추가 설정

 

  • 네트워크 접근 설정: A 서버와 B 서버가 서로 다른 네트워크에 있거나 방화벽이 있는 경우, A 서버가 B 서버의 WCF 서비스에 접근할 수 있도록 네트워크 설정을 조정해야 한다. 일반적으로 HTTP(S) 요청이 가능하도록 포트를 열어야 한다(기본 HTTP 포트는 80, HTTPS는 443).
  • 보안 설정: WCF 서비스는 다양한 보안 모드(예: None, Transport, Message, TransportWithMessageCredential)를 지원한다. B 서버의 WCF 서비스가 SSL을 사용하도록 설정된 경우, A 서버는 HTTPS를 통해 서비스에 접근해야 하며, 적절한 인증서가 필요할 수 있다.
  • 서비스 참조 추가: A 서버의 애플리케이션 프로젝트에서 B 서버의 WCF 서비스에 대한 서비스 참조를 추가한다. Visual Studio에서 "Add Service Reference" 옵션을 사용하여 WCF 서비스 엔드포인트를 추가하고, 자동으로 생성된 클라이언트 프록시 클래스를 사용할 수 있다.

 

 

반응형

'Web Server > IIS' 카테고리의 다른 글

IIS (Internet Information Services) 정의  (0) 2025.04.28
포트 개방  (0) 2024.08.26