3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)

2,414 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,414
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)

  1. 1. 3일차: 닷넷분산 기술의 이해<br />박경훈<br />
  2. 2. 인피니트 닷넷교육<br />1일차 – 닷넷 소개, C#특징<br />2일차 – UI 기술 WPF, Expression Blend 소개<br />3일차 – 닷넷 분산 통신기술의 소개<br />4일차 – 프로젝트 설계 및 팀시스템, 유닛테스팅<br />5일차 – C# 3.0과 C#4.0 추가된 문법 살펴보기<br />
  3. 3. 강사소개<br />현) 캠든소프트 대표이사<br /> 국내 닷넷 최대 커뮤니티 “HOONS닷넷” 운영자국제 닷넷 연합 그룹회 한국 유저그룹 리더<br />전) 2002~2010 소프트웨어 엔지니어로 활동 2005년 마이크로소프트 최연소 MVP수상 2005~2010년 마이크로소프트 Visual C# MVP 10여권의 IT개발 서적 집필 및 번역<br /> KBS 미래를 짊어질 젊은 주역 60명 선정<br />
  4. 4. 진행순서<br /><ul><li>닷넷 분산 기술의 소개
  5. 5. WCF의 소개
  6. 6. WCF 도입 사례</li></li></ul><li>닷넷 분산 기술의 소개<br />
  7. 7. 분산 기술의 발전사<br />닷넷 1.0 ~<br />닷넷4.0 ~현재<br />COM+<br />WCF<br />DCOM<br />COM+<br />COM<br />DCOM<br />DLL<br />MTS<br />웹서비스<br />웹서비스 <br />& WSE(ws-*)<br />리모팅<br />서비스<br />MTS<br />MSMQ<br />닷넷 리모팅서비스<br />
  8. 8. 닷넷 엔터프라이즈 서비스<br />DCOM<br />MTS<br />+<br />DCOM<br />
  9. 9. 닷넷 엔터프라이즈 서비스<br />MTS<br />
  10. 10. 로컬 트랜잭션 vs 분산 트랜잭션<br />Client<br />Server<br />Accounts<br />ADO.NET<br />Account A<br />Local Transaction<br />Account B<br />OLE DB<br />SQL TDS<br />Client<br />Component A<br />Component B<br />DCOM<br />TXID=1234<br />TXID=1234<br />Distributed Transaction<br />Coordinating<br />DTC<br />Participating<br />DTC<br />TM Protocol<br />Account A<br />Account B<br />TXID=1234<br />TXID=1234<br />Server A<br />Server B<br />
  11. 11. COM+ 처리 예제 코드<br />[Transaction(TransactionOption.Required)]<br />class A : ServicedComponent<br />{<br /> [AutoComplete]<br /> public void foo()<br /> {<br /> B obj = new B();<br /> try<br />{ obj.TransactionTest(); }<br /> finally<br />{ obj.Dispose(); }<br /> }<br />}<br /> <br />[Transaction(TransactionOption.Supported)]<br />class B : ServicedComponent<br />{<br /> [AutoComplete]<br /> public void TransactionTest()<br />{ // 데이터베이스 액세스 코드}<br />}<br />
  12. 12. 닷넷리모팅 서비스<br />프로토콜<br />분산 어플리케이션을 위한 기반<br />다른 프로세스/장비간 통신<br />DCOM 을 대체한다.<br />
  13. 13. 닷넷리모팅 서비스<br />
  14. 14. 리모팅 서비스<br />
  15. 15. 닷넷 웹 서비스의 등장 배경<br />
  16. 16. 웹 서비스의 구조<br />
  17. 17. 웹 서비스 메시지 소개<br />SOAP Envelope<br /><soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" ><br /><soap:Header><br /> <UserName>홍길동</UserName><br /></soap:Header><br /> <soap:Body><br /> <Add xmlns="http://tempuri.org/" /><br /> <a>5</a><br /> <b>8</b><br /> </Add><br /> </soap:Body><br /></soap:Envelope><br />Header<br />Body<br />
  18. 18. 웹 서비스의 처리 과정<br />
  19. 19. WS-* Protocol의 발전<br />
  20. 20. 웹 서비스vs리모팅 서비스<br />
  21. 21. MSMQ 서비스의 소개<br />
  22. 22. 서비스 프로그램<br />작업요청<br />메시지를 <br />순차적으로 실행<br />메시지를 쌓음<br />MSMQ<br />웹 서버<br />MSMQ 서비스의 소개<br />클라이언트<br />
  23. 23. WCF 소개<br />
  24. 24. 서비스의 정의<br />모바일 이용 고객<br />고객<br />모바일 이용 고객<br />고객<br />
  25. 25. 통합된 서비스 모델<br />.NET Remoting<br />ASMX<br />다른 플랫폼과의<br />상호운용성<br />닷넷 고유의<br />원격 객체<br />호출 기술<br />Attribute- <br />기반의<br />프로그래밍<br />Message-<br />기반의 <br />프로그래밍<br />WS-*<br />Protocol<br />지원<br />Enterprise Services<br />System.Messaging<br />WSE<br />
  26. 26. Message<br />WCF Service Client<br />Caller<br />Service<br />
  27. 27. A<br />B<br />C<br />A<br />B<br />C<br />A<br />B<br />C<br />EndPoint<br />Caller<br />Service<br />Message<br />Address<br />Binding<br />Contract<br />(Where)<br />(How)<br />(What)<br />
  28. 28. Transport<br />Encoder<br />Protocol(s)<br />Transport<br />Encoder<br />Protocol(s)<br />EndPoint<br />Service<br />Contract<br />andBehaviors<br />Client<br />Dispatcher<br />Binding<br />Address<br />
  29. 29. CLR to Contract Types<br />WSDL<br />CLR<br />Service Contract<br />CLR<br />XML Schema<br />Data Contract<br />CLR<br />SOAP<br />Message Contract<br />
  30. 30. Binding (How?)<br />Transport <br />Http, TCP, Named Pipes, MSMQ<br />Encoding<br />Text, Binary, MTOM<br />Protocol<br />Security, Transaction, Reliability <br />
  31. 31. Binding (How?)<br />N = None | T = Transport | M = Message | B = Both | RS = Reliable Sessions<br />
  32. 32. Address (Where?)<br />Address는 서비스를 제공하는 주소의 역할<br />Address는 URI(Uniform Resource Identifier)의 형태<br />http://www.x.com:80/Service/MyEndPoint<br />net.tcp://www.x.com:8080/Service/MyEndPoint<br />net.pipe://www.x.com/Service/MyEndPoint<br />net.msmq://www.x.com/MyQueue<br />
  33. 33. Hosting<br />IIS Hosting<br />Windows Service<br />Windows Activation Service (WAS)<br />윈도우 활성화 서비스가 실행되고있는 상태에서 WCF 응용 프로그램이 자동으로 활성화되고 서비스 실행<br />Self Hosting<br />ServiceHost class<br />
  34. 34. EndPoint<br />
  35. 35. WCF의 메시지 전달 유형<br />Simplex (One-Way) : 단 방향통신으로 특정 로그를 쌓거나 할 경우 간단한 작업에 적합(One Way)<br />Request-Reply : 동기 양방향 통신 방식으로 특정한 메시지를 보내고 전달 받는 방식<br />Duplex : 비 동기 양방향 통신 방식으로 특정한 메시지를 원격으로 보내고 전달 받는 방식<br />
  36. 36. WCF의메시지전달유형 : Simplex (One-Way) <br />단 방향 통신으로 특정 로그를 쌓거나 할 경우 간단한 작업에 적합 (One Way)<br />
  37. 37. WCF의메시지전달유형: Request-Reply<br />동기 양방향 통신 방식으로 특정한 메시지를 보내고 메시지를 다시 전달 받는 방식<br />
  38. 38. WCF의 메시지 전달 유형 : Duplex<br />비 동기 양방향 통신 방식으로 특정한 메시지를 원격으로 보내고 전달 받는 방식<br />
  39. 39. * 속성<br />CallbackContract, ConfigurationName,<br />HasProtectionLevel, Name, Namespace<br />ProtectionLevel, SessionMode, TypeId<br />* 속성<br />Action, AsyncPattern , TypeId<br />HasProtectionLevel, IsInitiating, <br />IsOneWay, IsTerminating, Name, <br />ProtectionLevel, ReplyAction<br />ServiceContract<br />[ServiceContract]<br />public interface ICalculator<br />{<br />[OperationContract]<br /> ComplexProblem SolveProblem (ComplexProblem p);<br />}<br />
  40. 40. Operation Contract: OneWay<br />Caller<br />Service<br />Message<br />[ServiceContract]<br />public interface IOneWayCalculator<br />{<br /> [OperationContract(IsOneWay=true)]<br /> void StoreProblem (ComplexProblem p);<br />}<br />
  41. 41. Message<br />Message<br />Service Contract: Duplex<br />Caller<br />Service<br />[ServiceContract(CallbackContract= <br />typeof(ICalculatorResults)]<br />public interface ICalculatorProblems<br />{<br /> [OperationContract(IsOneWay=true)]<br /> void SolveProblem (ComplexProblem p);<br />}<br />
  42. 42. WCF의 메시지 전달 유형<br />
  43. 43. WCF의 인스턴스의 관리<br />Per-Call: 메서드가 호출됨에 동시에 인스턴스 개체가 제거됨- 일반적인 웹 서비스와 유사함, 기본 자원효율 우수함- COM+의 JIT방식 .NET Remoting의 Well-Known SingleCall과 유사<br />Per-Session: 기본적으로 세션이 지원됨(Default Value) - 클라이언트에서 파괴해야 개체가 제거됨 - 신뢰할 수 있는 전송 세션에서 지원하는 바인딩<br />SingleCall: 하나의 인스턴스만 생성됨 - 한 번에 하나의 클라이언트 호출만 실행할 수 있는 동기화 작업이 필요함- 자유롭게 인스턴스 초기화 가능<br />
  44. 44. WCF의 인스턴스 관리 유형: PerCall<br />Per-Call: 메서드가 호출됨에 동시에 인스턴스 생성되고 제고됨<br /> - 일반적인 웹 서비스와 유사함, 기본 자원효율 우수함- COM+의 JIT방식 .NET Remoting의 Well-Known SingleCall과 유사<br />
  45. 45. WCF의 인스턴스 관리 유형: PerSession<br />Per-Session: 기본적으로 세션이 지원됨(Default Value) - 클라이언트에서 파괴해야 개체가 제거됨- 신뢰할 수 있는 전송 세션에서 지원하는 바인딩<br />
  46. 46. WCF의 인스턴스 관리 유형: SingleCall<br />SingleCall: 하나의 인스턴스만 생성됨 - 한 번에 하나의 클라이언트 호출만 실행할 수 있는 동기화 작업이 필요함- 자유롭게 인스턴스 초기화 가능<br />
  47. 47. WCF의 인스턴스 관리<br />VS<br />PerSession<br />PerCall<br />
  48. 48. Client B<br />Client A<br />Client C<br />채팅 서비스의 설계<br />WCF<br />Service<br />
  49. 49. 요구사항 설정: 채팅 서비스<br />채팅 서비스는 별도의 응용 프로그램으로 관리 된다.<br />닷넷끼리만 통신을 하기 때문에 상호 운용성은 고려하지 않아도 된다.<br />TCP 통신을 이용하기 원한다.<br />단순한 Request-Reply가 아닌 메시지를 클라이언트에서 서버로 서버에서 클라이언트로 전송 할 수 있어야 한다.<br />채팅은 연결 지향적이기 때문에 사용자의 인스턴스가 관리되어야 한다.<br />
  50. 50. 채팅 서비스 요소 분석 #1 (Hosting)<br />채팅 서비스는 별도의 응용 프로그램으로 관리 된다.<br />IIS Hosting<br />Self Hosting<br />
  51. 51. 채팅 서비스 요소 분석 #2 (Binding)<br />클라이언트들은 모두 닷넷 환경이다.<br />단순한 Request-Reply가 아닌 메시지를 클라이언트에서 서버로 서버에서 클라이언트로 비 동기 전달 되어야 한다.<br />로컬이 아니기 때문에 TCP 통신을 이용해야 한다.<br />
  52. 52. 채팅 서비스 요소 분석 #2 (Binding)<br />클라이언트들은 모두 닷넷 환경이다.<br />단순한 Request-Reply가 아닌 메시지를 클라이언트에서 서버로 서버에서 클라이언트로 비 동기 전달 되어야 한다.<br />로컬이 아니기 때문에 TCP 통신을 이용해야 한다.<br />
  53. 53. - PerSession<br />채팅 서비스 요소 분석 #3 (Instance)<br />채팅은 연결 지향적이기 때문에 사용자의 인스턴스가 관리되어야 한다.<br />PerSession or PerCall or SingleCall<br />
  54. 54. WCF 채팅 서비스 구현 예제<br />WCF<br />Service<br />
  55. 55. WCF 도입사례<br />
  56. 56. i사의 CCTV 관리 솔루션<br />
  57. 57. Endpoint<br />Endpoint<br />Endpoint<br />Endpoint<br />Endpoint<br />서버 전체 통신구조<br />Sync Service<br />Data Service<br />Control Server<br />Client Application<br />Sync Service<br />DBService<br />Player<br />Cast Server<br />External Device <br />Client Application<br />RS-232C<br />Camera & External Device<br />IConsole<br />DBService<br />Socket<br />Socket<br />Endpoint<br />Endpoint<br />Endpoint<br />Endpoint<br />Endpoint<br />DB<br />
  58. 58. 서버 전체 통신구조<br />Sync Service<br />기존 TCP 소켓 통신을 대체함<br />연결 지향적으로 실시간으로 데이터를 처리함<br />Data Service<br />기존 웹 서비스 통신을 대체함<br />비연결 지향적으로 DataBase관련 내용을 처리함<br />
  59. 59. Endpoint<br />Endpoint<br />Endpoint<br />Endpoint<br />Endpoint<br />서버 전체 통신구조<br />Player<br />WCFService<br />WCFService<br />Sync Service<br />ControlServer<br />Console<br />Data Service<br />Endpoint<br />Endpoint<br />Endpoint<br />DB<br />
  60. 60. 서비스 프로그램들의 소개<br />Control Server<br />Client Application<br />Sync Service<br />DBService<br />IConsole과 Player간의 통신을 지원하고 외부 장비와의 통신 또한 제공한다.<br />Socket을 이용하여 Sync 서비스와 장비와의 데이터 전달을 중개한다.<br />Windows Service<br />External Device <br />Client Application<br />Dll for Device <br />DBService<br />For Linux<br />사이트 별로 다른 장비가 설치되기 때문에 통신 프로토콜이 일정하지 않기 때문에 별도의 DLL로 분리하여 관리한다. (e.g) sungjin.dll, eunsung.dll<br />DB의 정보를 교환하기 위한서비스로 Linux용으로는 별도의 서비스를 제공한다.<br />
  61. 61. Sync Service – #1. 소개<br />Client Application<br />Player<br />Sync<br />Service<br />External Device <br />Client Application<br />Camera<br />IConsole<br />주로 IConsole에서 Player를 조정하기 위한 메시지를 중개하는 서비스로 사용된다.<br />특정 카메라에 고화질 영상과 같은 요청을 위해서 Camera쪽에 메시지를 전달하기도 한다.<br />External Device 서비스의 경우 각각의 장비 별로 달라지게 되는 통신 모듈을 별도의 로직으로 분리하기 위해서 분리해 놓았다.<br />
  62. 62. Sync Service - #2. 구현<br />WCF 서비스를 이용한 TCP기반의서비스- Address: net.tcp://서버주소:20000/CS- Binding: netTcpBinding- Contract: InnotiveCSClassLib- Hosting: Windows Service<br />관련 프로젝트 파일- InnotiveCSClassLib: 계약 인터페이스 & 실제 동작을 위한 DLL- InnotiveControlServerWindowsService: 윈도우 서비스에 등록하여 호스팅하기 위한 프로젝트- InnotiveControlServerSetup: 윈도우 서비스를 간편하게 설치할 수 있게 해주는 셋업 프로젝트<br />설치되는 경로- C:Program FilesInnotiveInnotiveControlServer<br />
  63. 63. Sync Service – #3. 설치 & 서비스<br />셋업 프로그램 설치<br />Windows Service ->InnotiveControlServer->시작<br />
  64. 64. Data Service- #1. 소개<br />Data<br />Service<br />Innotive <br />Framework<br />Stored<br />Procedure<br />Player<br />IConsole<br />Payer나 Iconsole의 동작에 필요한 여러가지 정보들을 주고 받기 위한 데이터 서비스<br />DB<br />
  65. 65. Data Service - #2. 구현<br />WCF 서비스를 이용한 HTTT기반의서비스(웹 서비스)- Address: http://서버주소:15777 - Binding: basicHTTPBinding- Contract: IService- Hosting: IIS7<br />관련 프로젝트 파일- http://localhost:15777 : 서비스 메시지들의 인터페이스들이 정의되어 있고 메시지들을 구현하고 있다. - InnotiveFramework: 실제 DB와 통신하는 로직과 에러&호출에 대한 로그를 정의하고 있다.<br />
  66. 66. TCP 통신 이슈<br />소켓 연결 유지를 위한 처리서버와 클라이언트 간의 PING 메시지<br />비동기 메시지를 순차적으로 사용하기 위한 방법큐활용– 스레드 삽질 스토리<br />
  67. 67. Endpoint<br />Endpoint<br />Endpoint<br />스레드 튜닝<br />초창기 단순한 설계<br />클라이언트 인스턴스<br />큐<br />클라이언트 인스턴스<br />Player<br />클라이언트 인스턴스<br />큐에 담아 스레드1개를 만들어 메시지를 순차적으로 처리한다.<br />TimeOut의 이슈<br />
  68. 68. Endpoint<br />Endpoint<br />Endpoint<br />스레드 튜닝<br />다시 생각한 설계<br />클라이언트 인스턴스<br />큐<br />클라이언트 인스턴스<br />큐<br />Player<br />클라이언트 인스턴스<br />큐<br />
  69. 69. Q&A<br />
  70. 70. hoonsbara@hotmail.com<br />http://blog.hoons.kr<br />http://twitter.com/_hoons<br />

×