Skip to main content
3일차: 닷넷분산 기술의 이해박경훈
인피니트 닷넷교육1일차 – 닷넷 소개, C#특징2일차 – UI 기술 WPF, Expression Blend 소개3일차 – 닷넷 분산 통신기술의 소개4일차 – 프로젝트 설계 및 팀시스템, 유닛테스팅5일차 – C# 3.0과 C#4.0 추가된 문법 살펴보기
강사소개현) 캠든소프트 대표이사     국내 닷넷 최대 커뮤니티 “HOONS닷넷” 운영자국제 닷넷 연합 그룹회 한국 유저그룹 리더전) 2002~2010 소프트웨어 엔지니어로 활동     2005년 마이크로소프트 최연소 MVP수상     2005~2010년 마이크로소프트 Visual C# MVP     10여권의 IT개발 서적 집필 및 번역     KBS 미래를 짊어질 젊은 주역 60명 선정
진행순서닷넷 분산 기술의 소개
WCF의 소개
WCF 도입 사례닷넷 분산 기술의 소개
분산 기술의 발전사닷넷 1.0 ~닷넷4.0 ~현재COM+WCFDCOMCOM+COMDCOMDLLMTS웹서비스웹서비스 & WSE(ws-*)리모팅서비스MTSMSMQ닷넷 리모팅서비스
닷넷 엔터프라이즈 서비스DCOMMTS+DCOM
닷넷 엔터프라이즈 서비스MTS
로컬 트랜잭션 vs 분산 트랜잭션ClientServerAccountsADO.NETAccount ALocal TransactionAccount BOLE DBSQL TDSClientComponent AComponent BDCOMTXID=1234TXID=1234Distributed TransactionCoordinatingDTCParticipatingDTCTM ProtocolAccount AAccount BTXID=1234TXID=1234Server AServer B
COM+ 처리 예제 코드[Transaction(TransactionOption.Required)]class A : ServicedComponent{  [AutoComplete]  public void foo()  {    B obj = new B();    try{      obj.TransactionTest();    }    finally{      obj.Dispose();    }  }} [Transaction(TransactionOption.Supported)]class B : ServicedComponent{  [AutoComplete]  public void TransactionTest(){    // 데이터베이스 액세스 코드}}
닷넷리모팅 서비스프로토콜분산 어플리케이션을 위한 기반다른 프로세스/장비간 통신DCOM 을 대체한다.
닷넷리모팅 서비스
리모팅 서비스
닷넷 웹 서비스의 등장 배경
웹 서비스의 구조
웹 서비스 메시지 소개SOAP Envelope<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" ><soap:Header>  <UserName>홍길동</UserName></soap:Header>  <soap:Body>    <Add xmlns="http://tempuri.org/" />      <a>5</a>      <b>8</b>    </Add>  </soap:Body></soap:Envelope>HeaderBody
웹 서비스의 처리 과정
WS-* Protocol의 발전
웹 서비스vs리모팅 서비스
MSMQ 서비스의 소개
서비스 프로그램작업요청메시지를 순차적으로 실행메시지를 쌓음MSMQ웹 서버MSMQ 서비스의 소개클라이언트
WCF 소개
서비스의 정의모바일 이용 고객고객모바일 이용 고객고객
통합된 서비스 모델.NET RemotingASMX다른 플랫폼과의상호운용성닷넷 고유의원격 객체호출 기술Attribute-      기반의프로그래밍Message-기반의 프로그래밍WS-*Protocol지원Enterprise ServicesSystem.MessagingWSE
MessageWCF Service ClientCallerService
ABCABCABCEndPointCallerServiceMessageAddressBindingContract(Where)(How)(What)
TransportEncoderProtocol(s)TransportEncoderProtocol(s)EndPointServiceContractandBehaviorsClientDispatcherBindingAddress
CLR to Contract TypesWSDLCLRService ContractCLRXML SchemaData ContractCLRSOAPMessage Contract
Binding (How?)Transport 	Http, TCP, Named Pipes, MSMQEncodingText, Binary, MTOMProtocolSecurity, Transaction, Reliability
Binding (How?)N = None | T = Transport | M = Message | B = Both | RS = Reliable Sessions
Address (Where?)Address는 서비스를 제공하는 주소의 역할Address는 URI(Uniform Resource Identifier)의 형태http://www.x.com:80/Service/MyEndPointnet.tcp://www.x.com:8080/Service/MyEndPointnet.pipe://www.x.com/Service/MyEndPointnet.msmq://www.x.com/MyQueue
HostingIIS HostingWindows ServiceWindows Activation Service (WAS)윈도우 활성화 서비스가 실행되고있는 상태에서 WCF 응용 프로그램이 자동으로 활성화되고 서비스 실행Self HostingServiceHost class
EndPoint
WCF의 메시지 전달 유형Simplex (One-Way) : 단 방향통신으로 특정 로그를 쌓거나 할 경우 간단한 작업에 적합(One Way)Request-Reply : 동기 양방향 통신 방식으로 특정한 메시지를 보내고 전달 받는 방식Duplex : 비 동기 양방향 통신 방식으로 특정한 메시지를 원격으로 보내고 전달 받는 방식
WCF의메시지전달유형 : Simplex (One-Way) 단 방향 통신으로 특정 로그를 쌓거나 할 경우 간단한 작업에 적합 (One Way)
WCF의메시지전달유형: Request-Reply동기 양방향 통신 방식으로 특정한 메시지를 보내고 메시지를 다시 전달 받는 방식
WCF의 메시지 전달 유형 : Duplex비 동기 양방향 통신 방식으로 특정한 메시지를 원격으로 보내고 전달 받는 방식
* 속성CallbackContract, ConfigurationName,HasProtectionLevel, Name, NamespaceProtectionLevel, SessionMode, TypeId* 속성Action, AsyncPattern , TypeIdHasProtectionLevel, IsInitiating, IsOneWay, IsTerminating, Name, ProtectionLevel, ReplyActionServiceContract[ServiceContract]public interface ICalculator{[OperationContract]  ComplexProblem SolveProblem (ComplexProblem p);}
Operation Contract: OneWayCallerServiceMessage[ServiceContract]public interface IOneWayCalculator{    [OperationContract(IsOneWay=true)]    void StoreProblem (ComplexProblem p);}
MessageMessageService Contract: DuplexCallerService[ServiceContract(CallbackContract= typeof(ICalculatorResults)]public interface ICalculatorProblems{    [OperationContract(IsOneWay=true)]    void SolveProblem (ComplexProblem p);}
WCF의 메시지 전달 유형
WCF의 인스턴스의 관리Per-Call: 메서드가 호출됨에 동시에 인스턴스 개체가 제거됨- 일반적인 웹 서비스와 유사함, 기본  자원효율 우수함- COM+의 JIT방식 .NET Remoting의 Well-Known SingleCall과 유사Per-Session: 기본적으로 세션이 지원됨(Default Value)  - 클라이언트에서 파괴해야 개체가 제거됨 - 신뢰할 수 있는 전송 세션에서 지원하는 바인딩SingleCall: 하나의 인스턴스만 생성됨 - 한 번에 하나의  클라이언트 호출만 실행할 수 있는 동기화 작업이 필요함- 자유롭게 인스턴스 초기화 가능
WCF의 인스턴스 관리 유형: PerCallPer-Call: 메서드가 호출됨에 동시에 인스턴스 생성되고 제고됨  - 일반적인 웹 서비스와 유사함, 기본  자원효율 우수함- COM+의 JIT방식 .NET Remoting의 Well-Known     SingleCall과 유사
WCF의 인스턴스 관리 유형: PerSessionPer-Session: 기본적으로 세션이 지원됨(Default Value)  - 클라이언트에서 파괴해야 개체가 제거됨- 신뢰할 수 있는 전송 세션에서 지원하는 바인딩
WCF의 인스턴스 관리 유형: SingleCallSingleCall: 하나의 인스턴스만 생성됨 - 한 번에 하나의  클라이언트 호출만 실행할 수 있는 동기화    작업이 필요함- 자유롭게 인스턴스 초기화 가능
WCF의 인스턴스 관리VSPerSessionPerCall
Client BClient AClient C채팅 서비스의 설계WCFService
요구사항 설정: 채팅 서비스채팅 서비스는 별도의 응용 프로그램으로 관리 된다.닷넷끼리만 통신을 하기 때문에 상호 운용성은 고려하지 않아도 된다.TCP 통신을 이용하기 원한다.단순한 Request-Reply가 아닌 메시지를 클라이언트에서 서버로 서버에서 클라이언트로 전송 할 수 있어야 한다.채팅은 연결 지향적이기 때문에 사용자의 인스턴스가 관리되어야 한다.
채팅 서비스 요소 분석 #1 (Hosting)채팅 서비스는 별도의 응용 프로그램으로 관리 된다.IIS HostingSelf Hosting
채팅 서비스 요소 분석 #2 (Binding)클라이언트들은 모두 닷넷 환경이다.단순한 Request-Reply가 아닌 메시지를 클라이언트에서 서버로 서버에서 클라이언트로 비 동기 전달 되어야 한다.로컬이 아니기 때문에 TCP 통신을 이용해야 한다.
채팅 서비스 요소 분석 #2 (Binding)클라이언트들은 모두 닷넷 환경이다.단순한 Request-Reply가 아닌 메시지를 클라이언트에서 서버로 서버에서 클라이언트로 비 동기 전달 되어야 한다.로컬이 아니기 때문에 TCP 통신을 이용해야 한다.
- PerSession채팅 서비스 요소 분석 #3 (Instance)채팅은 연결 지향적이기 때문에 사용자의 인스턴스가 관리되어야 한다.PerSession  or PerCall or SingleCall
WCF 채팅 서비스 구현 예제WCFService
WCF 도입사례
i사의 CCTV 관리 솔루션
EndpointEndpointEndpointEndpointEndpoint서버 전체 통신구조Sync ServiceData ServiceControl ServerClient ApplicationSync ServiceDBServicePlayerCast ServerExternal Device Client ApplicationRS-232CCamera & External DeviceIConsoleDBServiceSocketSocketEndpointEndpointEndpointEndpointEndpointDB
서버 전체 통신구조Sync Service기존 TCP 소켓 통신을 대체함연결 지향적으로 실시간으로 데이터를 처리함Data Service기존 웹 서비스 통신을 대체함비연결 지향적으로 DataBase관련 내용을 처리함
EndpointEndpointEndpointEndpointEndpoint서버 전체 통신구조PlayerWCFServiceWCFServiceSync ServiceControlServerConsoleData ServiceEndpointEndpointEndpointDB
서비스 프로그램들의 소개Control ServerClient ApplicationSync ServiceDBServiceIConsole과 Player간의 통신을 지원하고 외부 장비와의 통신 또한 제공한다.Socket을 이용하여 Sync 서비스와 장비와의 데이터 전달을 중개한다.Windows ServiceExternal Device Client ApplicationDll for Device DBServiceFor Linux사이트 별로 다른 장비가 설치되기 때문에 통신 프로토콜이 일정하지 않기 때문에 별도의 DLL로 분리하여 관리한다. (e.g) sungjin.dll, eunsung.dllDB의 정보를 교환하기 위한서비스로 Linux용으로는 별도의 서비스를 제공한다.
Sync Service – #1. 소개Client ApplicationPlayerSyncServiceExternal Device Client ApplicationCameraIConsole주로 IConsole에서 Player를 조정하기 위한 메시지를 중개하는 서비스로 사용된다.특정 카메라에 고화질 영상과 같은 요청을 위해서 Camera쪽에 메시지를 전달하기도 한다.External Device 서비스의 경우 각각의 장비 별로 달라지게 되는 통신 모듈을 별도의 로직으로 분리하기 위해서 분리해 놓았다.
Sync Service - #2. 구현WCF 서비스를 이용한 TCP기반의서비스- Address: net.tcp://서버주소:20000/CS- Binding: netTcpBinding- Contract: InnotiveCSClassLib- Hosting: Windows Service관련 프로젝트 파일- InnotiveCSClassLib: 계약 인터페이스 & 실제 동작을 위한 DLL- InnotiveControlServerWindowsService: 윈도우 서비스에 등록하여 호스팅하기 위한 프로젝트- InnotiveControlServerSetup: 윈도우 서비스를 간편하게 설치할 수 있게 해주는 셋업 프로젝트설치되는 경로- C:\Program Files\Innotive\InnotiveControlServer
Sync Service – #3. 설치 & 서비스셋업 프로그램 설치Windows Service ->InnotiveControlServer->시작
Data Service- #1. 소개DataServiceInnotive FrameworkStoredProcedurePlayerIConsolePayer나 Iconsole의 동작에 필요한 여러가지 정보들을 주고 받기 위한 데이터 서비스DB
Data Service - #2. 구현WCF 서비스를 이용한 HTTT기반의서비스(웹 서비스)- Address: http://서버주소:15777 - Binding: basicHTTPBinding- Contract: IService- Hosting: IIS7관련 프로젝트 파일- http://localhost:15777 : 서비스 메시지들의 인터페이스들이 정의되어 있고 메시지들을 구현하고 있다. - InnotiveFramework: 실제 DB와 통신하는 로직과 에러&호출에 대한 로그를 정의하고 있다.
TCP 통신 이슈소켓 연결 유지를 위한 처리서버와 클라이언트 간의 PING 메시지비동기 메시지를 순차적으로 사용하기 위한 방법큐활용– 스레드 삽질 스토리
EndpointEndpointEndpoint스레드 튜닝초창기 단순한 설계클라이언트 인스턴스큐클라이언트 인스턴스Player클라이언트 인스턴스큐에 담아 스레드1개를 만들어 메시지를 순차적으로 처리한다.TimeOut의 이슈
EndpointEndpointEndpoint스레드 튜닝다시 생각한 설계클라이언트 인스턴스큐클라이언트 인스턴스큐Player클라이언트 인스턴스큐
Q&A