1. μ΅μ λ² ν¨ν΄μ΄λ?
μ΅μ λ² ν¨ν΄μ μννΈμ¨μ΄ λμμΈ ν¨ν΄ μ€ νλλ‘, κ°μ²΄ κ°μ μΌλλ€ μμ‘΄μ±μ μ μνλ ν¨ν΄μ λλ€. μ΄ ν¨ν΄μ 주체(subject) κ°μ²΄μ μνκ° λ³κ²½λμμ λ, μ΄μ μμ‘΄νλ λ€μμ κ°μ²΄λ€μΈ μ΅μ λ²(observer)λ€μκ² μλμΌλ‘ μλ¦Όμ μ λ¬νλ λ©μ»€λμ¦μ μ 곡ν©λλ€.
주체 κ°μ²΄λ μ΅μ λ²μ λν λ±λ‘, μλ¦Ό λ©μμ§ μ μ‘ λ±μ μ± μμ κ°κ³ μμΌλ©°, μ΅μ λ²λ 주체 κ°μ²΄μ μν λ³νμ λ°λ₯Έ μ λ°μ΄νΈ μμ μ μνν©λλ€. μ΄λ κ² ν¨μΌλ‘μ¨, 주체 κ°μ²΄μ μ΅μ λ² κ°μ²΄λ λμ¨νκ² κ²°ν©λλ―λ‘ μ μ°νκ³ νμ₯ κ°λ₯ν μννΈμ¨μ΄ μμ€ν μ ꡬμΆν μ μμ΅λλ€.
μ΅μ λ² ν¨ν΄μ μ λ¬Έ ꡬλ κ³Ό μ μ¬ν κ°λ μΌλ‘ μ΄ν΄ν μ μμ΅λλ€. μ¬λ¬λΆμ΄ μ λ¬Έ ꡬλ μλΉμ€μ κ°μ νλ©΄, μλ‘μ΄ κΈ°μ¬κ° λ°νλ λλ§λ€ μ΄λ₯Ό ꡬλ μλ€μκ² μλ €μ£Όλ λ©μ»€λμ¦μ΄ μλν©λλ€. μ΄λ, μ λ¬Έμ 주체 κ°μ²΄μ΄κ³ , ꡬλ μλ€μ μ΅μ λ² κ°μ²΄λ‘ λ³Ό μ μμ΅λλ€. μ΄μ²λΌ μ΅μ λ² ν¨ν΄μ κ°μ²΄ κ°μ μνΈμμ©μ μ΄λ²€νΈ κΈ°λ°μΌλ‘ μ€κ³νλλ° μ μ©νκ² μ¬μ©λ©λλ€.
2. μ΅μ λ² ν¨ν΄μ ꡬ쑰
μ΅μ λ² ν¨ν΄μ 주체 κ°μ²΄μ μ΅μ λ² κ°μ²΄ κ°μ μνΈμμ©μ μ μνλ ꡬ쑰λ₯Ό κ°μ§κ³ μμ΅λλ€. μ΄ κ΅¬μ‘°λ₯Ό μ€λͺ νκΈ° μν΄ μ£Όμ²΄ κ°μ²΄μ μ΅μ λ² κ°μ²΄ μ¬μ΄μ κ΄κ³ λ° μν μ λ€μκ³Ό κ°μ΄ μ 리ν μ μμ΅λλ€.
주체(Subject)
- 주체 κ°μ²΄λ μν λ³νλ₯Ό κ°μ§νκ³ , λ³νκ° λ°μνμ λ λ±λ‘λ μ΅μ λ² κ°μ²΄λ€μκ² μλ¦Όμ μ λ¬νλ 주체 μν μ μνν©λλ€.
- 주체 κ°μ²΄λ μ΅μ λ²λ€μ λ±λ‘, μμ , μλ¦Ό λ±μ κ΄λ¦¬λ₯Ό λ΄λΉν©λλ€.
- 주체 κ°μ²΄λ μΌλ°μ μΌλ‘ νλ μ΄μμ μ΅μ λ²λ₯Ό κ΄λ¦¬ν μ μμ΅λλ€.
μ΅μ λ²(Observer)
- μ΅μ λ² κ°μ²΄λ 주체 κ°μ²΄μ μν λ³νμ λ°λ₯Έ μ λ°μ΄νΈ μμ μ μννλ μν μ μνν©λλ€.
- μ΅μ λ² κ°μ²΄λ 주체 κ°μ²΄μ λ±λ‘λμ΄μΌλ§ μλ¦Όμ μμ ν μ μμ΅λλ€.
- 주체 κ°μ²΄μ μν λ³νμ λν μλ¦Όμ λ°μΌλ©΄, μ΅μ λ² κ°μ²΄λ νμν λμμ μνν©λλ€.
ꡬ쑰μ μμ
- 주체 κ°μ²΄μ μ΅μ λ² κ°μ²΄ κ°μ κ΄κ³λ μΌλλ€(1:N) κ΄κ³μ λλ€. μ¦, 주체 κ°μ²΄λ μ¬λ¬ κ°μ μ΅μ λ² κ°μ²΄λ€μ κ΄λ¦¬ν μ μμ΅λλ€.
- 주체 κ°μ²΄μ μ΅μ λ² κ°μ²΄λ€μ κ²°ν©μ λμ¨(weak)ν κ²°ν©μ λλ€. μ΄λ 주체 κ°μ²΄κ° μ΅μ λ²μ λν μΈλΆμ¬νμ μμ§ λͺ»νκ³ μ€μ§ μλ¦Ό λ©μλλ§ νΈμΆνλ―λ‘ μνΈκ°μ μμ‘΄μ±μ μ΅μνν©λλ€.
- 주체 κ°μ²΄μ μ΅μ λ² κ°μ²΄λ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ λ³λλ‘ μΆμνλμ΄μΌ ν©λλ€. μ΄λ₯Ό ν΅ν΄ 주체 κ°μ²΄μ μ΅μ λ² κ°μ²΄μ λ 립μ μΈ λ³νλ₯Ό νμ©νλ©°, μ¬μ¬μ©μ±κ³Ό νμ₯μ±μ λμΌ μ μμ΅λλ€.
μ΅μ λ² ν¨ν΄μ ꡬ쑰λ 주체 κ°μ²΄μ μ΅μ λ² κ°μ²΄λ€ μ¬μ΄μ μνΈμμ©μ λͺ ννκ² μ μνκ³ , μ μ°νκ³ νμ₯ κ°λ₯ν μννΈμ¨μ΄ μμ€ν μ μ€κ³νλλ° λμμ μ€λλ€.
3. μ΅μ λ² ν¨ν΄μ μ₯μ
μ΅μ λ² ν¨ν΄μ μννΈμ¨μ΄ μμ€ν μ μ€κ³ν λ λ€μκ³Ό κ°μ μ₯μ μ μ 곡ν©λλ€.
3.1 λμ¨ν κ²°ν©(Loose Coupling)
- μ΅μ λ² ν¨ν΄μ 주체 κ°μ²΄μ μ΅μ λ² κ°μ²΄λ€ μ¬μ΄μ λμ¨ν κ²°ν©μ κ°λ₯νκ² ν©λλ€.
- 주체 κ°μ²΄λ μ΅μ λ² κ°μ²΄μ μΈν°νμ΄μ€λ§ μκ³ μμΌλ©°, μ΅μ λ² κ°μ²΄μ ꡬ체μ μΈ κ΅¬νμ μμ§ λͺ»ν©λλ€.
- μ΄λ₯Ό ν΅ν΄ 주체 κ°μ²΄λ μ΅μ λ² κ°μ²΄μ λ³κ²½μ΄ λ€λ₯Έ κ°μ²΄λ€μκ² μν₯μ μ£Όμ§ μκ³ λ 립μ μΌλ‘ μ§νλ μ μμ΅λλ€.
- κ²°κ³Όμ μΌλ‘ μμ€ν μ μ μ°μ±κ³Ό μ¬μ¬μ©μ±μ λμΌ μ μμ΅λλ€.
3.2 μ΄λ²€νΈ κΈ°λ°μ μνΈμμ©(Event-driven interaction)
- 주체 κ°μ²΄μ μν λ³νμ λ°λΌ λ°μνλ μ΄λ²€νΈλ₯Ό κΈ°λ°μΌλ‘ μ΅μ λ²λ€μ΄ μνΈμμ©ν©λλ€.
- μ΄λ²€νΈ κΈ°λ°μ μνΈμμ©μ λΉμ¦λμ€ λ‘μ§μ 볡μ‘μ±μ κ°μννκ³ , κ°μ²΄ κ°μ μνΈμμ©μ λͺ ννκ² ννν μ μμ΅λλ€.
- λν, μ΄λ²€νΈ κΈ°λ°μΌλ‘ λμνλ μμ€ν μ νμ₯μ±μ΄ λμμ Έ λΆκ°μ μΈ μ΄λ²€νΈλ λμμ μΆκ°νκΈ° μ¬μμ§λλ€.
3.3 νμ₯μ±κ³Ό μ μ§λ³΄μμ±(Scalability and Maintainability)
- 주체 κ°μ²΄μ μ΅μ λ² κ°μ²΄ κ°μ λ 립μ±κ³Ό μ¬μ¬μ©μ±μ μ 곡νλ μ΅μ λ² ν¨ν΄μ μμ€ν μ νμ₯μ±κ³Ό μ μ§λ³΄μμ±μ ν₯μμν΅λλ€.
- μλ‘μ΄ μ£Όμ²΄ κ°μ²΄λ μ΅μ λ² κ°μ²΄λ₯Ό μΆκ°νκ±°λ μ κ±°νλ κ²μ΄ λΉκ΅μ κ°λ¨νλ©°, κΈ°μ‘΄ μ½λμ μμ μ΄ νμνμ§ μμ΅λλ€.
- μ΄λ μ½λμ μ¬μ¬μ©μ μ΄μ§νκ³ , μμ€ν μ μ μ°μ±μ λμ¬ ν₯ν λ³κ²½κ³Ό λ³νμ λμν μ μλλ‘ λμμ€λλ€.
3.4 μ΄λ²€νΈ μμ€ λΆλ¦¬(Event Source Separation)
- μ΅μ λ² ν¨ν΄μ μ μ©νλ©΄ μ΄λ²€νΈλ₯Ό μμ±νλ 주체 κ°μ²΄μ ν΄λΉ μ΄λ²€νΈλ₯Ό μ²λ¦¬νλ μ΅μ λ² κ°μ²΄λ€μ λͺ ννκ² λΆλ¦¬ν μ μμ΅λλ€.
- μ΄λ₯Ό ν΅ν΄ 주체 κ°μ²΄λ μ£Όμ λ‘μ§μ μ§μ€νκ³ , μ΅μ λ² κ°μ²΄λ€μ κ°μμ μν μ μ§μ€ν μ μμΌλ―λ‘ μ½λμ κ°λ μ±κ³Ό κ΄λ¦¬μ±μ ν₯μμν΅λλ€.
μ΅μ λ² ν¨ν΄μ κ°μ²΄ κ°μ μνΈμμ©μ μ μ°νκ³ νμ₯ κ°λ₯νκ² μ€κ³ν μ μλλ‘ λμμ£Όλ©°, μμ€ν μ μ μ§λ³΄μμ±κ³Ό μ¬μ¬μ©μ±μ ν₯μμν΅λλ€. λ°λΌμ λ³νμ μ½κ² λμν μ μλ μννΈμ¨μ΄ μμ€ν μ κ°λ°νκΈ° μν μ€μν λμμΈ ν¨ν΄μ λλ€.
4. μ΅μ λ² ν¨ν΄μ νμ© μμ
μ΅μ λ² ν¨ν΄μ λ€μν μννΈμ¨μ΄ μμ€ν μμ νμ©λ μ μμ΅λλ€. μ΄λ²μλ μ΅μ λ² ν¨ν΄μ΄ μ΄λ€ μ€μ μν©μμ νμ©λ μ μλμ§ μ΄ν΄λ³΄κ² μ΅λλ€.
4.1 μ£Όμ μ 보 μλ¦Ό μμ€ν
- μ£Όμ μ 보 μλ¦Ό μμ€ν μ μ¬λ¬ μ¬μ©μλ€μκ² μ£Όμ κ°κ²© λ³λμ λν μ 보λ₯Ό μ€μκ°μΌλ‘ μ λ¬νλ μμ€ν μ λλ€.
- μ΄ κ²½μ°, μ£Όμ κ°κ²© λ³λμ 주체 κ°μ²΄λ‘μ μν μ μννκ³ , μ¬μ©μλ μ΅μ λ² κ°μ²΄λ‘ λ±λ‘λ©λλ€.
- 주체 κ°μ²΄λ μ£Όμ κ°κ²© λ³λμ΄ λ°μν λλ§λ€ λ±λ‘λ μ¬μ©μλ€μκ² μλ¦Όμ μ λ¬ν©λλ€.
- μ΄λ₯Ό ν΅ν΄ μ£Όμ μμ₯μ λ³λμ±μ λν μ€μκ° μ 보λ₯Ό μ¬μ©μλ€μκ² μ 곡ν μ μμ΅λλ€.
4.2 κ²μν μμ€ν
- κ²μν μμ€ν μ μ¬λ¬ μ¬μ©μλ€μκ² κ²μκΈμ΄λ λκΈ λ±μ μλ‘μ΄ λ΄μ©μ΄ μΆκ°λμμ λ μλ¦Όμ μ λ¬νλ μμ€ν μ λλ€.
- μ¬μ©μλ μ΅μ λ² κ°μ²΄λ‘ λ±λ‘λκ³ , κ²μκΈμ΄λ λκΈμ 주체 κ°μ²΄λ‘ μν μ μνν©λλ€.
- 주체 κ°μ²΄λ μλ‘μ΄ λ΄μ©μ΄ μΆκ°λ λλ§λ€ λ±λ‘λ μ¬μ©μλ€μκ² μλ¦Όμ μ μ‘ν©λλ€.
- μ΄λ₯Ό ν΅ν΄ μ¬μ©μλ€μ κ΄μ¬ μλ κ²μκΈμ μ λ°μ΄νΈλ₯Ό μ€μκ°μΌλ‘ λ°μλ³Ό μ μμ΅λλ€.
4.3 μ¨λΌμΈ μΌνλͺ° μ₯λ°κ΅¬λ
- μ¨λΌμΈ μΌνλͺ°μ μ₯λ°κ΅¬λλ μνμ λ΄μ νμλ κ°κ²©μ΄λ μ¬κ³ λ±μ λ³λμ΄ λ°μν μ μμ΅λλ€.
- μ₯λ°κ΅¬λλ 주체 κ°μ²΄μ΄κ³ , μ¬μ©μλ μ΅μ λ² κ°μ²΄λ‘ λ±λ‘λ©λλ€.
- 주체 κ°μ²΄λ κ°κ²©μ΄λ μ¬κ³ λ±μ λ³λμ΄ λ°μν λλ§λ€ λ±λ‘λ μ¬μ©μλ€μκ² μλ¦Όμ μ μ‘ν©λλ€.
- μ΄λ₯Ό ν΅ν΄ μ¬μ©μλ€μ μ₯λ°κ΅¬λμ μνλ₯Ό μ€μκ°μΌλ‘ νμΈνκ³ , νμν μ‘°μΉλ₯Ό μ·¨ν μ μμ΅λλ€.
4.4 νΈμ μλ¦Ό μλΉμ€
- νΈμ μλ¦Ό μλΉμ€λ λͺ¨λ°μΌ μ±μ΄λ μΉ μ ν리μΌμ΄μ μμ μ¬μ©μμκ² μλ¦Όμ μ λ¬νλ μμ€ν μ λλ€.
- 주체 κ°μ²΄λ μλ² λλ νΈμ μλ¦Ό μλΉμ€ μ체μ΄κ³ , μ¬μ©μλ μ΅μ λ² κ°μ²΄λ‘ λ±λ‘λ©λλ€.
- 주체 κ°μ²΄λ μλ¦Όμ μ μ‘ν λλ§λ€ λ±λ‘λ μ¬μ©μλ€μκ² μλ¦Όμ μ λ¬ν©λλ€.
- μ΄λ₯Ό ν΅ν΄ μ¬μ©μλ€μ μνλ μλ¦Όμ μ€μκ°μΌλ‘ λ°μλ³Ό μ μμ΅λλ€.
μ΅μ λ² ν¨ν΄μ λ€μν μν©μμ μ¬μ©μμκ² μ€μκ° μ 보λ₯Ό μ λ¬νκ±°λ μλ¦Όμ μ 곡νλ λ± λ€μν κΈ°λ₯μ ꡬνν μ μμ΅λλ€. 주체 κ°μ²΄μ μ΅μ λ² κ°μ²΄ κ°μ μνΈμμ©μ ν΅ν΄ μ μ°νκ³ νμ₯ κ°λ₯ν μννΈμ¨μ΄ μμ€ν μ κ°λ°ν μ μμ΅λλ€.
5. μ΅μ λ² ν¨ν΄κ³Ό κ΄λ ¨λ λμμΈ ν¨ν΄
μ΅μ λ² ν¨ν΄μ μννΈμ¨μ΄ μ€κ³ μ μ μ©νκ² νμ©λ μ μλ λμμΈ ν¨ν΄μ λλ€. μ΄λ²μλ μ΅μ λ² ν¨ν΄κ³Ό κ΄λ ¨λ λͺ κ°μ§ λμμΈ ν¨ν΄μ μ΄ν΄λ³΄κ² μ΅λλ€.
5.1 νΌλΈλ¦¬μ -ꡬλ μ ν¨ν΄(Publisher-Subscriber Pattern)
- νΌλΈλ¦¬μ -ꡬλ μ ν¨ν΄μ μ΅μ λ² ν¨ν΄μ λ³νλ ννλ‘, ν 주체 κ°μ²΄κ° μ¬λ¬ μ΅μ λ² κ°μ²΄λ€μκ² μ΄λ²€νΈλ₯Ό λ°ν(publish)νκ³ , ν΄λΉ μ΄λ²€νΈλ₯Ό ꡬλ (subscribe)νλ ννμ λλ€.
- νΌλΈλ¦¬μ κ°μ²΄λ μ΄λ²€νΈλ₯Ό λ°ννκ³ , ꡬλ μ κ°μ²΄λ ν΄λΉ μ΄λ²€νΈλ₯Ό ꡬλ νμ¬ λμμ μνν©λλ€.
- νΌλΈλ¦¬μ -ꡬλ μ ν¨ν΄μ μ΅μ λ² ν¨ν΄κ³Ό λ§μ°¬κ°μ§λ‘ λμ¨ν κ²°ν©μ μ 곡νλ©°, μ΄λ²€νΈ κΈ°λ° μνΈμμ©μ κ°λ₯νκ² ν©λλ€.
5.2 μ€μ¬μ ν¨ν΄(Mediator Pattern)
- μ€μ¬μ ν¨ν΄μ μ¬λ¬ κ°μ²΄ κ° λ³΅μ‘ν μνΈμμ©μ μ€μ¬νλ μ€μ¬μ(Mediator) κ°μ²΄λ₯Ό λμ νμ¬ κ°μ²΄ κ°μ μ§μ μ μΈ μνΈμμ©μ μ μ΄νλ ν¨ν΄μ λλ€.
- μ€μ¬μ κ°μ²΄λ κ°μ²΄ κ°μ ν΅μ μ μ΄κ΄νκ³ , μ΄λ²€νΈλ₯Ό λ°ννκ³ μμ νλ μν μ μνν©λλ€.
- μ€μ¬μ ν¨ν΄μ μ΅μ λ² ν¨ν΄μ κ°λ μ ν΅ν΄ 볡μ‘ν κ°μ²΄ κ° ν΅μ κ³Ό μ μ΄λ₯Ό λ¨μνν μ μμ΅λλ€.
5.3 MVC ν¨ν΄(Model-View-Controller Pattern)
- MVC ν¨ν΄μ μννΈμ¨μ΄λ₯Ό ꡬμ±νλ μΈ κ°μ§ μν μΈ λͺ¨λΈ(Model), λ·°(View), 컨νΈλ‘€λ¬(Controller)λ‘ κ΅¬μ±λμ΄ μλ ν¨ν΄μ λλ€.
- λͺ¨λΈμ λ°μ΄ν°μ λΉμ¦λμ€ λ‘μ§μ μ²λ¦¬νλ©°, λ·°λ μ¬μ©μμκ² μκ°μ μΈ ννμ λ΄λΉνκ³ , 컨νΈλ‘€λ¬λ μ¬μ©μμ μ λ ₯μ μ²λ¦¬νλ μν μ μνν©λλ€.
- μ΅μ λ² ν¨ν΄μ MVC ν¨ν΄μμ λͺ¨λΈκ³Ό λ·° κ°μ μνΈμμ©μ κ°λ₯νκ² ν©λλ€.
- λͺ¨λΈμ μν λ³νκ° λ°μν λλ§λ€ λ±λ‘λ λ·°λ€μκ² μλ¦Όμ μ λ¬νμ¬ λ°μ΄ν°μ λ³νλ₯Ό νλ©΄μ κ°±μ ν μ μμ΅λλ€.
5.4 μ΄ν°λ μ΄ν° ν¨ν΄(Iterator Pattern)
- μ΄ν°λ μ΄ν° ν¨ν΄μ 컬λ μ κ°μ²΄μ λ΄λΆ ꡬ쑰λ₯Ό λ ΈμΆνμ§ μκ³ μμλ€μ μμ°¨μ μΌλ‘ μ κ·Όν μ μλ λ°©λ²μ μ 곡νλ ν¨ν΄μ λλ€.
- 주체 κ°μ²΄λ μ΅μ λ² κ°μ²΄λ€μ κ΄λ¦¬νλ 컬λ μ μν μ μννκ³ , μ΅μ λ² κ°μ²΄λ€μ 주체 κ°μ²΄μ μν λ³νμ λμνμ¬ μμ°¨μ μΌλ‘ μμ μ μνν©λλ€.
- μ΄ν°λ μ΄ν° ν¨ν΄κ³Ό μ΅μ λ² ν¨ν΄μ κ°μ²΄ κ°μ λμ¨ν κ²°ν©μ κ°λ₯νκ² νλ©°, 컬λ μ κ°μ²΄μ 컬λ μ μ μννλ λμμ λΆλ¦¬νμ¬ μ μ°νκ³ νμ₯ κ°λ₯ν μ€κ³λ₯Ό μ 곡ν©λλ€.
μ΅μ λ² ν¨ν΄κ³Ό κ΄λ ¨λ λμμΈ ν¨ν΄λ€μ 주체 κ°μ²΄μ μ΅μ λ² κ°μ²΄ κ°μ μνΈμμ©μ ν¨κ³Όμ μΌλ‘ λ€λ£° μ μλ λ°©λ²μ μ 곡ν©λλ€. λμμΈ ν¨ν΄μ μ μ ν μ‘°ν©νλ©΄ λμ± μ μ°νκ³ νμ₯ κ°λ₯ν μννΈμ¨μ΄ μμ€ν μ μ€κ³ν μ μμΌλ©°, μ½λμ κ°λ μ±κ³Ό μ¬μ¬μ©μ±μ λμΌ μ μμ΅λλ€.
λκΈ