12. 프락시 패턴(Proxy Pattern) – 원격지 프락시

12.1 개요

프락시 패턴은 사용하는 개체를 통해 실제 개체를 제어하는 패턴입니다.

“사용하는 개체를 통해 실제 개체를 제어하는 프락시 패턴”

프락시 패턴은 사용하는 목적과 방법에 따라 원격지 프락시와 가상 프락시, 보호용 프락시, 스마트 참조자로 구분할 수 있습니다.

원격지 프락시는 사용할 실제 개체가 클라이언트와 다른 위치에 있을 때 원격지에 있는 개체처럼 사용할 수 있는 프락시를 말합니다. 가상 프락시는 사용할 실제 개체의 특정 행위가 많은 시간이 들 때 비 동기적으로 수행할 수 있게하여 사용자가 작업이 완료되는 것을 기다리지 않게 해 주는 프락시입니다. 보호용 프락시는 개체의 기능을 권한에 따라 사용하는 수준을 다르게 해 주는 프락시입니다.

스마트 참조자는 여러 곳에서 사용하는 개체가 있다면 실제 개체를 참조하는 개체를 정의하여 참조한 개체를 통해 실제 개체를 사용하는 것을 말합니다. C++언어에서는 개체의 소멸을 개발자가 작성한 코드에 의해 수행되는데 하나의 개체를 여러 곳에서 사용하면 소멸에 관한 책임을 제대로 이행하지 못할 수가 있습니다. 이럴 때 스마트 참조자를 사용하여 실제 개체에 참조 카운터가 0이 될 때 소멸하게 할 수 있습니다. C#에서는 개체의 소멸을 .NET 플랫폼이 담당하여 스마트 참조자를 사용할 필요가 없습니다. 이 책에서는 스마트 참조자에 대한 설명은 생략하겠습니다.

원격지 프락시는 서버 측에 있는 실제 개체와 같은 인터페이스를 갖는 원격지 개체를 제공합니다. 그리고 서버 측에는 원격지 개체와 통신을 담당하여 서버 측에 있는 실제 개체를 제어하는 원리입니다. 이 때 원격지 개체를 원격지 프락시 개체라 얘기하고 서버 측에서 원격지 프락시 개체와 통신하여 실제 개체를 사용하는 개체를 스텁(Stbu) 개체라 부릅니다.

프락시 패턴을 사용하면 Client 측에서 원격 프락시 개체를 실제 개체처럼 쉽게 사용할 수 있게 됩니다. .NET에서는 원격지 프락시를 효과적으로 표현할 수 있게 .NET 리모팅을 지원하고 있습니다. 여기에서는 간단하게 소켓통신을 이용하는 예를 보여줄 것입니다. 여러분은 .NET 리모팅 기술도 살펴보시기 바랍니다.

” 원격 개체를 실제 개체처럼 사용할 수 있는 원격지 프락시”

12. 2 시나리오

 이번에 여수에서 엑스포가 있어 바람 쐬러 가기로 하였습니다. 아내와 아들은 여수 엑스포의 다양한 행사 중에서 야간에 진행되는 행사들에 관심이 많습니다. 예전부터 생각하고 있었는데 이번 기회에 리모트 컨트롤러를 사기로 했습니다.