E D R , A S I H C RSS

Pattern Oriented Software Architecture

NoSmok:OpeningStatement λΆ€λΆ„

http://images.amazon.com/images/P/0471958697.01.PE_PIm.arrow,TopLeft,-2,-19_SCMZZZZZZZ_.jpg ISBN:0471958697 http://images.amazon.com/images/P/0471606952.01.PE_PIm.arrow,TopLeft,-2,-19_SCMZZZZZZZ_.jpg ISBN:0471606952


1. μ†Œκ°œ

  • 3κ°€μ§€ λ‹€λ₯Έ 레벨(μ†Œν”„νŠΈμ›¨μ–΄ ꡬ쑰,λͺ¨λ“  λ””μžμΈ, idioms)μ—μ„œ μ–΄λ–»κ²Œ νŒ¨ν„΄μ΄ λ°œμƒν•˜λŠ”μ§€ 이 책에 μžμ„Ένžˆ λ‚˜μ™€ μžˆλ‹€. μ΄λŸ¬ν•œ 톡합적인 μ ‘κ·Ό λ‹€μ†Œ 이둠적일거 같이 λ³΄μ΄μ§€λ§Œ, μ €μžλŠ” 12개의 νŒ¨ν„΄κ³Ό μ‹€μ œλ‘œ μ‚¬μš©λ˜λŠ” 예제λ₯Ό 많이 보여 μ€λ‹€.

  • μžμ„Έν•œ μ†Œκ°œλŠ” μ•„λ§ˆμ΄ μ‚¬μ΄νŠΈλ₯Ό μ°Έκ³  ν•˜λ©΄ μ’‹μŠ΅λ‹ˆλ‹€.
  • λˆ„κ΅¬λ‚˜ 같이 μ°Έμ—¬ ν•˜μ‹œλŠ” 뢄은 λŒ€ ν™˜μ˜μž…λ‹ˆλ‹€.
  • 쀑간 쀑간에 해석이 μ•ˆλ˜λŠ” λΆ€λΆ„μ΄λ‚˜ 잘λͺ» κΈ°μˆ ν•œ λΆ€λΆ„ 있으면 μˆ˜μ •ν•΄μ£Όμ‹œλ©΄ 감사 ν•˜κ² μŠ΅λ‹ˆλ‹€. ^^;


2. Volume1

2.1. 1. Patterns

  • νŒ¨ν„΄μ— λŒ€ν•œμ†Œκ°œμ™€ μ΄μ±…μ˜ ꡬ성에 λŒ€ν•œ κ²ƒλ“±μ˜ λ‚΄μš©μ΄ λ‚˜μ˜¨λ‹€.

2.2. 2. Architectual Patterns

  • μ†Œν”„νŠΈμ›¨μ–΄ ꡬ쑰적인 κ΄€μ μ—μ„œ μ‚¬μš©λ˜λŠ” νŒ¨ν„΄λ“€μ΄ λ‚˜μ˜¨λ‹€.
  • 크게 λ„€κ°œμ˜ 그룹으둜 λ‚˜λˆŒ 수 μžˆλ‹€.
κ·Έλ£Ή μ‚¬λ€ νŒ¨ν„΄ μ„€λͺ…
From Mud to Structure Layer, Blackboard Pattern 전체적인 μ‹œμŠ€ν…œμ„ μƒν˜Έ ν˜‘λ ₯ν•˜λŠ” ν•˜λΆ€ 그룹으둜 λ‚˜λˆ„μ–΄μ„œ 관리 νžŒλ‹€.
Distributed Systems Broken Patterns use in distributed application
Interactive Systems Model-View-Controlled, Presentation-Abstraction-Control Pattern -
Adaptable Systems Microkernel pattern -

2.2.1. Layers

  • 예제(Example) : 이 νŒ¨ν„΄μ€ μš°λ¦¬κ°€ μ£Όμœ„μ—μ„œ ν”νžˆ 많이 λ³Ό 수 μžˆλŠ” νŒ¨ν„΄μ΄λ‹€. TCP/IPκ°€ κ·Έ λŒ€ν‘œμ μΈ 예일 것이닀.
  • ν™˜κ²½(Context) : λΆ„ν•΄κ°€ ν•„μš”ν•œ 큰 μ‹œμŠ€ν…œ
  • 생각 ν•΄μ•Όν•  문제(Problem - balance in following forces)
    • μ΅œκ·Όμ— μˆ˜μ •λ˜λŠ” μ†ŒμŠ€λŠ” 그것이 μ†ν•œ componentμ—λ§Œ 영ν–₯을 μ£Όμ–΄μ•Όμ§€ λ‹€λ₯Έ componentμ—κΉŒμ§€ 영ν–₯을 λΌμ³μ„œλŠ” μ•ˆλœλ‹€.
    • interfaceλŠ” μ•ˆμ •μ μ΄μ–΄μ•Ό ν•œλ‹€.
    • μ‹œμŠ€ν…œμ˜ 각 뢀뢄은 κ΅ν™˜ κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€. (Design for change in general is a major facilitator of graceful system evolution - 일반적으둜 변화에 λŒ€λΉ„ν•œ λ””μžμΈμ„ ν•˜λŠ”κ²ƒμ€ μš°μ•„ν•œ μ‹œμŠ€ν…œ 개발의 μ£Όμš”ν•œ μ΄‰μ§„μžμ΄λ‹€.)
    • It may be necessary to build other systems at a later date with the same low-level issues as the system you are currently designing ( μ •ν™•ν•œ μ˜λ―ΈλŠ” λͺ¨λ΄κ² μŒ, λˆ„κ°€ 해석μ€....)
    • μ΄ν•΄ν•˜κΈ° 쉽고 μœ μ§€λ³΄μˆ˜λ„ ν•˜κΈ° μ‰½κ²Œ ν•˜κΈ° μœ„ν•΄μ„œ μœ μ‚¬ν•œ ν•„μš”ν•œ κΈ°λŠ₯(responsibilities)을 κ·Έλ£Ήν™” ν•œλ‹€.
    • κΈ°μ€μ΄ λ˜λŠ” component λͺ¨μ–‘은 μ—†λ‹€.
    • component 경계가 ꡐ차 ν•˜λŠ”κ²ƒμ€ μ„±λŠ₯의 μ €ν•˜λ₯Ό μ΄ˆλž˜ν•œλ‹€. 예λ₯Ό λ“€μ–΄ λ§Žμ€ μ–‘μ˜ 데이터가 λ ˆμ΄μ–΄λ₯Ό μ§€λ‚ λ•Œ λ˜ν•œ μ—­μ‹œ λ§Žμ€ κ΅μ°¨ν•˜λŠ” component 경계λ₯Ό μ§€λ‚˜κ²Œ 되기 λ•Œλ¬Έμ΄λ‹€.
    • μ΄λ ‡κ²Œ λ ˆμ΄μ–΄λ‘œ 깨끗이 λ‚˜λˆ„μ–΄μ„œ ν”„λ‘œκ·Έλž¨μ„ 짜면 νŒ€μœΌλ‘œ μž‘μ—…μ„ ν• λ•Œ μ€λ” λŠ₯λ₯ μ μ΄λ‹€.
  • ν•΄κ²°μ±…(Solution) : μžμ‹ μ˜ μ‹œμŠ€ν…œμ„ μ λ‹Ήν•œ 숫자의 λ ˆμ΄μ–΄λ‘œ λ‚˜λˆ„κ³  각 λ ˆμ΄μ–΄λ₯Ό μ•Œλ§žλŠ” μˆœμ„œμ— 맞게 μŒ“λŠ”λ‹€
  • ꡬ쑰(Structure) : λ ˆμ΄μ–΄λŠ” λ‹€μŒκ³Ό 같은 κΈ°λ³Έ ꡬ쑰λ₯Ό κ°€μ§€κ³  μžˆλ‹€.
    • Class : λ ˆμ΄μ–΄ J
    • ν•΄μ•Όν•  κΈ°λŠ₯(responsibility)
      • λ ˆμ΄μ–΄ J+1에 μ˜ν•΄μ„œ μ‚¬μš©λ  μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•œλ‹€.
      • ν•˜λΆ€ μž‘μ—…μ„ λ ˆμ΄μ–΄ J-1μ—κ²Œ λ„˜κΈ΄λ‹€.(μœ„μž„ν•œλ‹€)
    • ν˜‘λ ₯자(collaborator) : λ ˆμ΄μ–΄ J-1
    • λ ˆμ΄μ–΄ νŒ¨ν„΄μ˜ μ€‘μš”ν•œ ꡬ쑰적인 νŠΉμ§•μ€ λ ˆμ΄μ–΄ JλŠ” 였직 λ ˆμ΄μ–΄ J+1에 μ˜ν•΄μ„œλ§Œ μ‚¬μš©λ  수 μžˆλ‹€λŠ” 점이닀. (μŠ€νƒμ΄λ‚˜ μ–‘νŒŒμ™€ 비ꡐ할 수 μžˆλ‹€)
  • Dynamics
    • Scenario1 - top-down communication, κ°€μž₯ 잘 μ•Œλ €μ§„κ²ƒμ΄λ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ λ ˆμ΄μ–΄ Nμ—κ²Œ μš”μ²­μ„ ν•œλ‹€. 그러면 λ ˆμ΄μ–΄ N은 ν™€λ‘œ λͺ¨λ“  μž‘μ—…μ„ ν•  수 μ—†κΈ° λ•Œλ¬Έμ— ν•˜λΆ€ μž‘μ—…μ„ λ ˆμ΄μ–΄ N-1μ—κ²Œ λ„˜κΈ΄λ‹€. 그러면 λ ˆμ΄μ–΄ N-1은 μžμ‹ μ˜ 일을 ν•˜κ³  λ ˆμ΄μ–΄ N-2μ—κ²Œ ν•˜λΆ€ μž‘μ—…μ„ λ„˜κΈ°κ³ , μ΄λŸ°μ‹μ˜ 과정이 λ ˆμ΄μ–΄ 1에 λ„λ‹¬ν• λ•ŒκΉŒμ§€ 이루어 μ§„λ‹€. κ·Έλž˜μ„œ κ°€μž₯ λ‚은 수μ€μ˜ μ„œλΉ„μŠ€κ°€ μˆ˜ν–‰λœλ‹€. λ§Œμ•½ ν•„μš”ν•˜λ‹€λ©΄ λ‹€μ–‘ν•œ μš”μ²­μ— λŒ€ν•œ 응닡듀이 λ ˆμ΄μ–΄ 1μ—μ„œ λ ˆμ΄μ–΄ 2, μ΄λŸ°μ‹μœΌλ‘œ λ ˆμ΄μ–΄ N에 λ„λ‹¬ν• λ•ŒκΉŒμ§€ 이루어진닀. μ΄λŸ¬ν•œ top-down μ†Œν†΅μ˜ νŠΉμ§•μ€ λ ˆμ΄μ–΄ JλŠ” μ’…μ’… λ ˆμ΄μ–΄ J+1λ‘œλΆ€ν„° 온 ν•˜λ‚˜μ˜ μš”μ²­μ„ μ—¬λŸ¬κ°œμ˜ μš”μ²­μœΌλ‘œ λ°”κΏ”μ„œ λ ˆμ΄μ„œ J-1μ—κ²Œ μ „ν•œλ‹€. μ΄λŠ” λ ˆμ΄μ–΄ Jκ°€ λ ˆμ΄μ–΄ J-1보닀 더 좔상적이기 λ•Œλ¬Έμ΄λ‹€. 덜 좔상적인것이 μ—¬λŸ¬κ°œ λͺ¨μ—¬μ„œ 더 좔상적인것이 λ˜λŠ” 것을 생각해보면 이해가 κ°ˆκ²ƒμ΄λ‹€.(예λ₯Ό λ“€μ–΄ λ³΅μž‘ν•œ μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ°μ„ μžλ°”μ—μ„œλŠ” κ°„λ‹¨ν•œ λͺ…λ Ήμ–΄λ‘œ 금방 ν•œλ‹€.)

    • Scenario2 - bottom-up communication, λ ˆμ΄μ–΄ 1μ—μ„œ μ‹œμž‘ν•˜λŠ” 연쇄적인 λ™μž‘λ“€μ΄λ‹€. top-down communicatinκ³Ό ν—·κ°ˆλ¦΄ μˆ˜λ„ μžˆλŠ”λ° top-down communication은 μš”μ²­(requests)에 μ˜ν•΄μ„œ λ™μž‘ν•˜μ§€λ§Œ, bottom-up communication은 톡지(notifications)에 μ˜ν•΄μ„œ λ™μž‘ν•œλ‹€. 예λ₯Ό λ“€μ–΄μ„œ μš°λ¦¬κ°€ ν‚€λ³΄λ“œ μžνŒμ„ 치면, 레벨1 ν‚€λ³΄λ“œμ—μ„œ μ΅œμƒμœ„ 레벨 N에 μž…λ ₯을 λ°›μ•˜λ‹€κ³  톡지λ₯Ό ν•œλ‹€. bottom-up communicatinμ—μ„œλŠ” top-down communicationκ³ΌλŠ” λ°˜λŒ€λ‘œ μ—¬λŸ¬κ°œμ˜ bottom-up 톡지듀(notifications)은 ν•˜λ‚˜μ˜ ν†΅μ§€λ‘œ μ••μΆ•λ˜μ–΄μ„œ μƒμœ„ λ ˆμ΄μ–΄λ‘œ μ „λ‹¬λ˜κ±°λ‚˜ κ·ΈλŒ€λ‘œ μ „λ‹¬λœλ‹€.

    • Scenario3 - λ ˆμ΄μ–΄ N-1이 cache둜 μž‘μš©ν•˜μ—¬μ„œ, λ ˆμ΄μ–΄ N의 μš”μ²­μ΄ λ ˆμ΄μ–΄ N-1μ—κ²Œλ§Œ μ „λ‹¬λ˜κ³  더이상 ν•˜μœ„ λ ˆμ΄μ–΄λ‘œ μ „λ‹¬λ˜μ§€ μ•ŠλŠ”λ‹€. μš”μ²­μ„ λ³΄λ‚΄κΈ°λ§Œ ν•˜λŠ” λ ˆμ΄μ–΄λ“€μ΄ μƒνƒœκ°€ μ—†λŠ”(stateless) λ°˜λ©΄μ— μ΄λŸ¬ν•œ cache λ ˆμ΄μ–΄λŠ” μƒνƒœ 정보λ₯Ό μœ μ§€ν•œλ‹€. μƒνƒœκ°€ μ—†λŠ” λ ˆμ΄μ–΄λ“€μ€ ν”„λ‘œκ·Έλž¨μ„ κ°„λ‹¨ν•˜κ²Œ ν•œλ‹€λŠ” 이점이 μžˆλ‹€.

    • Scenario4 - λ ˆμ΄μ–΄ 1μ—μ„œ eventκ°€ κ°μ§€λ˜μ—ˆμ§€λ§Œ λ ˆμ΄μ–΄ 3κΉŒμ§€λ§Œ κ°€κ³  더이상 κ°€μ§€ μ•ŠλŠ” κ²½μš°μ™€ 같은 경우, 예λ₯Ό λ“€μ–΄μ„œ 성격 κΈ‰ν•œ ν΄λΌμ΄μ–ΈνŠΈκ°€ 데이터λ₯Ό μš”μ²­ν•˜κ³ , λͺ» 기닀리고 금방 λ‹€μ‹œ μš”μ²­ν•˜λŠ” κ²½μš°μ— 첫번째 μš”μ²­μœΌλ‘œ 응닡 데이터가 κ°€λ‹€κ°€ λ‘λ²ˆμ§Έ μš”μ²­μ΄ μ˜€λŠ”κ²ƒκ³Ό κ΅μ°¨ν•˜κ²Œ λœλ‹€. μ΄λ•Œ λ‘λ²ˆμ§Έ μš”μ²­λ„ 첫번째 μš”μ²­κ³Ό 같은 것이기에 μ΄λ•Œ 이 μš”μ²­μ΄ 도이상 κ°€μ§€ μ•Šκ²Œ ν•œλ‹€.

    • Scenario 5 - N개의 λ ˆμ΄μ–΄λ“€λ‘œ 이루어진 2개의 stack 듀이 μ„œλ‘œ μ†Œν†΅ ν•˜λŠ” κ²½μš°μ΄λ‹€. 톡신 ν”„λ‘œν† μ½œμ΄ λŒ€ν‘œμ μΈ μ˜ˆμ΄λ‹€. ν•œμͺ½μ˜ λ ˆμ΄μ–΄ Nμ—μ„œ λ³΄λ‚΄λŠ” μš”μ²­μ€ κ²°κ΅­ ν•˜μœ„ λ ˆμ΄μ–΄ 1(ν•˜λ“œμ›¨μ–΄ 레벨)을 ν†΅ν•΄μ„œ μƒλŒ€νŽΈ ν•˜μœ„ λ ˆμ΄μ–΄1둜 μ „ν•΄μ§€κ³ , 이것은 또 N λ ˆμ΄μ–΄λ‘œ μ­‰ μ˜¬λΌκ°„λ‹€.

  • μ‹€ν–‰(implementation) - μ•„λž˜ 과정은 λͺ¨λ“  application에 λ°˜λ“œμ‹œ κ°€μž₯ 쒋은 방법이라고 ν•  μˆ˜λŠ” μ—†λ‹€. μ’…μ’… bottom-upμ΄λ‚˜ yo-yo λ°©λ²•μœΌλ‘œ μ ‘κ·Όν•˜λŠ”κ²ƒμ΄ 더 쒋을지도 λͺ¨λ₯Έλ‹€. μžμ‹ μ˜ application에 ν•„μš”ν•˜λ‹€ 싢은 과정을 μ§šμ–΄μ„œ ν•˜λ©΄ λœλ‹€.
    • task(κ³Όμ—…,일) 듀을 λ ˆμ΄μ–΄μ— λ°°μΉ˜ν•˜κΈ° μœ„ν•œ 좔상적인 κΈ°μ€μ„ μ •μ˜ ν•˜μ—¬λΌ. μ‹€μ œμ μΈ μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ μš°λ¦¬λŠ” μ’…μ’… 좔상적인 κΈ°μ€λ“€μ˜ ν˜Όν•©μ„ μ‚¬μš©ν•œλ‹€. 예λ₯Όλ“€μ–΄μ„œ ν•˜λ“œμ›¨μ–΄μ μΈ κ΄€μ μ—μ„œ μ € 수μ€μ˜ λ ˆλ²¨λ“€μ˜ λͺ¨μŠ΅μ„ μ •ν•˜κ³ , κ°œλ…μ μΈ λ³΅μž‘μ„±μœΌλ‘œ κ³  수μ€μ˜ λ ˆλ²¨μ„ μ •ν•œλ‹€.
    • λ‹Ήμ‚°μ˜ 좔상적인 κΈ°μ€μ— λ”°λΌμ„œ 좔상 λ ˆλ²¨λ“€μ˜ 갯수λ₯Ό μ •ν•˜μ—¬λΌ. trade-offλ₯Ό μƒκ°ν•΄λ³΄λ©΄μ„œ λ ˆμ΄μ–΄λ₯Ό ν†΅ν•©ν•˜κ±°λ‚˜ 뢄리해라. λ„ˆλ¬΄ λ§Žμ€ λ ˆμ΄μ–΄λŠ” ν”„λ‘œκ·Έλž¨μ— κ³Όμ€‘ν•œ 뢀담이 되고, λ„ˆλ¬΄ 적은 λ ˆμ΄μ–΄λŠ” ꡬ쑰적으둜 μ’‹μ§€ μ•Šκ²Œ λœλ‹€.
    • λ ˆμ΄μ–΄λ“€μ˜ 이름을 μ •ν•˜κ³  각 λ ˆμ΄μ–΄μ— tasks(κ³Όμ—…)을 μ •ν•΄ 주어라. λͺ¨λ“  λ ˆμ΄μ–΄μ˜ tasksλŠ” μžμ‹  보닀 높은 λ ˆμ΄μ–΄λ₯Ό 도와야 ν•œλ‹€.
    • services 듀을 λͺ…ν™•νžˆ ν•˜μ—¬λΌ. κ°€μž₯ μ€‘μš”ν•œ κ΅¬ν˜„ 원칙은 λ ˆμ΄μ–΄λ“€μ΄ μ—„κ²©ν•˜κ²Œ 각자 뢄리 λ˜μ–΄μ•Ό ν•œλ‹€λŠ” 점이닀. λ ˆμ΄μ–΄λ“€ 사이에 κ³΅μœ λ˜λŠ” λͺ¨λ“ˆμ€ μ—„κ²©ν•œ layering μ•½ν•˜κ²Œ ν•œλ‹€. 그리고 λ‚은 λ ˆμ΄μ–΄λ³΄λ‹€ 높은 λ ˆμ΄μ–΄μ— 더 λ§Žμ€ serviceλ₯Ό λ„£λŠ”κ²ƒμ΄ 더 λ‚λ‹€.
    • Refine layering. μœ„μ˜ 1~4번 과정을 반볡 ν•˜μ—¬λΌ.

~cpp 
μ»΄ν¬λ„ŒνŠΈλ‚˜ μ„œλΉ„μŠ€κ°€ μ‚¬μš©λ˜λŠ” 관계     |
λ ˆμ΄μ–΄λ“€                              |=> 이것듀을 생각 ν•˜κ³ λ‚˜μ„œ define components and service
λ ˆμ΄μ–΄λ“€μ˜ μ„œλΉ„μŠ€                     |  이 μˆœμ„œκ°€ λ°”λ€ŒλŠ” 것은 잘λͺ»λœ 과정이닀.
  • 각 λ ˆμ΄μ–΄μ— λŒ€ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λͺ…ν™•νžˆ 해라 (κ°€λŠ₯ν•œν•œ black-box 접근을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€, 이것이 μ‹œμŠ€ν…œ λ°œμ „μ„ 도와주기 λ•Œλ¬Έμ΄λ‹€. νš¨μœ¨μ΄λ‚˜ λ‹€λ₯Έ λ ˆμ΄μ–΄μ˜ 내뢀에 μ ‘κ·Όν•  ν•„μš”κ°€ μžˆμ„λ•ŒλŠ” μ˜ˆμ™Έμ΄λ‹€.)
  • 각 λ ˆμ΄μ–΄λ₯Ό 체계화 ν•˜μ—¬λΌ. μ–΄λ–€ λ ˆμ΄μ–΄κ°€ λ³΅μž‘ν•˜λ©΄ componentλ“€λ‘œ λ‚˜λˆ„μ–΄ μ Έμ•Ό ν•œλ‹€.
  • μΈμ ‘ν•œ λ ˆμ΄μ–΄λ“€ μ‚¬μ΄μ˜ μ†Œν†΅μ„ λͺ…ν™•νžˆ ν•˜μ—¬λΌ.
  • Decouple adjacent layers
  • λ³€ν˜•(variants)
    • Relaxed Layered System : μ΄μ‹œμŠ€ν…œμ„ ν†΅ν•΄μ„œ 얻은 μœ μ—°μ„±κ³Ό μ„±λŠ₯의 ν–₯상은 μœ μ§€λ³΄μˆ˜ λŠ₯λ ₯의 μ €ν•˜λ₯Ό κ°€μ Έμ˜¨λ‹€. application μ†Œν”„νŠΈμ›¨μ–΄ 보닀 infrastructure(영ꡬ적인) μ‹œμŠ€ν…œμ—μ„œ 자주 λ³Έλ‹€. UNIX, X Window Systemκ°€ κ·Έμ˜ˆμ΄λ‹€.
    • Layering Through Inheritance : 상속 κ΄€κ³„λ‘œ λ ˆμ΄μ–΄ νŒ¨ν„΄μ„ κ΅¬ν˜„. ν˜„μž¬ λœ¨λŠ” OOP둜 ν•  수 μžˆλ‹€.
  • 이 νŒ¨ν„΄μ˜ μ•Œλ €μ§„ μ‚¬μš©μ˜ˆ (Known Uses)
    • Virtual Muchines
    • APIs
    • Information System(IS)
    • Windows NT
  • κ²°λ‘ 
    • μž₯점
      • λ ˆμ΄μ–΄μ˜ μž¬ν™œμš© - ν”„λ‘œκ·Έλž˜λ¨Έλ“€μ€ ν˜„μž¬ μ΄μž¬ν•˜λŠ” λ ˆμ΄μ–΄κ°€ μžμ‹ μ˜ λͺ©μ μ— λ§žμ§€ λ‚³λŠ”λ‹€κ³  이미 μžˆλŠ”κ²ƒμ„ μž¬μ‚¬μš© ν•˜κΈ°λ³΄λ‹€λŠ” μƒˆλ‘œ μ§œλŠ” κ²½μš°κ°€ λ§Žλ‹€. κ·ΈλŸ¬λ‚˜ ν˜„μž¬ μ΄μž¬ν•˜λŠ” λ ˆμ΄μ–΄λ₯Ό μž¬μ‚¬μš©(black-box reuse)ν•˜λŠ” 것은 κ°œλ°œμ— λ“œλŠ” λ…Έλ ₯κ³Ό ν”„λ‘œκ·Έλž¨μ˜ 결점듀을 극적으둜 κ°μ†Œ μ‹œν‚¬ 수 μžˆλ‹€.
      • κΈ°μ€μ„ μ§€μ›ν•œλ‹€.
      • Dependescies are kept local : 의μ΄μ„±μ΄ νŠΉμ • λΆ€λΆ„μ—λ§Œ 걸쳐 있기 λ•Œλ¬Έμ— μ΄λ ‡κ²Œ λœλ‹€. λ”°λΌμ„œ μ‹œμŠ€ν…œμ΄ portabilityν•˜κ²Œ λœλ‹€.
      • Exchangeability : νŠΉμ • λ ˆμ΄μ–΄λ₯Ό μ‰½κ²Œ λ°”κΏ€ 수 μžˆλ‹€. 그것을 바꿔도 μ „μ²΄μ μœΌλ‘œ λ‹€λ₯Έ 뢀뢄은 μ•ˆλ°”κΏ”λ„ λœλ‹€. λ°”κΎΈλŠ” 것은 λ‹Ήμ—°νžˆ κ·Έ λ°”κΏ€ λŒ€μƒ λ ˆμ΄μ–΄μ˜ μΈν„°νŽ˜μ΄μŠ€λ°λ‘œ κ΅¬ν˜„λ˜μ–΄ μžˆλŠ” 것이어야 ν•œλ‹€.
    • λΆˆλ¦¬ν•œ 점(liability)
      • cascades of changing behavior : λ ˆμ΄μ–΄λ₯Ό λ°”κΎΈλŠ”κ²ƒλΏλ§Œ μ•„λ‹ˆλΌ κ·Έ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ°”κΏ€κ²½μš°μ— λ‹€λ₯Έ λΆ€λΆ„κΉŒμ§€ μˆ˜μ •ν•΄μ€˜μ•Ό ν•œλ‹€λŠ” 말 κ°™λ‹€.
      • lower efficiency : μ—¬λŸ¬κ°œμ˜ λ ˆμ΄μ–΄λ₯Ό μ§€λ‚˜μ•Ό ν•˜λ‹ˆκΉ μ‹œκ°„μ΄ 더 κ±Έλ¦¬λŠ” 것은 λ‹Ήμ—°ν•  일이닀.
      • Unnecessary work : ν•„μš”μ—†λŠ” 일도 ν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€.
      • λ ˆμ΄μ–΄λ₯Ό μ •ν™•νžˆ κ΅¬μΆ•ν•˜λŠ”κ²ƒμ΄ μ–΄λ €μš΄ 일이닀.
  • 의견 : 이 layer νŒ¨ν„΄μ„ μ‚¬νšŒμ μΈ 것과 κ²°λΆ€μ‹œμΌœμ„œ μƒκ°ν•˜λ©΄ κ΄€λ£Œμ œμ™€ λΉ„μŠ·ν•˜λ‹€κ³  μƒκ°ν•œλ‹€. ꡐ체 κ°€λŠ₯ν•˜κ³ , λ‹¨κ³„μ μœΌλ‘œ μ˜¬λΌκ°€κ³ , λ‚΄λ €κ°€κ³  뭐 μ—¬λŸ¬κ°€μ§€ 점이 μœ μ‚¬ν•˜λ‹€. 이 νŒ¨ν„΄μ΄ μ‚¬μš©ν•˜λŠ” μ‚¬λžŒλ“€μ΄ κ΄€λ£Œμ œμ—μ„œ μ°©μ•ˆν•΄μ„œ 이 νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λŠ” 것은 μ•„λ‹ˆκ² μ§€λ§Œ ν•˜μ—¬νŠΌ κ·ΈλŸ¬ν•œ μœ μ‚¬μ μ„ λ°œκ²¬ν•˜λ‹ˆκΉ μ‹ κΈ°ν–ˆλ‹€.

2.2.2. Pipes and Filters

  • 예제 : μ—¬κΈ°μ„œλŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό 예둜 λ“€μ–΄μ„œ μ„€λͺ…ν–ˆλ‹€.
  • ν™˜κ²½ : 데이터 νλ¦„μ˜ 처리
  • 생각해야할 문제
    • μΆ”ν›„μ˜ μ‹œμŠ€ν…œ ν–₯상이 μ‚¬μš©μžμ— μ˜ν•΄μ„œ μ‘°μ°¨, 처리 단계(step)듀을 λ°”κΎΈκ±°λ‚˜ μž¬μ‘°ν•© ν•˜λŠ”κ²ƒμœΌλ‘œμ„œ κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.
    • μž‘μ€ 처리 단계가 큰 components 보닀 λ‹€μ–‘ν•œ ν™˜κ²½μ— μž¬μ‚¬μš© ν•˜κΈ° μ’‹λ‹€.
    • μΈμ ‘ν•˜μ§€ μ•Šμ€ λ‹¨κ³„λŠ” 정보λ₯Ό κ³΅μœ ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • 예λ₯Ό λ“€μ–΄μ„œ λ„€νŠΈμ›Œν¬ μ—°κ²°μ΄λ‚˜ μ˜¨λ„ 정보λ₯Ό μ œκ³΅ν•˜λŠ” μ„Όμ„œμ™€ 같이 λ‹€μ–‘ν•œ μž…λ ₯ 데이타 source κ°€ μ΄μž¬ν•œλ‹€.
    • μ΅œμ’… κ²°κ³Όλ₯Ό λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ μ €μž₯ν•˜κ±°λ‚˜ λ‚˜νƒ€λ‚΄λŠ” 것이 κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.
    • λ“± μ—¬λŸ¬κ°€μ§€..
  • 이 νŒ¨ν„΄μ€ : data source - filter - pipes - filter - data sink, 의 μˆœμ„œλ‘œ λ˜μ–΄ 있고, 각 ν•„ν„°μ—μ„œλŠ” 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” ν•¨μˆ˜κ°€ μžˆμ„ 수 μžˆλ‹€. λ ˆμ΄μ–΄ νŒ¨ν„΄κ³Ό λΉ„μŠ·ν•œ 점도 λ³΄μ΄μ§€λ§Œ, 이 νŒ¨ν„΄μ˜ νŠΉμ§•μ€ μ‰¬μš΄ μž¬μ‘°ν•©κ³Ό μž¬μ‚¬μš©μ„±μ΄λ‹€. μ—λŸ¬λ₯Ό μ²˜λ¦¬ν•˜λŠ” 관점과 μ‹œμŠ€ν…œμ˜ 신뒰성을 λ”°μ§€λ©΄ λ ˆμ΄μ–΄κ°€ 더 λ‚λ‹€.
  • 의견 : 이 νŒ¨ν„΄μ€ 우체ꡭ과 λΉ„μŠ·ν•΄ λ³΄μ˜€λ‹€. γ…‘γ…‘;,

2.2.3. BlackBoard

  • 예제 : μ—¬κΈ°μ„œλŠ” μŒμ„±μΈμ‹ μ‹œμŠ€ν…œμ„ 예둜 λ“€μ—ˆλ‹€. μŒμ„±μΈμ‹ ν”„λ‘œκ·Έλž¨μ€ 단지 ν•˜λ‚˜μ˜ 단어λ₯Ό 받아듀일 뿐만 μ•„λ‹ˆλΌ ꡬ문과 단어가 νŠΉμ •ν•œ application에 ν•„μš”ν•œ λ‹¨μ–΄λ‚˜ ꡬ문둠에 λ§žλŠ” κ²ƒμœΌλ‘œ μ œν•œλœ λ¬Έμž₯ 전체λ₯Ό λ°›μ•„ 듀인닀. μ›ν•˜λŠ” output은 κ·Έ μŒμ„± μΈμ‹ν•œκ²ƒμ— λ§žλŠ” 기계적인 ν‘œν˜„μœΌλ‘œ λ°”κΎΈλŠ” 것인데 이 λ³€ν™˜ κ³Όμ •μ—λŠ” μŒμ„±μ„ 음파적으둜 μΈμ‹ν•˜λŠ” 것과, 언어학적인 λ©΄μ—μ„œ μΈμ‹ν•˜λŠ”κ²ƒκ³Ό, 톡계적인 μ „λ¬Έμ„±μ—μ„œ μΈμ‹ν•˜λŠ” 것이 ν•„μš”ν•˜λ‹€.

  • ν™˜κ²½ : μ λ‹Ήν•œ solution이 아직 μ—†λŠ” μ„±μˆ™ν•˜μ§€ μ•Šμ€ μ˜μ—­
  • 생각해야할 문제 : 각각의 λ¬Έμ œμ— λŒ€ν•œ 해결책은 λ‹€λ₯Έ ν‘œν˜„μ΄λ‚˜ paradigms 이 ν•„μš”ν•˜λ‹€. λ§Žμ€ κ²½μš°μ— μ–΄λ–»κ²Œ '뢀뢄적인 λ¬Έμ œλ“€μ„ ν’€μ–΄μ£ΌλŠ” ν•΄κ²°μ±…'이 μ–΄λ–»κ²Œ μ‘°ν•©λ˜μ–΄μ•Ό ν•˜λŠ”μ§€μ— λŒ€ν•΄μ„œ 미리 μ •μ˜λœ μ „λž΅μ€ μ—†λ‹€. μ•„λž˜μ˜ λ‚΄μš©μ€ 이런 μ’…λ₯˜μ˜ 문제λ₯Ό ν‘ΈλŠ”λ° 영ν–₯을 λΌμ§€μΉ˜λŠ” force(이 νŒ¨ν„΄μ΄ μ‚¬μš©λ˜λŠ” 경우?)듀이닀.
    • μ λ‹Ήν•œ μ‹œκ°„μ— μ™„μ „ν•œ 해결책을 μ°ΎλŠ” 것이 λΆˆκ°€λŠ₯ ν•˜λ‹€ - 10개의 단어(1000κ°œμ€‘ ν•˜λ‚˜)λ₯Ό μ‘°ν•©ν•˜μ—¬ κ°€λŠ₯ν•œ ꡬ문의 수=>(1000)의 10승 κ³Ό 같은 예
    • κ·Έ μ˜μ—­μ΄ λ―Έμ„±μˆ™ν•΄μ„œ, 같은 ν•˜λΆ€ task에 μ—¬λŸ¬κ°€μ§€ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•œλ‹€.
    • 각 λΆ€λΆ„μ˜ 문제λ₯Ό ν’€λ•Œ λ‹€μ–‘ν•œ μ•Œκ³ λ¦¬μ¦˜μ΄ μ΄μž¬ν•œλ‹€.
    • input은 intermediate 와 λ§ˆμ§€λ§‰ result와 λ§ˆμ°¬κ°€μ§€λ‘œ λ‹€μ–‘ν•œ ν‘œν˜„μ΄ μžˆλ‹€. μ•Œκ³ λ¦¬μ¦˜λ“€μ€ λ‹€μ–‘ν•œ paradigm듀에 μ˜ν•΄μ„œ μˆ˜ν–‰λœλ‹€.
    • ν•˜λ‚˜μ˜ μ•Œκ³ λ¦¬μ¦˜μ€ 보톡 λ‹€λ₯Έ μ•Œκ³ λ¦¬μ¦˜μ˜ κ²°κ³Ό μœ„μ—μ„œ μž‘λ™ν•œλ‹€.
    • λΆ€μ •ν™•ν•œ 데이터와 근사적인 ν•΄κ²°μ±…(solution)듀이 ν¬ν•¨λœλ‹€.
    • 각각 λΆ„λ¦¬λœ μ•Œκ³ λ¦¬μ¦˜μ„ μ±„μš©ν•˜λŠ” μ±„μš©ν•˜λŠ” 것은 잠재적인 ν‰ν˜• 관계λ₯Ό μœ λ„ν•œλ‹€.
    • λͺ¨λ“  뢀뢄적인 λ¬Έμ œλ“€μ€ 같은 knowledge ν‘œν˜„μ„ μ‚¬μš©ν•˜μ—¬ ν•΄κ²°λœλ‹€. κ·ΈλŸ¬λ‚˜ input으둜 λ‹€μ–‘ν•œ ν‘œν˜„μ΄ 올 수 μžˆλ‹€.
    • 전문적인 μ‹œμŠ€ν…œ κ΅¬μ‘°λŠ” application of knowledge에 λŒ€ν•΄μ„œ 단지 ν•˜λ‚˜μ˜ μΆ”λ‘  엔진을 μ œκ³΅ν•œλ‹€. λ‹€μ–‘ν•œ ν‘œν˜„μ— λŒ€ν•œ λ‹€μ–‘ν•œ 뢀뢄적인 λ¬Έμ œλ“€μ€ λΆ„λ¦¬λœ μΆ”λ‘  엔진을 ν•„μš”λ‘œ ν•œλ‹€.
    • -
  • ν•΄κ²°μ±…(solution) : Blackboard ꡬ쑰의 바탕에 κΉ”λ¦° κ°œλ…μ€ κ³΅λ™μ˜ 데이터 ꡬ쑰에 λŒ€ν•΄μ„œ ν˜‘λ™μ μœΌλ‘œ μž‘λ™ν•˜λŠ” λ…λ¦½λœ ν”„λ‘œκ·Έλž¨λ“€μ˜ 집합이닀. κ·Έ 독립적인 ν”„λ‘œκ·Έλž¨λ“€μ€ μ„œλ‘œ λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ„ ν˜ΈμΆœν•˜μ§€ μ•Šκ³  λ˜ν•œ κ·Έκ²ƒμ˜ 행동에 λŒ€ν•΄ 미리 μ •μ˜λœ μˆœμ„œλŠ” μ—†λ‹€. λŒ€μ‹ μ— μ‹œμŠ€ν…œμ˜ λ°©ν–₯은 주둜 ν˜„μž¬μ˜ μƒνƒœλ‚˜ μ§„ν–‰(progress)에 μ˜ν•΄ κ²°μ •λœλ‹€. 데이터-관리 μ‘°μ’… 체계(data-directed control regime)λŠ” opportunistic problem solving 이라고도 λΆˆλ¦°λ‹€. moderator(μ€‘μž¬μž) componentλŠ” λ§Œμ•½ ν•˜λ‚˜ μ΄μƒμ˜ componentκ°€ contribution을 λ§Œλ“€μˆ˜ μžˆλ‹€λ©΄ ν”„λ‘œκ·Έλž¨λ“€μ΄ μ‹€ν–‰λ˜λŠ” μˆœμ„œλ₯Ό κ²°μ •ν•œλ‹€.
  • ꡬ쑰 : μžμ‹ μ˜ μ‹œμŠ€ν…œμ„ blackboard(knowledge sourceλ“€μ˜ μ§‘ν•©, control components)라고 λΆˆλ¦¬μš°λŠ” component둜 λ‚˜λˆ„μ–΄λΌ. blackboardλŠ” 쀑앙 데이터 μ €μž₯μ†Œμ΄λ‹€. solution space와 control dataλ“€μ˜ μš”μ†Œλ“€μ΄ 여기에 μ €μž₯λœλ‹€. ν•˜λ‚˜μ˜ hypothesisλŠ” 보톡 μ—¬λŸ¬κ°€μ§€ μ„±μ§ˆμ΄ μžˆλ‹€. κ·Έ μ„±μ§ˆλ‘œλŠ” 좔상 레벨과 μΆ”μΈ‘λ˜λŠ” κ°€μ„€μ˜ 사싀 정도 λ˜λŠ” κ·Έ κ°€μ„€μ˜ μ‹œκ°„ 간격(κ±Έλ¦¬λŠ” μ‹œκ°„μ„ λ§ν•˜λŠ”κ±° κ°™λ‹€.)이닀. 'part-of'λ˜λŠ”'in-support of'와 같이 κ°€μ„€λ“€ μ‚¬μ΄μ˜ 관계λ₯Ό λͺ…확이 ν•˜λŠ” 것은 보톡 μœ μš©ν•˜λ‹€. blackboard λŠ” 3차원 문제 κ³΅κ°„μœΌλ‘œ λ³Ό μˆ˜λ„ μžˆλ‹€. XμΆ• - time, YμΆ• - abstraction, ZμΆ• - alternative solution. knowledge source듀은 μ§μ ‘μ μœΌλ‘œ μ†Œν†΅μ„ ν•˜μ§€ μ•ŠλŠ”λ‹€. 그듀은 단지 blackboardμ—μ„œ 읽고 쓸뿐이닀. 그러λ€λ‘œ knowledge source 듀은 blackboard 의 vocabulary듀을 이해해야 ν•œλ‹€. 각 knowledge source듀은 conditionλΆ€λΆ„κ³Ό actionλΆ€λΆ„μœΌλ‘œ λ‚˜λˆŒ 수 μžˆλ‹€. condition 뢀뢄은 knowledge sourceκ°€ κΈ°μ—¬λ₯Ό ν• μˆ˜ μžˆλŠ”μ§€ κ²°μ •ν•˜κΈ° μœ„ν•΄μ„œ blackboard에 μ μœΌλ©΄μ„œ ν˜„μž¬ solution process 의 μƒνƒœλ₯Ό κ³„μ‚°ν•œλ‹€. action 뢀뢄은 blackboard의 λ‚΄μš©μ„ λ°”κΏ€ 수 μžˆλŠ” λ³€ν™”λ₯Ό μΌμœΌν‚¨λ‹€. control component λŠ” 루프λ₯Ό λŒλ©΄μ„œ blackboard에 λ‚˜νƒ€λ‚˜λŠ” λ³€ν™”λ₯Ό κ΄€μ°°ν•˜κ³  λ‹€μŒμ— μ–΄λ–€ action을 μ·¨ν• μ§€ κ²°μ •ν•œλ‹€. blackboard componentλŠ” inspect와 update의 두가지 procedureλ₯Ό κ°€μ§€κ³  μžˆλ‹€.

~cpp 
Class : BlackBoard
 Responsibility : Manages central data
 Collaborators : -

Class : Knowledge Source
 Responsibility : Evaluates its own applicability, Computes a result, Updates Black board
 Collaborators : Blackboard

Class : Control
 Responsibility : Monitors Blackboard, Schedules Knowledge Source activations
 Collaborator : Blackboard, Knowledge Source
  • Dynamices(λ™μž‘)
    • λ‹€μŒ μ•„λž˜μ˜ λ‚΄μš©λ“€μ€ blackboard ꡬ쑰의 행동에 λŒ€ν•œ μ„œμˆ μ΄λ‹€.
      • control component의 main loofκ°€ μ‹œμž‘λœλ‹€.
      • nextSource() λ¨Όμ € blackboardλ₯Ό κ΄€μ°°ν•¨μœΌλ‘œμ¨ μ–΄λ–€ knowledge sourceκ°€ μž μž¬μ„±μžˆλŠ” κ³΅ν—ŒμžμΈμ§€ κ²°μ •ν•œλ‹€.
      • nextSource() 각 후보 knowledge source의 condition 뢀뢄을 λΆˆλŸ¬λ‚Έλ‹€.
      • control componentλŠ” λΆˆλŸ¬λ‚Ό knowledge source와 μ•žμœΌλ‘œμ˜ μž‘μ—…μ— μ‚¬μš©λ  ν•˜λ‚˜μ˜ hypothesisλ‚˜ hypothesis 집합을 μ„ νƒν•œλ‹€. μ˜ˆμ œμ—μ„œλŠ” condition λΆ€λΆ„μ˜ 결과에 μ˜ν•΄μ„œ κ·Έ 선택이 μ΄λ£¨μ–΄μ‘Œλ‹€.
  • κ΅¬ν˜„(implementation) : blackboard pattern을 κ΅¬ν˜„ν•˜λ €λ©΄ λ‹€μŒκ³Ό 같은 단계λ₯Ό μˆ˜ν–‰ν•˜μ—¬λΌ.
    • 1.문제(problem)λ₯Ό μ •μ˜ ν•˜μ—¬λΌ
      • 문제의 μ˜μ—­κ³Ό knowledge의 일반적인 μ˜μ—­λ“€μ„ λͺ…ν™•νžˆ ν•˜λŠ” 것은 ν•΄κ²°μ±…(solution)을 λ°œκ²¬ν•˜λŠ”λ° ν•„μš”ν•˜λ‹€.
      • μ‹œμŠ€ν…œμ— λŒ€ν•œ input을 μ •λ°€ν•˜κ²Œ μ‘°μ‚¬ν•˜μ—¬λΌ.
      • μ‹œμŠ€ν…œμ˜ output을 μ •μ˜ν•˜μ—¬λΌ
      • μ‚¬μš©μžκ°€ μ‹œμŠ€ν…œκ³Ό μ–΄λ–»κ²Œ μ„œλ‘œ μž‘μš©ν•˜λŠ”μ§€ μžμ„Ένžˆ λ§ν•˜μ—¬λΌ.
    • 2.κ·Έ λ¬Έμ œμ— λŒ€ν•œ solution space(ν•΄κ²° 곡간)을 μ •μ˜ν•˜μ—¬λΌ.

~cpp 
top-level solution - highest abstraction level
imtermediate solution - other level(except highest abstraction level)

complete solution - solution which solve whole problem
partial solution - solution which solve part of the problem

complete solution은 intermediate λ ˆλ²¨μ— μ†ν• μˆ˜ 있고, partial solution은 μ•„λ§ˆλ„ top 레벨일 것이닀.(λ¬΄μŠ¨λ§μ΄μ§€?γ…‘γ…‘;)




2.3. Thread

μ†Œν”„νŠΈμ›¨μ–΄ 아킀텍좰와 νŒ¨ν„΄μ— 관심이 μžˆλŠ” μ‚¬λžŒλ“€μ—κ²Œ κ°•λ ₯ μΆ”μ²œν•©λ‹ˆλ‹€. 1, 2κΆŒμ„ λͺ¨λ‘ 사기 νž˜λ“€λ‹€λ©΄ 일단은 1κΆŒλ§Œμ΄λΌλ„ κ°–μΆ”λŠ” 것이 쒋을 κ²ƒμž…λ‹ˆλ‹€. --JuNe

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:24:00
Processing time 0.0620 sec