Proxy

Proxy Pattern

Proxy ํŒจํ„ด์„ UML๋กœ ์‚ดํŽด๋ณด๋ฉด, ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š” ์‹ค์ œ ์š”์ฒญ์ฒ˜๋ฆฌ ๊ฐ์ฒด(real subject)์™€ ํ”„๋ก์‹œ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , ํ”„๋ก์‹œ ๊ฐ์ฒด๊ฐ€ ์‹ค์ œ ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ตฌ์กฐ์ด๋‹ค.

์—ฌ๊ธฐ์„œ์˜ Proxy๋Š” target์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋Œ€์‹  ํด๋ผ์ด์–ธํŠธ๊ฐ€ target์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค. ์ฆ‰, target์˜ ๊ธฐ๋Šฅ ์ž์ฒด์—๋Š” ๊ด€์—ฌํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์–ดํ•ด์ฃผ๋Š” Proxy๋ฅผ ์ด์šฉํ•œ๊ฒƒ์ด๋‹ค.

์ฆ‰, ํ”„๋ก์‹œ๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์‚ฌ์šฉ ๋Œ€์ƒ ์‚ฌ์ด์— ๋Œ€๋ฆฌ ์—ญํ• ์„ ๋งก์€ object๋ฅผ ๋‘๋Š” ๋ฐฉ๋ฒ•์„ ์ด์นญ ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, Proxy ํŒจํ„ด์€ target์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ์ œ์–ดํ•˜๋ ค๋Š” ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  Proxy๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์ด๋‹ค.

์‹ค์ œ ๋กœ์ง๊ณผ ์ธ๊ณผ๊ด€๊ณ„ ์ฒ˜๋ฆฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ง€์—ฐ, ์ดˆ๊ธฐํ™” ๋“ฑ์˜ ๊ธฐ๋ฒ•๋„ ์‹ค์ œ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

Spring AOP์—์„œ๋Š” Dynamic Proxy๊ธฐ๋ฒ•์„ ์ด์šฉํ•ด AOP๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

Decolater Pattern

target์— ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋Ÿฐํƒ€์ž„ ์‹œ ๋‹ค์ด๋‚˜๋ฏนํ•˜๊ฒŒ ๋ถ€์—ฌํ•ด์ฃผ๊ธฐ ์œ„ํ•ด Proxy๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์ด๋‹ค. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์€ ์ƒ์† ์—†์ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ wrappingํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

Last updated

Was this helpful?