12. 원격지 프락시 구현

12. 4 구현

  프락시 패턴 중에 원격지 프락시에 대한 예제 프로그램을 구현하는 순서는 서버 측을 구현한 후에 클라이언트 측을 구현할게요. 서버 측은 ITake, ICamera, ListenServer와 Stub 순으로 구현해 봅시다. 

12.4.1 ITake와 Camera 

 ITake에서는 단순히 TakeAPicture, ChangeMode, GetMode 메서드를 약속합시다. 

▶ ITake.cs

 그리고 Camera에서는 ITake에 약속된 각 메서드를 구현하면 됩니다. 

▶ Camera.cs

참고로, 원격지에 있는 개체가 실제 행위가 수행되는 것을 시각적으로 확인할 수 있게 각 메서드에 출력 구문을 추가하였습니다.

 

12.4.2 ListenServer 와 Stub

ListenServer에서는 소켓을 생성하여 클라이언트의 연결을 기다리는 부분이 필요할 것입니다. 그리고 클라이언트 측에서 연결 요청이 와서 이를 수락해야 할 시점이 오면 Stub 개체를 생성합니다. 그리고 접속한 클라이언트와 작업하는 쓰레드를 생성할 때 Stub 개체를 인자로 전달합니다. 해당 쓰레드에서는 Stub 개체를 통해 클라이언트 측의 요청에 맞게 Camera 개체를 제어하면 될 것입니다. 소켓 통신에 대한 설명은 하지 않겠습니다. 

▶ ListenServer.cs

 Stub 개체는 클라이언트 측에서 요청하는 것이 무엇인지 확인하여 요청대로 Camera 개체를 사용하고 결과가 필요한 경우에 다시 클라이언트 측에게 전달하면 되겠죠.  

▶ Stub.cs

▶ Program.cs

 

12.4.3 클라이언트 측

클라이언트 측에서는 원격 프락시 개체인 RemoteController를 통해 서버 측의 Stub과 소켓 통신을 하여 서버 측에 있는 실제 개체인 Camera 개체를 제어할 것입니다.

클라이언트 측의 원격 프락시 개체인 RemoteController의 경우 ITake에 약속된 메서드들을 구현해야 할 것입니다. (ITake.cs 파일은 클라이언트 측에도 있어야 합니다.)

 ▶ RemoteController.cs

 ▶ Program.cs

 

원격지 프락시 실행 예
[그림] 원격지 프락시 실행 예
   여기에서는 소켓 통신을 이용하여 프락시 패턴에 대해 구현해 보았는데 여러분들은 .NET 리모팅에 대해 학습을 해 보십시오. 효과적으로 프로그래밍을 할 수 있음을 알 수 있을 것입니다.