SlideShare a Scribd company logo
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 โ€“ ๋‹จ์  -
โ€ข ์šฐํšŒ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ์ €
ํ•˜๋œ๋‹ค .
โ€ข ์ง€๋‚˜์น˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๊ณผ๋ถ€ํ•˜๋ฅผ ๊ฐ€์ ธ์˜ฌ์ˆ˜
์žˆ๋‹ค .

More Related Content

PPT
Component configurator
PPTX
Proxy, chain of responsibility, command pattern
ODP
Design pattern 4
PPTX
์˜ˆ์ œ๋กœ ๋ณด๋Š” Pattern ์—ฐ์ƒ๋ฒ•
PPTX
Learn design pattern-1
ODP
Desing Pattern-2
PDF
Oop design principle
PDF
Proxy_design_pattern_in_Java_SYS4U
ย 
Component configurator
Proxy, chain of responsibility, command pattern
Design pattern 4
์˜ˆ์ œ๋กœ ๋ณด๋Š” Pattern ์—ฐ์ƒ๋ฒ•
Learn design pattern-1
Desing Pattern-2
Oop design principle
Proxy_design_pattern_in_Java_SYS4U
ย 

Viewers also liked (20)

PDF
๊ฒŒ์ž„ ๊ฐœ๋ฐœ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด
PPTX
๋ธ”๋ž™๋ณด๋“œ ๊ฐœ๋ฐœ ์ค‘์ธ ๊ธฐ๋Šฅ
PDF
Pattern and EA
PPTX
Publish Subscriber messaging pattern
PPTX
Team10:TenTen for blackboard
PPTX
Design pattern study 6 command pattern
PPTX
Scalable system design patterns
PDF
Design patterns ์Šคํ„ฐ๋”” - Singleton ํŒจํ„ด
PPTX
Observer pattern dragor
PPTX
Composite pattern
PDF
Design patterns ์Šคํ„ฐ๋”” -Decorator ํŒจํ„ด
PPTX
Decorator pattern
ย 
PPTX
Api design for c++ pattern
ODP
Design Pattern 3
PDF
M5 6 1
ย 
PDF
Design patterns ์Šคํ„ฐ๋”” -strategyํŒจํ„ด
PPTX
Arquitetura da plataforma com o Biztalk Server
PDF
Publisher subscriber pattern
KEY
Composite Pattern
PDF
Studyforprogrammer
๊ฒŒ์ž„ ๊ฐœ๋ฐœ์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด
๋ธ”๋ž™๋ณด๋“œ ๊ฐœ๋ฐœ ์ค‘์ธ ๊ธฐ๋Šฅ
Pattern and EA
Publish Subscriber messaging pattern
Team10:TenTen for blackboard
Design pattern study 6 command pattern
Scalable system design patterns
Design patterns ์Šคํ„ฐ๋”” - Singleton ํŒจํ„ด
Observer pattern dragor
Composite pattern
Design patterns ์Šคํ„ฐ๋”” -Decorator ํŒจํ„ด
Decorator pattern
ย 
Api design for c++ pattern
Design Pattern 3
M5 6 1
ย 
Design patterns ์Šคํ„ฐ๋”” -strategyํŒจํ„ด
Arquitetura da plataforma com o Biztalk Server
Publisher subscriber pattern
Composite Pattern
Studyforprogrammer
Ad

Similar to Proxy pattern (20)

PDF
[2022]Flutter_IO_Extended_Korea_แ„†แ…ฅแ†ฏแ„แ…ตแ„†แ…ฉแ„ƒแ…ฒแ†ฏแ„‹แ…ณแ†ฏแ„’แ…ชแ†ฏแ„‹แ…ญแ†ผแ„’แ…กแ†ซแ„‘แ…ณแ†ฏแ„…แ…ฅแ„แ…ฅแ„แ…ณแ†ฏแ„…แ…ตแ†ซแ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ฅ_...
PDF
GS Neotek aws_Amazon_CloudFrontDay2018_session4
PPTX
[123] electron แ„€แ…ตแ†ทแ„‰แ…ฅแ†ผแ„’แ…ฎแ†ซ
PDF
High performance networking in chrome
PPT
Mcollective orchestration tool ์†Œ๊ฐœ
PPTX
Android Network
ย 
PDF
ํ•˜๋“œ์›จ์–ด ์Šคํƒ€ํŠธ์—…์˜ ์†Œํ”„ํŠธ์›จ์–ด ์ด์•ผ๊ธฐ
PDF
1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf
PDF
Spring Framework - Inversion of Control Container
PDF
Microsoft pp lpdf
PPTX
Node.js์—์„œ ๊ณต๊ณตAPI๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ฐœ๋ฐœํ•˜๊ธฐ
PDF
ํ•˜์ดํผ๋ ˆ์ € ํŒจ๋ธŒ๋ฆญ ์‹ค์Šต์ž๋ฃŒ
PDF
[112]clova platform ์ธ๊ณต์ง€๋Šฅ์„ ์—ฎ๋Š” ๊ธฐ์ˆ 
PPTX
TCP/IP Protocol - JAVA
ย 
PPTX
Dropbox์™€ ๊ฐ™์€ ์‹œ์Šคํ…œ์€ ํŒŒ์ผ์„ ์–ด๋–ป๊ฒŒ ์ €์žฅํ• ๊นŒ?
PPTX
Java scriptแ„‹แ…ด แ„‹แ…ตแ„’แ…ข
PPTX
Zoo keeper ์†Œ๊ฐœ
PDF
์›น์„œ๋ฒ„ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ ์‹ค์ „ ๋…ธํ•˜์šฐ
ย 
PDF
์‹ค์ „ ์„œ๋ฒ„ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ ๋…ธํ•˜์šฐ
[2022]Flutter_IO_Extended_Korea_แ„†แ…ฅแ†ฏแ„แ…ตแ„†แ…ฉแ„ƒแ…ฒแ†ฏแ„‹แ…ณแ†ฏแ„’แ…ชแ†ฏแ„‹แ…ญแ†ผแ„’แ…กแ†ซแ„‘แ…ณแ†ฏแ„…แ…ฅแ„แ…ฅแ„แ…ณแ†ฏแ„…แ…ตแ†ซแ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ฅ_...
GS Neotek aws_Amazon_CloudFrontDay2018_session4
[123] electron แ„€แ…ตแ†ทแ„‰แ…ฅแ†ผแ„’แ…ฎแ†ซ
High performance networking in chrome
Mcollective orchestration tool ์†Œ๊ฐœ
Android Network
ย 
ํ•˜๋“œ์›จ์–ด ์Šคํƒ€ํŠธ์—…์˜ ์†Œํ”„ํŠธ์›จ์–ด ์ด์•ผ๊ธฐ
1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf
Spring Framework - Inversion of Control Container
Microsoft pp lpdf
Node.js์—์„œ ๊ณต๊ณตAPI๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ฐœ๋ฐœํ•˜๊ธฐ
ํ•˜์ดํผ๋ ˆ์ € ํŒจ๋ธŒ๋ฆญ ์‹ค์Šต์ž๋ฃŒ
[112]clova platform ์ธ๊ณต์ง€๋Šฅ์„ ์—ฎ๋Š” ๊ธฐ์ˆ 
TCP/IP Protocol - JAVA
ย 
Dropbox์™€ ๊ฐ™์€ ์‹œ์Šคํ…œ์€ ํŒŒ์ผ์„ ์–ด๋–ป๊ฒŒ ์ €์žฅํ• ๊นŒ?
Java scriptแ„‹แ…ด แ„‹แ…ตแ„’แ…ข
Zoo keeper ์†Œ๊ฐœ
์›น์„œ๋ฒ„ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ ์‹ค์ „ ๋…ธํ•˜์šฐ
ย 
์‹ค์ „ ์„œ๋ฒ„ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ ๋…ธํ•˜์šฐ
Ad

More from scor7910 (11)

PPTX
๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค๋ฅผ ์ง€ํƒฑํ•˜๋Š”๊ธฐ์ˆ  Ch14
PDF
Head first statistics ch15
PDF
Head first statistics ch.11
PDF
์–ดํ”Œ ๊ฐœ๋ฐœ์ž์˜ ์„œ๋ฒ„๊ฐœ๋ฐœ ์‚ฝ์งˆ๊ธฐ
PDF
Mining the social web ch8 - 1
PDF
Mining the social web ch3
PDF
Software pattern
PDF
Google app engine
PDF
Half sync/Half Async
PDF
Cpp 0x kimRyungee
PPT
Reflection
๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค๋ฅผ ์ง€ํƒฑํ•˜๋Š”๊ธฐ์ˆ  Ch14
Head first statistics ch15
Head first statistics ch.11
์–ดํ”Œ ๊ฐœ๋ฐœ์ž์˜ ์„œ๋ฒ„๊ฐœ๋ฐœ ์‚ฝ์งˆ๊ธฐ
Mining the social web ch8 - 1
Mining the social web ch3
Software pattern
Google app engine
Half sync/Half Async
Cpp 0x kimRyungee
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 โ€“ ๋‹จ์  - โ€ข ์šฐํšŒ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ์ € ํ•˜๋œ๋‹ค . โ€ข ์ง€๋‚˜์น˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๊ณผ๋ถ€ํ•˜๋ฅผ ๊ฐ€์ ธ์˜ฌ์ˆ˜ ์žˆ๋‹ค .