Proxy Pattern?
OCP, DIP μ€κ³ μμΉ
μ€μ κΈ°λ₯μ μννλ κ°μ²΄Real Object
λμ κ°μμ κ°μ²΄Proxy Object
λ₯Ό μ¬μ©ν΄ λ‘μ§μ νλ¦μ μ μ΄νλ λμμΈ ν¨ν΄μ
λλ€.
- μ΄λ€ κ°μ²΄λ₯Ό μ¬μ©νκ³ μ ν λ, κ°μ²΄λ₯Ό μ§μ μ μΌλ‘ μ°Έμ‘° νλκ²μ΄ μλλΌ, ν΄λΉ κ°μ²΄λ₯Ό λν(λ리, proxy)νλ κ°μ²΄λ₯Ό ν΅ν΄ λμκ°μ²΄μ μ κ·Όνλ λ°©μμ μ¬μ©νλ©΄ ν΄λΉ κ°μ²΄κ° λ©λͺ¨λ¦¬μ μ‘΄μ¬νμ§ μμλ κΈ°λ³Έμ μΈ μ 보λ₯Ό μ°Έμ‘°νκ±°λ μ€μ ν μ μκ³ λν μ€μ κ°μ²΄μ κΈ°λ₯μ΄ λ°λμ νμν μμ κΉμ§ κ°μ²΄μ μμ±μ λ―Έλ£° μ μμ΅λλ€.
- μλ₯Ό λ€μ΄ μ©λμ΄ ν° μ΄λ―Έμ§μ κΈμ΄ κ°μ΄ μλ λ¬Έμλ₯Ό λͺ¨λν° νλ©΄μ λμ΄λ€κ³ κ°μ νμμλ μ΄λ―Έμ§ νμΌμ μ©λμ΄ ν¬κ³ ν μ€νΈλ μ©λμ΄ μμμ ν μ€νΈλ λΉ λ₯΄κ² λνλμ§λ§ κ·Έλ¦Όμ μ‘°κΈ λλ¦¬κ² λ‘λ©λλ κ²μ 보μ μ μ΄ μμΌμ€κ²λλ€. λ§μ½ μ΄λ κ² μ²λ¦¬κ° μλκ³ μ΄λ―Έμ§μ ν μ€νΈκ° λͺ¨λ λ‘λ©μ΄ λ νμμΌ νλ©΄μ΄ λμ¨λ€λ©΄ μ¬μ©μλ νμ΄μ§κ° λ‘λ©λ λκΉμ§ μλ―Έμμ΄ κΈ°λ€λ €μΌ ν©λλ€. κ·Έλ¬λ―λ‘ λ¨Όμ λ‘λ©μ΄ λλ ν μ€νΈλΌλ λ¨Όμ λμ€λκ² μ’μ΅λλ€. μ΄λ° λ°©μμ μ·¨νλ €λ©΄ ν μ€νΈ μ²λ¦¬μ© νλ‘μΈμ, κ·Έλ¦Ό μ²λ¦¬μ© νλ‘μΈμ€λ₯Ό λ³λλ‘ μ΄μνλ©΄ λ©λλ€. μ΄λ° ꡬ쑰λ₯Ό κ°λλ‘ μ€κ³νλκ²μ΄ λ°λ‘ νλ‘μ ν¨ν΄μ λλ€. μΌλ°μ μΌλ‘ νλ‘μλ λ€λ₯Έ 무μΈκ°μ μ΄μ΄μ§λ μΈν°νμ΄μ€μ μν μ νλ ν΄λμ€λ₯Ό μλ―Έν©λλ€.
γ
Real Object, Proxy Objectλ λμΌν μΈν°νμ΄μ€λ₯Ό ꡬνν©λλ€.
Proxy Objectλ λ©μλ μνμ μ€μ κ°μ²΄(Real Object)μ λ©μλμ μμν©λλ€.
Client -> Proxy -> RealSubject
ꡬ쑰
- Subject
- Proxy μ RealSubject κ° κ΅¬νν΄μΌνλ μΈν°νμ΄μ€
- λ κ°μ²΄λ₯Ό λμΌνκ² λ€λ£¨κΈ° μν΄ μ‘΄μ¬
- Proxy
- RealSubect μ Client μμ² μ¬μ΄μ μ‘΄μ¬νλ κ°μ²΄
- Subject λ₯Ό ꡬνν¨μΌλ‘μ¨ ν΄λΌμ΄μΈνΈλ RealSubject μ¬μ©νλ κ²κ³Ό λ³ μ°¨μ΄κ° μμ΄μΌ νλ€.
- RealSubject
- μ€μ§μ μΌλ‘ μμ²μ λν΄ μ£Όλ κΈ°λ₯μ μννλ κ°μ²΄
- Proxy κ°μ²΄λ λ΄λΆμ μΌλ‘ μ΄ κ°μ²΄λ₯Ό λ‘μ§μ λ§κ² μ¬μ©νλ€. (μμ)
γ
νλ‘μ ν¨ν΄ νΉμ§
- μλ νλ €λ κΈ°λ₯μ μννλ©° κ·ΈμΈμ λΆκ°μ μΈ μμ (λ‘κΉ , μΈμ¦, λ€νΈμν¬ ν΅μ λ±)μ μννκΈ°μ μ’μ΅λλ€.
- λΉμ©μ΄ λ§μ΄ λλ μ°μ°(DB 쿼리, λμ©λ ν μ€νΈ νμΌ λ±)μ μ€μ λ‘ νμν μμ μ μνν μ μμ΅λλ€.
- μ¬μ©μ μ μ₯μμλ νλ‘μ κ°μ²΄λ μ€μ κ°μ²΄λ μ¬μ©λ²μ μ μ¬νλ―λ‘ μ¬μ©μ±μ΄ μ’μ΅λλ€.
γ
μ₯μ
- κΈ°λ³Έ κ°μ²΄μ 리μμ€κ° λ¬΄κ±°μ΄ κ²½μ°, νλ‘μ κ°μ²΄μμ κ°λ¨ν μ²λ¦¬λ₯Ό νκ±°λ κΈ°λ³Έ κ°μ²΄λ₯Ό μΊμ± μ²λ¦¬ν¨μΌλ‘μ¨ λΆνλ₯Ό μ€μΌ μ μλ€.
- κΈ°λ³Έ κ°μ²΄μ λν μμ μμ΄, ν΄λΌμ΄μΈνΈμμμ μ¬μ©κ³Ό κΈ°λ³Έ κ°μ²΄ μ¬μ΄μ μΌλ ¨μ λ‘μ§μ νλ‘μ κ°μ²΄λ₯Ό ν΅ν΄ λ£μ μ μλ€.
- νλ‘μλ κΈ°λ³Έ κ°μ²΄μ μμ² μ¬μ΄μ μκΈ° λλ¬Έμ, μΌμ’ μ λ°©ν¨(보μ)μ μν λ νλ€.
- ꡬ쑰λ μ½λ ꡬνμ΄ κ°λ¨ν¨.
λ¨μ
- νλ‘μ κ°μ²΄κ° μ€κ°μ κ»΄μκΈ° λλ¬Έμ, κ°νΉ μλ΅μ΄ λλ €μ§ μ μλ€. (μΊμ±μ΄ μλμ΄μλ μ΄κΈ° μ¬μ©μ κ²½μ°)
γ
νλ‘μκ° μ¬μ©λλ λνμ μΈ 3κ°μ§
κ°μ_νλ‘μ(Virtual_Proxy)
κΌ νμλ‘ νλ μμ κΉμ§ κ°μ²΄μ μμ±μ μ°κΈ°νκ³ , ν΄λΉ κ°μ²΄κ° μμ±λ κ²μ²λΌ λμνλλ‘ λ§λ€κ³ μΆμλ μ¬μ©νλ ν¨ν΄μ λλ€. νλ‘μ ν΄λμ€μμ μμν μμ λ€μ μ²λ¦¬νκ³ λ¦¬μμ€κ° λ§μ΄ μꡬλλ μμ λ€μ΄ νμν λμλ§ μ£Όμ²΄ ν΄λμ€λ₯Ό μ¬μ©νλλ‘ κ΅¬ννλ©° μμμ μλ‘ λ€μλ€μνΌ ν΄μλκ° μμ£Ό λμ μ΄λ―Έμ§λ₯Ό μ²λ¦¬ν΄μΌ νλ κ²½μ° μμ μ λΆμ°νλκ²μ μλ‘ λ€ μ μκ² μ΅λλ€.
μ격νλ‘μ(Remote Proxy)
μ격 κ°μ²΄μ λν μ κ·Όμ μ μ΄ λ‘컬 νκ²½μ μ‘΄μ¬νλ©°, μ격κ°μ²΄μ λν λλ³μ μν μ νλ κ°μ²΄ μλ‘λ€λ₯Έ μ£Όμ 곡κ°μ μλ κ°μ²΄μ λν΄ λ§μΉ κ°μ μ£Όμ 곡κ°μ μλ κ²μ²λΌ λμνκ² λ§λλ ν¨ν΄μ λλ€. μμλ‘ Google Docsλ₯Ό λ€ μ μκ² μ΅λλ€. λΈλΌμ°μ λ λΈλΌμ°μ λλ‘ νμν μμμ λ‘컬μ κ°μ§κ³ μκ³ λλ€λ₯Έ μμμ Google μλ²μ μλ ννμ λλ€.
보νΈνλ‘μ(Protection Proxy)
주체 ν΄λμ€μ λν μ κ·Όμ μ μ΄νκΈ° μν κ²½μ°μ κ°μ²΄μ λν μ κ·Ό κΆνμ μ μ΄νκ±°λ κ°μ²΄λ§λ€ μ κ·Ό κΆνμ λ¬λ¦¬νκ³ μΆμλ μ¬μ©νλ ν¨ν΄μΌλ‘ νλ‘μ ν΄λμ€μμ ν΄λΌμ΄μΈνΈκ° 주체 ν΄λμ€μ λν μ κ·Όμ νμ©ν μ§ λ§μ§ κ²°μ νλλ‘ ν μκ° μμ΅λλ€.