SlideShare uma empresa Scribd logo
1 de 16
Proxy Pattern
아키텍트를 꿈꾸는 사람들
http://cafe.naver.com/architect1
발표 : 김연기
http://scor7910.tistory.com
Proxy [pr ́ksi]ɑ : 1 대리 , 대리권
2 대리투
표 , 위임장
Context
• 클라이언트가 특정 서비스 혹은 모듈
(Component) 에 접근 하는데 , 언어마
다 , OS 마다 방법이나 구현이 틀리고
복잡하다 .
Problem
• Component 를 사용 / 접근 하는데 안전해
야 한다 .
• 클라이언트 입장에서 환경 (OS, 언어… )
에 상관없이 동작이나 구문이 비슷해야
한다 .
• 환경에 의한 성능하락이나 비용 손실을
고민해야 한다 .
Solution
• 클라이언트가 Component 에 직접 접근
하지 않고 대리자를 통해 원하는 동작이
나 결과를 얻을 수 있게 한다 .
• 대리자는 Component 의 Interface 를
제공하고 , 클라이언트가 원하는 값 / 동
작에 대하여 안전 하게 결과를 얻을 수
있도록 추가적인 작업을 해야 한다 .
Structure
Class
•Client
협력자
•Proxy
책임
• Proxy 를 통해 인터페이스
를 사용 .
•자체 작업을 수행 .
Class
•AbstractOriginal
협력자
책임
• Proxy 와 원본 클래스
의 추상 base 클래스
.
Class
•Proxy
협력자
•Original
책임
• 원본 (Original) 인터페
이스를 Client 에 제공 .
•안전하게 접근하고 올바
른 동작을 보장해야 한다
.
Class
•Original
협력자
책임
• 특정 서비스 , 동작을
구현 한다 .
Dynamic
Client Proxy Original
Task
Servic
e
Servic
e
선작업
후작업
Implementation
• Proxy 에서 처리할 것과 Original 에서 처
리할 항목을 파악한다 .
• 추상 기본 클래스에서 Original 과 Proxy
클래스를 파싱한다 .
• Proxy 클래스의 동작을 구현한다 .
• Proxy 클래스에 옮겨진 작업이 Client 와
Origin 클래스에 중복되어있다면 제거한다
.
• Proxy 클래스와 Origin 클래스를 연결한
다 .
• Origin 과 클라이언트간 직접적인 관계를
제거 한다 .
Variant(1)
• Remote Proxy : 원본의 물리적 위치를
저장하고 클라이언트는 Proxy 를 이용해
원본데이터를 얻어올 수 있다 .
• Protection Proxy : 권한이 필요한 작
업이나 데이터를 엑세스 할때 프록시가
권한을 검사하고 결과를 클라이언트에게
준다 .
Variant(2)
• Cache Proxy : Proxy 는 원본
(Original) 의 데이터를 미리 받아 두고
Client 는 빠르게 데이터를 처리 할 수
있다 . Proxy 는 데이터의 유효성 검사나
Client 의 반복적인 데이터 요청에 대한
처리가 필요하다 .
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
Variant(4)
• Counting Proxy : 어떤 instance 의 사
용 counting 을 Proxy 에서 계산하고
생성 / 삭제 작업을 하는 구조에 사용
될 수 있다 .
• Virtual Proxy : client 가 데이터를 요
청하면 Proxy 는 로컬에 저장된 데이터
를 클라이언트에 주고 , 존재하지 않는
데이터는 원본에 요청하여 필요한 데이
터를 얻어온다 .
Variant(5)
• Firewall Proxy : 외부 네트워크로부터
들어오고 나가는 패킷을 Proxy 에서 내
부 보안 설정을 확인하여 외부 네트워크
망과 통신을 관리한다 .
Known Use
• NeXTSTEP
• OMG – CORBA(Common Object Request
Broker Architecture)
• World Wide Web
• OLE(Object Linking & Embedding)
Consequence – 장점 -
• 효율을 향상 시키고 비용을 감소시킨다 .
• 서버 Component 의 위치와 Client 가 분
리되어 네트워크가 변경이 되더라도
Client 는 거기에 상관없이 코드를 안정
적으로 사용할 수 있다 .
• Proxy 클래스로 인해 Client 가 수행해
야할 불필요한 코드를 덜어준다 .
Consequence – 단점 -
• 우회 방식을 사용하기 때문에 성능이 저
하된다 .
• 지나치게 사용하면 과부하를 가져올수
있다 .

Mais conteúdo relacionado

Destaque

게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴예림 임
 
블랙보드 개발 중인 기능
블랙보드 개발 중인 기능블랙보드 개발 중인 기능
블랙보드 개발 중인 기능미나 최
 
Publish Subscriber messaging pattern
Publish Subscriber messaging patternPublish Subscriber messaging pattern
Publish Subscriber messaging patternShirish Bari
 
Team10:TenTen for blackboard
Team10:TenTen for blackboardTeam10:TenTen for blackboard
Team10:TenTen for blackboardJong-hoon Baek
 
Design pattern study 6 command pattern
Design pattern study 6 command patternDesign pattern study 6 command pattern
Design pattern study 6 command patterndragor0123
 
Scalable system design patterns
Scalable system design patternsScalable system design patterns
Scalable system design patternsSteve Min
 
Design patterns 스터디 - Singleton 패턴
Design patterns 스터디 - Singleton 패턴Design patterns 스터디 - Singleton 패턴
Design patterns 스터디 - Singleton 패턴Hyunho-Cho
 
Observer pattern dragor
Observer pattern dragorObserver pattern dragor
Observer pattern dragordragor0123
 
Composite pattern
Composite patternComposite pattern
Composite pattern경 송
 
Design patterns 스터디 -Decorator 패턴
Design patterns 스터디 -Decorator 패턴Design patterns 스터디 -Decorator 패턴
Design patterns 스터디 -Decorator 패턴Hyunho-Cho
 
Decorator pattern
Decorator patternDecorator pattern
Decorator patternkidoki
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ patternjinho park
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3Daniel Lim
 
M5 6 1
M5 6 1M5 6 1
M5 6 1nexthw
 
Design patterns 스터디 -strategy패턴
Design patterns 스터디 -strategy패턴Design patterns 스터디 -strategy패턴
Design patterns 스터디 -strategy패턴Hyunho-Cho
 
Arquitetura da plataforma com o Biztalk Server
Arquitetura da plataforma com o Biztalk ServerArquitetura da plataforma com o Biztalk Server
Arquitetura da plataforma com o Biztalk ServerMarkus Christen
 
Publisher subscriber pattern
Publisher subscriber patternPublisher subscriber pattern
Publisher subscriber patternDaeMyung Kang
 
Studyforprogrammer
StudyforprogrammerStudyforprogrammer
Studyforprogrammerguest0a0b14
 

Destaque (20)

게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴
 
블랙보드 개발 중인 기능
블랙보드 개발 중인 기능블랙보드 개발 중인 기능
블랙보드 개발 중인 기능
 
Pattern and EA
Pattern and EAPattern and EA
Pattern and EA
 
Publish Subscriber messaging pattern
Publish Subscriber messaging patternPublish Subscriber messaging pattern
Publish Subscriber messaging pattern
 
Team10:TenTen for blackboard
Team10:TenTen for blackboardTeam10:TenTen for blackboard
Team10:TenTen for blackboard
 
Design pattern study 6 command pattern
Design pattern study 6 command patternDesign pattern study 6 command pattern
Design pattern study 6 command pattern
 
Scalable system design patterns
Scalable system design patternsScalable system design patterns
Scalable system design patterns
 
Design patterns 스터디 - Singleton 패턴
Design patterns 스터디 - Singleton 패턴Design patterns 스터디 - Singleton 패턴
Design patterns 스터디 - Singleton 패턴
 
Observer pattern dragor
Observer pattern dragorObserver pattern dragor
Observer pattern dragor
 
Composite pattern
Composite patternComposite pattern
Composite pattern
 
Design patterns 스터디 -Decorator 패턴
Design patterns 스터디 -Decorator 패턴Design patterns 스터디 -Decorator 패턴
Design patterns 스터디 -Decorator 패턴
 
Decorator pattern
Decorator patternDecorator pattern
Decorator pattern
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ pattern
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3
 
M5 6 1
M5 6 1M5 6 1
M5 6 1
 
Design patterns 스터디 -strategy패턴
Design patterns 스터디 -strategy패턴Design patterns 스터디 -strategy패턴
Design patterns 스터디 -strategy패턴
 
Arquitetura da plataforma com o Biztalk Server
Arquitetura da plataforma com o Biztalk ServerArquitetura da plataforma com o Biztalk Server
Arquitetura da plataforma com o Biztalk Server
 
Publisher subscriber pattern
Publisher subscriber patternPublisher subscriber pattern
Publisher subscriber pattern
 
Composite Pattern
Composite PatternComposite Pattern
Composite Pattern
 
Studyforprogrammer
StudyforprogrammerStudyforprogrammer
Studyforprogrammer
 

Semelhante a Proxy pattern

[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...Taekyu Lim
 
GS Neotek aws_Amazon_CloudFrontDay2018_session4
GS Neotek aws_Amazon_CloudFrontDay2018_session4GS Neotek aws_Amazon_CloudFrontDay2018_session4
GS Neotek aws_Amazon_CloudFrontDay2018_session4GS Neotek
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
High performance networking in chrome
High performance networking in chromeHigh performance networking in chrome
High performance networking in chromeJi Hun Kim
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개태준 문
 
Android Network
Android NetworkAndroid Network
Android Networkcooddy
 
하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기Mijeong Park
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerKyung Koo Yoon
 
Microsoft pp lpdf
Microsoft pp lpdfMicrosoft pp lpdf
Microsoft pp lpdfHYUNWOO KIM
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Inho Kwon
 
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료TIMEGATE
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술NAVER D2
 
TCP/IP Protocol - JAVA
TCP/IP Protocol - JAVATCP/IP Protocol - JAVA
TCP/IP Protocol - JAVAcooddy
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?nexusz99
 
Java script의 이해
Java script의 이해Java script의 이해
Java script의 이해seungkyu park
 
Zoo keeper 소개
Zoo keeper 소개Zoo keeper 소개
Zoo keeper 소개주표 홍
 
웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우IMQA
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 YoungSu Son
 
[Swift] Prototype
[Swift] Prototype[Swift] Prototype
[Swift] PrototypeBill Kim
 

Semelhante a Proxy pattern (20)

[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
 
GS Neotek aws_Amazon_CloudFrontDay2018_session4
GS Neotek aws_Amazon_CloudFrontDay2018_session4GS Neotek aws_Amazon_CloudFrontDay2018_session4
GS Neotek aws_Amazon_CloudFrontDay2018_session4
 
Html5
Html5 Html5
Html5
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
High performance networking in chrome
High performance networking in chromeHigh performance networking in chrome
High performance networking in chrome
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
 
Android Network
Android NetworkAndroid Network
Android Network
 
하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기하드웨어 스타트업의 소프트웨어 이야기
하드웨어 스타트업의 소프트웨어 이야기
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
Microsoft pp lpdf
Microsoft pp lpdfMicrosoft pp lpdf
Microsoft pp lpdf
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기
 
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술
 
TCP/IP Protocol - JAVA
TCP/IP Protocol - JAVATCP/IP Protocol - JAVA
TCP/IP Protocol - JAVA
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
 
Java script의 이해
Java script의 이해Java script의 이해
Java script의 이해
 
Zoo keeper 소개
Zoo keeper 소개Zoo keeper 소개
Zoo keeper 소개
 
웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
[Swift] Prototype
[Swift] Prototype[Swift] Prototype
[Swift] Prototype
 

Mais de scor7910

대규모 서비스를 지탱하는기술 Ch14
대규모 서비스를 지탱하는기술 Ch14대규모 서비스를 지탱하는기술 Ch14
대규모 서비스를 지탱하는기술 Ch14scor7910
 
Head first statistics ch15
Head first statistics ch15Head first statistics ch15
Head first statistics ch15scor7910
 
Head first statistics ch.11
Head first statistics ch.11Head first statistics ch.11
Head first statistics ch.11scor7910
 
어플 개발자의 서버개발 삽질기
어플 개발자의 서버개발 삽질기어플 개발자의 서버개발 삽질기
어플 개발자의 서버개발 삽질기scor7910
 
Mining the social web ch8 - 1
Mining the social web ch8 - 1Mining the social web ch8 - 1
Mining the social web ch8 - 1scor7910
 
Mining the social web ch3
Mining the social web ch3Mining the social web ch3
Mining the social web ch3scor7910
 
Software pattern
Software patternSoftware pattern
Software patternscor7910
 
Google app engine
Google app engineGoogle app engine
Google app enginescor7910
 
Half sync/Half Async
Half sync/Half AsyncHalf sync/Half Async
Half sync/Half Asyncscor7910
 
Cpp 0x kimRyungee
Cpp 0x kimRyungeeCpp 0x kimRyungee
Cpp 0x kimRyungeescor7910
 
Reflection
ReflectionReflection
Reflectionscor7910
 

Mais de scor7910 (11)

대규모 서비스를 지탱하는기술 Ch14
대규모 서비스를 지탱하는기술 Ch14대규모 서비스를 지탱하는기술 Ch14
대규모 서비스를 지탱하는기술 Ch14
 
Head first statistics ch15
Head first statistics ch15Head first statistics ch15
Head first statistics ch15
 
Head first statistics ch.11
Head first statistics ch.11Head first statistics ch.11
Head first statistics ch.11
 
어플 개발자의 서버개발 삽질기
어플 개발자의 서버개발 삽질기어플 개발자의 서버개발 삽질기
어플 개발자의 서버개발 삽질기
 
Mining the social web ch8 - 1
Mining the social web ch8 - 1Mining the social web ch8 - 1
Mining the social web ch8 - 1
 
Mining the social web ch3
Mining the social web ch3Mining the social web ch3
Mining the social web ch3
 
Software pattern
Software patternSoftware pattern
Software pattern
 
Google app engine
Google app engineGoogle app engine
Google app engine
 
Half sync/Half Async
Half sync/Half AsyncHalf sync/Half Async
Half sync/Half Async
 
Cpp 0x kimRyungee
Cpp 0x kimRyungeeCpp 0x kimRyungee
Cpp 0x kimRyungee
 
Reflection
ReflectionReflection
Reflection
 

Proxy pattern

  • 1. Proxy Pattern 아키텍트를 꿈꾸는 사람들 http://cafe.naver.com/architect1 발표 : 김연기 http://scor7910.tistory.com
  • 2. Proxy [pr ́ksi]ɑ : 1 대리 , 대리권 2 대리투 표 , 위임장
  • 3. Context • 클라이언트가 특정 서비스 혹은 모듈 (Component) 에 접근 하는데 , 언어마 다 , OS 마다 방법이나 구현이 틀리고 복잡하다 .
  • 4. Problem • Component 를 사용 / 접근 하는데 안전해 야 한다 . • 클라이언트 입장에서 환경 (OS, 언어… ) 에 상관없이 동작이나 구문이 비슷해야 한다 . • 환경에 의한 성능하락이나 비용 손실을 고민해야 한다 .
  • 5. Solution • 클라이언트가 Component 에 직접 접근 하지 않고 대리자를 통해 원하는 동작이 나 결과를 얻을 수 있게 한다 . • 대리자는 Component 의 Interface 를 제공하고 , 클라이언트가 원하는 값 / 동 작에 대하여 안전 하게 결과를 얻을 수 있도록 추가적인 작업을 해야 한다 .
  • 6. Structure Class •Client 협력자 •Proxy 책임 • Proxy 를 통해 인터페이스 를 사용 . •자체 작업을 수행 . Class •AbstractOriginal 협력자 책임 • Proxy 와 원본 클래스 의 추상 base 클래스 . Class •Proxy 협력자 •Original 책임 • 원본 (Original) 인터페 이스를 Client 에 제공 . •안전하게 접근하고 올바 른 동작을 보장해야 한다 . Class •Original 협력자 책임 • 특정 서비스 , 동작을 구현 한다 .
  • 8. Implementation • Proxy 에서 처리할 것과 Original 에서 처 리할 항목을 파악한다 . • 추상 기본 클래스에서 Original 과 Proxy 클래스를 파싱한다 . • Proxy 클래스의 동작을 구현한다 . • Proxy 클래스에 옮겨진 작업이 Client 와 Origin 클래스에 중복되어있다면 제거한다 . • Proxy 클래스와 Origin 클래스를 연결한 다 . • Origin 과 클라이언트간 직접적인 관계를 제거 한다 .
  • 9. Variant(1) • Remote Proxy : 원본의 물리적 위치를 저장하고 클라이언트는 Proxy 를 이용해 원본데이터를 얻어올 수 있다 . • Protection Proxy : 권한이 필요한 작 업이나 데이터를 엑세스 할때 프록시가 권한을 검사하고 결과를 클라이언트에게 준다 .
  • 10. Variant(2) • Cache Proxy : Proxy 는 원본 (Original) 의 데이터를 미리 받아 두고 Client 는 빠르게 데이터를 처리 할 수 있다 . Proxy 는 데이터의 유효성 검사나 Client 의 반복적인 데이터 요청에 대한 처리가 필요하다 .
  • 11. 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
  • 12. Variant(4) • Counting Proxy : 어떤 instance 의 사 용 counting 을 Proxy 에서 계산하고 생성 / 삭제 작업을 하는 구조에 사용 될 수 있다 . • Virtual Proxy : client 가 데이터를 요 청하면 Proxy 는 로컬에 저장된 데이터 를 클라이언트에 주고 , 존재하지 않는 데이터는 원본에 요청하여 필요한 데이 터를 얻어온다 .
  • 13. Variant(5) • Firewall Proxy : 외부 네트워크로부터 들어오고 나가는 패킷을 Proxy 에서 내 부 보안 설정을 확인하여 외부 네트워크 망과 통신을 관리한다 .
  • 14. Known Use • NeXTSTEP • OMG – CORBA(Common Object Request Broker Architecture) • World Wide Web • OLE(Object Linking & Embedding)
  • 15. Consequence – 장점 - • 효율을 향상 시키고 비용을 감소시킨다 . • 서버 Component 의 위치와 Client 가 분 리되어 네트워크가 변경이 되더라도 Client 는 거기에 상관없이 코드를 안정 적으로 사용할 수 있다 . • Proxy 클래스로 인해 Client 가 수행해 야할 불필요한 코드를 덜어준다 .
  • 16. Consequence – 단점 - • 우회 방식을 사용하기 때문에 성능이 저 하된다 . • 지나치게 사용하면 과부하를 가져올수 있다 .