proxy pattern

16
Proxy Pattern 아아아아아 아아아 아아아 http://cafe.naver.com/architect 1 아아 : 아아아 http://scor7910.tistory.com

Upload: scor7910

Post on 21-Aug-2015

1.241 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Proxy pattern

Proxy Pattern

아키텍트를 꿈꾸는 사람들http://cafe.naver.com/architect1

발표 : 김연기http://scor7910.tistory.com

Page 2: Proxy pattern

Proxy [prɑ́�ksi] : 1 대리 , 대리권 2 대리투표 , 위임장

Page 3: Proxy pattern

Context

• 클라이언트가 특정 서비스 혹은 모듈(Component) 에 접근 하는데 , 언어마다 , OS 마다 방법이나 구현이 틀리고 복잡하다 .

Page 4: Proxy pattern

Problem

• Component 를 사용 /접근 하는데 안전해야 한다 .

• 클라이언트 입장에서 환경 (OS, 언어… )에 상관없이 동작이나 구문이 비슷해야 한다 .

• 환경에 의한 성능하락이나 비용 손실을 고민해야 한다 .

Page 5: Proxy pattern

Solution

• 클라이언트가 Component 에 직접 접근 하지 않고 대리자를 통해 원하는 동작이나 결과를 얻을 수 있게 한다 .

• 대리자는 Component 의 Interface 를 제공하고 , 클라이언트가 원하는 값 /동작에 대하여 안전 하게 결과를 얻을 수 있도록 추가적인 작업을 해야 한다 .

Page 6: Proxy pattern

StructureClass•Client

협력자•Proxy

책임• Proxy 를 통해 인터페이스를 사용 .•자체 작업을 수행 .

Class•AbstractOriginal

협력자

책임• Proxy 와 원본 클래스의 추상 base 클래스 .

Class•Proxy

협력자•Original책임

• 원본 (Original)인터페이스를 Client 에 제공 .•안전하게 접근하고 올바른 동작을 보장해야 한다 .

Class•Original

협력자

책임• 특정 서비스 , 동작을 구현 한다 .

Page 7: Proxy pattern

DynamicClient Proxy Original

TaskService

Service

선작업

후작업

Page 8: Proxy pattern

Implementation

• Proxy 에서 처리할 것과 Original 에서 처리할 항목을 파악한다 .

• 추상 기본 클래스에서 Original 과 Proxy 클래스를 파싱한다 .

• Proxy 클래스의 동작을 구현한다 .• Proxy 클래스에 옮겨진 작업이 Client 와

Origin 클래스에 중복되어있다면 제거한다 .• Proxy 클래스와 Origin 클래스를 연결한

다 .• Origin 과 클라이언트간 직접적인 관계를

제거 한다 .

Page 9: Proxy pattern

Variant(1)

• Remote Proxy : 원본의 물리적 위치를 저장하고 클라이언트는 Proxy 를 이용해 원본데이터를 얻어올 수 있다 .

• Protection Proxy : 권한이 필요한 작업이나 데이터를 엑세스 할때 프록시가 권한을 검사하고 결과를 클라이언트에게 준다 .

Page 10: Proxy pattern

Variant(2)

• Cache Proxy : Proxy 는 원본 (Original)의 데이터를 미리 받아 두고 Client 는 빠르게 데이터를 처리 할 수 있다 . Proxy는 데이터의 유효성 검사나 Client 의 반복적인 데이터 요청에 대한 처리가 필요하다 .

Page 11: Proxy pattern

Variant(3)

• Synchronization Proxy : 다수의 쓰레드가 원본 데이터에 접근하려 할 때 동기화 작업을 Proxy 에서 수행 하도록 한다 .

template <class T>class LockingProxy{public:LockingProxy(T* pObj) : pointee_ (pObj){ pointee_->Lock(); }~LockingProxy(){ pointee_->Unlock(); }T* operator->() const{ return pointee_; }private:LockingProxy& operator=(const LockingProxy&);T* pointee_;};

출처 : Modern C++ Design

Page 12: Proxy pattern

Variant(4)

• Counting Proxy : 어떤 instance 의 사용 counting 을 Proxy 에서 계산하고 생성 /삭제 작업을 하는 구조에 사용 될 수 있다 .

• Virtual Proxy : client 가 데이터를 요청하면 Proxy 는 로컬에 저장된 데이터를 클라이언트에 주고 , 존재하지 않는 데이터는 원본에 요청하여 필요한 데이터를 얻어온다 .

Page 13: Proxy pattern

Variant(5)

• Firewall Proxy : 외부 네트워크로부터 들어오고 나가는 패킷을 Proxy 에서 내부 보안 설정을 확인하여 외부 네트워크 망과 통신을 관리한다 .

Page 14: Proxy pattern

Known Use

• NeXTSTEP• OMG – CORBA(Common Object

Request Broker Architecture)• World Wide Web• OLE(Object Linking & Embedding)

Page 15: Proxy pattern

Consequence – 장점 -

• 효율을 향상 시키고 비용을 감소시킨다 .• 서버 Component 의 위치와 Client 가

분리되어 네트워크가 변경이 되더라도 Client 는 거기에 상관없이 코드를 안정적으로 사용할 수 있다 .

• Proxy 클래스로 인해 Client 가 수행해야할 불필요한 코드를 덜어준다 .

Page 16: Proxy pattern

Consequence – 단점 -

• 우회 방식을 사용하기 때문에 성능이 저하된다 .

• 지나치게 사용하면 과부하를 가져올수 있다 .