8. Architecture
Learning Goals
- architectural reasoning(์ํคํ ์ฒ ์ถ๋ก )์ abstraction level(์ถ์ํ ์์ค) ์ดํด
- quality attributes(ํ์ง ์์ฑ)๋ฅผ ์ผ๋์ ๋๊ณ software architecture(์ํํธ์จ์ด ์ํคํ ์ฒ)์ ์ ๊ทผ
- software architecture์(object-oriented) software design(๊ฐ์ฒด ์งํฅ ์ํํธ์จ์ด ์ค๊ณ) ๊ตฌ๋ณ
- ๋ชฉ์ ์ ์ ํฉํ ์ํคํ ์ฒ๋ฅผ ๊ธฐ์ ํ๊ธฐ ์ํด notation(ํ๊ธฐ๋ฒ)๊ณผ views(๋ทฐ) ์ฌ์ฉ
- ๋ชจํธํจ ์์ด ๋ช ํํ๊ฒ ์ํคํ ์ฒ ๋ฌธ์ํ
Where We Are
Quality Requirements, Now What?
- "highly available(๊ณ ๊ฐ์ฉ์ฑ)์ด์ด์ผ ํจ".
- "์ ์ํ๊ฒ ์๋ตํด์ผ ํจ, accuracy(์ ํ์ฑ)์ ๋ ๊ด๋ จ๋จ".
- "extensible(ํ์ฅ ๊ฐ๋ฅ)ํด์ผ ํจ".
- "hardware resources(ํ๋์จ์ด ์์)๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํด์ผ ํจ".
Software Architecture
Software Architecture
- ํ๋ก๊ทธ๋จ ๋๋ ์ปดํจํ ์์คํ ์ software architecture๋ ์์คํ ์ ๊ตฌ์กฐ ๋๋ ๊ตฌ์กฐ๋ค๋ก์, software elements(์ํํธ์จ์ด ์์), ํด๋น ์์๋ค์ externally visible properties(์ธ๋ถ์ ๋ณด์ด๋ ์์ฑ), ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค ๊ฐ์ relationships(๊ด๊ณ)๋ฅผ ํฌํจํจ.
- [Bass et al., Software Architecture in Practice 2nd ed., 2003]
Software Architecture Example
- ์ข์?
Why Architecture? [Bass et al., 2003]
- ๊ฐ์ฅ ์ด๋ฅธ design decisions(์ค๊ณ ๊ฒฐ์ ) ํํ.
- Aids in communication with stakeholders(์ดํด๊ด๊ณ์์์ ์์ฌ์ํต)
- ๊ทธ๋ค์ด ์ดํดํ ์ ์๋ ์์ค์์ "how(๋ฐฉ๋ฒ)"๋ฅผ ๋ณด์ฌ์ฃผ์ด, ๊ทธ๊ฒ์ด ๊ทธ๋ค์ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๋์ง์ ๋ํ ์ง๋ฌธ ์ ๊ธฐ
- Defines constraints on implementation(๊ตฌํ์ ๋ํ ์ ์ฝ)
- ์ค๊ณ ๊ฒฐ์ ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ "load-bearing walls(๋ด๋ ฅ๋ฒฝ)" ํ์ฑ
- Dictates organizational structure(์กฐ์ง ๊ตฌ์กฐ)
- ํ์ด ์๋ก ๋ค๋ฅธ components(๊ตฌ์ฑ์์) ์์
- Inhibits or enables quality attributes
- design patterns(์ค๊ณ ํจํด)๊ณผ ์ ์ฌ
- Supports predicting cost, quality, and schedule(๋น์ฉ, ํ์ง, ์ผ์ ์์ธก ์ง์)
- ์ผ๋ฐ์ ์ผ๋ก ๊ฐ ๊ตฌ์ฑ์์์ ์ ๋ณด๋ฅผ ์์ธกํจ์ผ๋ก์จ
- Aids in software evolution(์ํํธ์จ์ด ์งํ ์ง์)
- ๋ณ๊ฒฝ์ ๋น์ฉ, ์ค๊ณ, ์ํฅ์ ๋ํด ์ถ๋ก
- Aids in prototyping(ํ๋กํ ํ์ดํ ์ง์)
- architectural skeleton(์ํคํ ์ฒ ์ค์ผ๋ ํค)์ ์กฐ๊ธฐ์ ๊ตฌํ ๊ฐ๋ฅ
Beyond Functional Correctness
- ํ์ง์ด ์ค์ํจ. ์:
- Performance(์ฑ๋ฅ)
- Availability(๊ฐ์ฉ์ฑ)
- Modifiability(์์ ์ฉ์ด์ฑ), portability(์ด์์ฑ)
- Scalability(ํ์ฅ์ฑ)
- Security(๋ณด์)
- Testability(ํ ์คํธ ์ฉ์ด์ฑ)
- Usability(์ฌ์ฉ์ฑ)
- ๊ตฌ์ถ ๋น์ฉ, ์ด์ ๋น์ฉ
Case Study: Architecture and Quality at Twitter(Now Xโฆ)
Twitter Suffered From Over Capacity
โฆdue to the Big Event
Inspecting the State of Engineering
- ์ธ๊ณ ์ต๋ ๊ท๋ชจ์ Ruby on Rails ์ค์น ์ค ํ๋ ์ด์
- 200๋ช ์ ์์ง๋์ด
- Monolithic(๋ชจ๋๋ฆฌ์): ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค, memcache ๊ด๋ฆฌ, ์ฌ์ดํธ ๋ ๋๋ง, ๊ณต์ฉ API ์ ๊ณต์ ํ๋์ ์ฝ๋๋ฒ ์ด์ค์์ ์ํ
- ์์คํ ์ดํด๊ฐ ์ ์ ์ด๋ ค์์ง; ์์ง๋์ด๋ง ํ ๊ด๋ฆฌ ๋ฐ ๋ณ๋ ฌํ๊ฐ ์กฐ์ง์ ์ผ๋ก ์ด๋ ค์
- ์คํ ๋ฆฌ์ง ์์คํ (MySQL)์ throughput(์ฒ๋ฆฌ๋) ํ๊ณ ๋๋ฌ; ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋ฐ์ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ hot spots(ํซ์คํ)
- ๋ฌธ์ ํด๊ฒฐ์ ์ํด ๊ธฐ๊ณ ํฌ์ ; ๊ธฐ๊ณ๋น ๋ฎ์ ์ฒ๋ฆฌ๋(CPU + RAM ํ๊ณ, ๋คํธ์ํฌ๋ ํฌํ๋์ง ์์)
- ์ต์ ํ์ ๋๋ ๋ง: ์ฝ๋ ๊ฐ๋ ์ฑ vs ์ฑ๋ฅ ํธ๋ ์ด๋์คํ
- https://blog.x.com/engineering/en_us/a/2013/new-tweets-per-second-record-and-how
Twitter's Quality Requirements / Redesign goals??
- Improve median latency(์ค์๊ฐ ์ง์ฐ ์๊ฐ ๊ฐ์ ); lower outliers(์ด์์น ๊ฐ์)
- Reduce number of machines 10x(๊ธฐ๊ณ ์ 10๋ฐฐ ๊ฐ์)
- Isolate failures(์ฅ์ ๊ฒฉ๋ฆฌ)
- "์ฐ๋ฆฌ๋ '๊ด๋ จ๋' ๋ก์ง์ด ํ๊ณณ์ ์๋ ๋ ๊นจ๋ํ ๊ฒฝ๊ณ๋ฅผ ์ํ์" -(ํด๋์ค, ๋ชจ๋, ํจํค์ง ์์ค์ด ์๋) ์์คํ ์์ค์์์ encapsulation(์บก์ํ) ๋ฐ modularity(๋ชจ๋์ฑ)
- Quicker release of new features(์ ๊ท ๊ธฐ๋ฅ์ ๋ ๋น ๋ฅธ ์ถ์)
- "๋ค๋ฅธ ํ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ๋ก์ปฌ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ณ ์ฌ์ฉ์ ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐฐํฌํ ์ ์๋, ์๊ณ ๊ถํ์ด ๋ถ์ฌ๋ ์์ง๋์ด๋ง ํ ์ด์"
Caching
JVM vs RubyVM
- Rails ์๋ฒ๋ ํธ์คํธ๋น 200-300 requests / sec ๊ฐ๋ฅ
- JVM์์์ Scala ๊ฒฝํ; ์ ๋ขฐ ์์ค
- JVM์ผ๋ก ์ฌ์์ฑํ์ฌ ํธ์คํธ๋น 10-20k requests / sec ํ์ฉ
Programming Model
- Ruby model: Concurrency(๋์์ฑ) at process level(ํ๋ก์ธ์ค ์์ค); ์์ฒญ์ด ํ์ ์์ฌ ํ๋์ ํ๋ก์ธ์ค๊ฐ ์ฒ๋ฆฌ
- Twitter ์๋ต์ ์ฌ๋ฌ ์๋น์ค์์ ์ง๊ณ๋จ โ ์๋ต ์๊ฐ ํฉ์ฐ
- "์์คํ ์ ์๋น์ค๋ก ๋ถํดํ๊ธฐ ์์ํ๋ฉด์ ๊ฐ ํ์ ์ฝ๊ฐ์ฉ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ทจํ์. ์๋ฅผ ๋ค์ด, ํด๋ผ์ด์ธํธ์์ ์๋น์ค๋ก์ ์ฅ์ ์๋ฏธ๋ก ์ด ์ ์ํธ์์ฉํ์ง ์์์: ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ๋ค์ ์ ํธ๋ฅผ ๋ณด๋ผ ์ผ๊ด๋ back-pressure(์ญ์๋ ฅ) ๋ฉ์ปค๋์ฆ์ด ์์๊ณ , ์ง์ฐ ์๊ฐ์ด ๊ธด ์๋น์ค๋ฅผ ๊ณต๊ฒฉ์ ์ผ๋ก ์ฌ์๋ํ๋ ํด๋ผ์ด์ธํธ๋ก ์ธํ 'thundering herds(๋ชฐ๋ ค๋๋ ๋ฌด๋ฆฌ)' ํ์ ๊ฒฝํ."
- ๋ชฉํ: ๋์์ฑ์ ๋ํด ์๊ฐํ๋ ๋จ์ผํ๊ณ ํต์ผ๋ ๋ฐฉ์
- RPC(Finagle), connection pooling(์ปค๋ฅ์ ํ๋ง), failover strategies(์ฅ์ ๊ทน๋ณต ์ ๋ต), load balancing(๋ก๋ ๋ฐธ๋ฐ์ฑ)์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ตฌํ
Independent Systems
- "๋ชจ๋๋ฆฌ์ ํ๊ฒฝ์์๋ ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ดํดํ๋ ์ ๋ฌธ๊ฐ ๋๋ ๋ชจ๋/ํด๋์ค ์์ค์ ๋ช ํํ ์์ ์๊ฐ ํ์ํ์. ์ํ๊น๊ฒ๋ ์ฝ๋๋ฒ ์ด์ค๊ฐ ๋๋ฌด ์ปค์ ธ์ ๊ธ๋ก๋ฒ ์ ๋ฌธ๊ฐ๋ฅผ ๋๊ธฐ ์ด๋ ค์ ๊ณ , ์ค์ ๋ก๋ ๋ชจ๋/ํด๋์ค ์์ค์ ๋ช ํํ ์์ ์ ๋ฐฉ์์ด ์๋ํ์ง ์์์. ์ฝ๋๋ฒ ์ด์ค ์ ์ง๊ฐ ์ ์ ๋ ์ด๋ ค์์ก๊ณ , ํ๋ค์ ํน์ ๊ธฐ๋ฅ์ ์ดํดํ๊ธฐ ์ํด '๊ณ ๊ณ ํ ๋ฐ๊ตด'์ ํ๊ฑฐ๋, ๋ฐ์ํ๋ ๋๊ท๋ชจ ์ฅ์ ๋ฅผ ์ดํดํ๊ธฐ ์ํด '๊ณ ๋ ์ฌ๋ฅ ์์ ๋'๋ฅผ ์กฐ์งํ๋ ๋ฐ ๋์์์ด ์๊ฐ์ ๋ณด๋์."
- ๋ชจ๋๋ฆฌ์ ์์คํ
์์ ๋ค์ค ์๋น์ค๋ก
- RPC interfaces(RPC ์ธํฐํ์ด์ค) ํฉ์, ์์คํ ๋ด๋ถ ๋ ๋ฆฝ์ ๊ฐ๋ฐ
- Self-contained teams(์์ฒด ์๊ฒฐํ ํ)
Storage
- Single-master MySQL database bottleneck(๋จ์ผ ๋ง์คํฐ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๋ชฉ ํ์)
- Temporal clustering(์๊ฐ์ ํด๋ฌ์คํฐ๋ง)
- ๋จ๊ธฐ ํด๊ฒฐ์ฑ
- ํธ์ค๋ ๋ก๋ ๋ฐธ๋ฐ์ค
- 3์ฃผ๋ง๋ค ๊ธฐ๊ณ 1๋ + replications(๋ณต์ )
- "๋๋ต ์ ๋ ฌ ๊ฐ๋ฅํ" ID๋ฅผ ๊ฐ์ง distributed database(๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค)(Gizzard on MySQL)๋ก ์ด๋
Data-Driven Decisions
- ์๊ณ ๋ ๋ฆฝ์ ์ธ ์๋น์ค ๋ค์, ๊ฐ์ ์ฆ๊ฐ
- RPC framework(RPC ํ๋ ์์ํฌ) ์์ ์์ฒด dynamic analysis tool(๋์ ๋ถ์ ๋๊ตฌ) ๊ตฌ์ถ
- ๋ง์ ์์ ๊ธฐ๊ณ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํ ํ๋ ์์ํฌ
- ์ฌ์ฉ์ ์ผ๋ถ์๊ฒ๋ง ๊ธฐ๋ฅ์ ๋ ธ์ถํ๋ ๊ธฐ๋ฅ ํฌํจ
Success Story: ๅคฉ็ฉบใฎๅใฉใใฅใฟ(Castle in the sky)
Data-Driven Decisions
- ์ผ๋ณธ์์ 8์ 3์ผ ํ ์์ผ, ์ฌ๋๋ค์ด <์ฒ๊ณต์ ์ฑ ๋ผํจํ> ๋ฐฉ์์ ์์ฒญํ๋ฉฐ ํธ์ํฐ์ ๋ชฐ๋ ค๋ค์ด, ์ด๋น 143,199 ํธ์์ด๋ผ๋ ์ ์ ์ ๊ธฐ๋กํจ.
- New Tweets per second(TPS) record(์ด๋น ์ ๊ท ํธ์ ์ ๊ธฐ๋ก): 143,199 TPS.
- Typical day(ํ์์): 5์ต ๊ฐ ์ด์์ ํธ์ ์ ์ก; ํ๊ท 5,700 TPS
Key Insights: Twitter Case Study
- Architectural decisions(์ํคํ ์ฒ ๊ฒฐ์ )์ ๊ฐ๋ณ ๋ชจ๋๋ฟ๋ง ์๋๋ผ ์ ์ฒด ์์คํ ์ ์ํฅ
- Abstract(์ถ์์ ), ๋ค์ํ ์๋๋ฆฌ์ค์ ๋ํ ๋ค์ํ ์ถ์ํ
- quality attributes์ ๋ํด ์กฐ๊ธฐ์ ์ถ๋ก
- ์ํคํ ์ฒ ๊ฒฐ์ ์ explicit(๋ช ์์ )ํ๊ฒ ๋ง๋ฆ
- ์ง๋ฌธ: ์๋ ์ํคํ ํธ๊ฐ ์๋ชป๋ ๊ฒฐ์ ์ ๋ด๋ ธ๋๊ฐ?
Architecture is Evolving
Architecture vs(Object-level) Design
Levels of Abstraction
- Requirements(์๊ตฌ์ฌํญ)
- high-level โwhatโ(์์ ์์ค "๋ฌด์์")
- Architecture(High-level design)(์ํคํ
์ฒ(์์ ์์ค ์ค๊ณ))
- high-level โhowโ, mid-level โwhatโ
- OO-Design(Low-level design, e.g., design patterns)(OO ์ค๊ณ(ํ์ ์์ค ์ค๊ณ, ์: ์ค๊ณ ํจํด))
- mid-level โhowโ, low-level โwhatโ
- Code(์ฝ๋)
- low-level โhowโ
Architecture vs Design
Architectural Questions
- Eclipse๋ฅผ plugin(ํ๋ฌ๊ทธ์ธ)์ผ๋ก ์ด๋ป๊ฒ ํ์ฅํ๋๊ฐ?
- ์ด๋ค threads(์ค๋ ๋)๊ฐ ์กด์ฌํ๋ฉฐ ์ด๋ป๊ฒ coordinate(์กฐ์ )๋๋๊ฐ?
- Google์ ํ๋ฃจ ์์ญ์ต ๊ฑด์ ํํธ๋ฅผ ์ด๋ป๊ฒ scale(ํ์ฅ)ํ๋๊ฐ?
- firewalls(๋ฐฉํ๋ฒฝ)์ ์ด๋์ ๋์ด์ผ ํ๋๊ฐ?
- subsystems(ํ์ ์์คํ ) ๊ฐ์ interface(์ธํฐํ์ด์ค)๋ ๋ฌด์์ธ๊ฐ?
Design Questions
- Eclipse์ ๋ฉ๋ด ํญ๋ชฉ์ ์ด๋ป๊ฒ ์ถ๊ฐํ๋๊ฐ?
- Eclipse์ ๋ฉ๋ด ํญ๋ชฉ์ ์ฝ๊ฒ ์ถ๊ฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋๊ฐ?
- ์ด๋ค lock(์ ๊ธ)์ด ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๋๊ฐ?
- Google์ ํ์ด์ง ์์๋ฅผ ์ด๋ป๊ฒ ๋งค๊ธฐ๋๊ฐ?
- ๋ณด์ ํต์ ์ ์ํด ์ด๋ค encoder(์ธ์ฝ๋)๋ฅผ ์ฌ์ฉํด์ผ ํ๋๊ฐ?
- objects(๊ฐ์ฒด) ๊ฐ์ ์ธํฐํ์ด์ค๋ ๋ฌด์์ธ๊ฐ? Objects
Architecture Disentangled
- Architecture as structures and relations(๊ตฌ์กฐ์ ๊ด๊ณ๋ก์์ ์ํคํ ์ฒ)(the actual system - ์ค์ ์์คํ )
- Architecture as documentation(๋ฌธ์ํ๋ก์์ ์ํคํ ์ฒ)(representations of the system - ์์คํ ์ ํํ)
- Architecture as(design) process((์ค๊ณ) ํ๋ก์ธ์ค๋ก์์ ์ํคํ ์ฒ)(activities around the other two - ๋ค๋ฅธ ๋ ๊ฐ์ง๋ฅผ ๋๋ฌ์ผ ํ๋)
Why Document Architecture?
- ์์คํ
์ ์ํ Blueprint(์ฒญ์ฌ์ง)
- ์กฐ๊ธฐ ๋ถ์์ ์ํ ์ฐ์ถ๋ฌผ
- quality attributes์ ์ฃผ์ ์ ๋ฌ์
- ๋ฐฐํฌ ํ ์ ์ง๋ณด์ ๋ฐ ํฅ์์ ํต์ฌ
- ๋ฌธ์ํ๋ ํ์ฌ์ 20๋
ํ์ ์ํคํ
ํธ๋ฅผ ๋๋ณํจ
- ์์คํ ์ด ๋ฌธ์ํ๋ ์ํคํ ์ฒ์ ๋ฐ๋ผ ๊ตฌ์ถ, ์ ์ง๋ณด์, ์งํํ๋ ๋์
- Support traceability(์ถ์ ์ฑ ์ง์).
Different Views
Common Views in Documenting Software Architecture
- Static View(์ ์ ๋ทฐ)
- Modules(๋ชจ๋)(subsystems, structures) ๋ฐ ๊ทธ๋ค์ relations(๊ด๊ณ)(dependencies(์์กด์ฑ), โฆ)
- Dynamic View(๋์ ๋ทฐ)
- Components(processes(ํ๋ก์ธ์ค), runnable entities) ๋ฐ connectors(์ปค๋ฅํฐ)(messages(๋ฉ์์ง), data flow(๋ฐ์ดํฐ ํ๋ฆ), โฆ)
- Physical View(Deployment)(๋ฌผ๋ฆฌ์ ๋ทฐ(๋ฐฐํฌ))
- Hardware structures(ํ๋์จ์ด ๊ตฌ์กฐ) ๋ฐ ๊ทธ๋ค์ connections(์ฐ๊ฒฐ)
Views and Purposes
- ๋ชจ๋ ๋ทฐ๋ ๋ชฉ์ ๊ณผ ์ผ์นํด์ผ ํจ.
- ์๋ก ๋ค๋ฅธ ๋ทฐ๋ ์๋ก ๋ค๋ฅธ ์ถ๋ก ์ธก๋ฉด(๋ค๋ฅธ ํ์ง ๋ชฉํ)์ ์ ํฉํจ. ์:
- Performance
- Extensibility
- Security
- Scalability
- โฆ
Online Shopping Architecture
Selecting a Notation
- ๋ชฉ์ ์ ์ ํฉ
- ๊ฐ๊ฒฐํ ํํ์ ์ํด ์ข ์ข ์๊ฐ์
- ์ผ๋ฐ์ ์ผ๋ก ์์์ ํ์ดํ
- UML ๊ฐ๋ฅ(semi-formal(์ค์ ํ)), ํ์ง๋ง ์ ์ฝ์ด ์์ ์ ์์
- ๋ค๋ฅธ ์ถ์ํ ์์ค์ ์ ์ โ ํด๋์ค๋ ๊ฐ์ฒด๊ฐ ์๋ ํ์ ์์คํ ๋๋ ํ๋ก์ธ์ค
- Formal notations(์ ํ ํ๊ธฐ๋ฒ) ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ค์ด์ด๊ทธ๋จ์ ๊ณ์ธต์ ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ๋ทฐ ๋จ์๋ก ๋ถํด
What is Wrong Today?
- ํ์
์ ์ค์ ๋ฌธ์ํ๋ ๋ค์์ผ๋ก ๊ตฌ์ฑ๋จ
- Ambiguous(๋ชจํธํ) ์์-์ ๋ค์ด์ด๊ทธ๋จ
- ์ผ๊ด์ฑ ์๋ ํ๊ธฐ๋ฒ ์ฌ์ฉ
- ํผ๋์ค๋ฌ์ด ๋ทฐ ์ ํ์ ์กฐํฉ
- ๋ง์ ๊ฒ๋ค์ด ๋ช
์๋์ง ์์ ์ฑ ๋จ์ ์์:
- ์ด๋ค ์ข ๋ฅ์ ์์์ธ๊ฐ?
- ์ด๋ค ์ข ๋ฅ์ ๊ด๊ณ์ธ๊ฐ?
- ์์์ ํ์ดํ๋ ๋ฌด์์ ์๋ฏธํ๋๊ฐ?
- ๋ ์ด์์์ ์ค์์ฑ์ ๋ฌด์์ธ๊ฐ?
What Could the Arrow Mean?
- ๋ง์ ๊ฐ๋ฅ์ฑ
- A๊ฐ B์๊ฒ ์ ์ด๊ถ ์ ๋ฌ
- A๊ฐ B์๊ฒ ๋ฐ์ดํฐ ์ ๋ฌ
- A๊ฐ B๋ก๋ถํฐ ๊ฐ ํ๋
- A๊ฐ B์๊ฒ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ
- A๊ฐ B์๊ฒ ๋ฉ์์ง ์ ์ก
- A๊ฐ B ์์ฑ
- A๊ฐ B๋ณด๋ค ๋จผ์ ๋ฐ์
- B๊ฐ A๋ก๋ถํฐ ์ ๊ธฐ ๊ณต๊ธ๋ฐ์
Guidelines: Avoiding Ambiguity
- ํญ์ legend(๋ฒ๋ก) ํฌํจ
- ์์๊ฐ ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ ํํ๊ฒ ์ ์
- ์ ์ด ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ ํํ๊ฒ ์ ์
- ์๋์น ์๊ฒ ๋ทฐ ์ ํ ํผํฉ ๊ธ์ง
- ์๊ธฐ: Module(classes), C&C(components)
- ๊ทธ๋ํฝ์ ์ค๋ช
์ผ๋ก ๋ณด์ถฉ
- ๋งค์ฐ ์ค์: rationale(์ด๋ก ์ ๊ทผ๊ฑฐ)(architectural intent - ์ํคํ ์ฒ ์๋)
- ํ๋์ ๋ค์ด์ด๊ทธ๋จ์ ๋๋ฌด ๋ง์ ๊ฒ์ ํ๋ ค๊ณ ์๋ ๊ธ์ง
- ์ํคํ ์ฒ์ ๊ฐ ๋ทฐ๋ ํ ํ์ด์ง์ ๋ง์์ผ ํจ
- ๊ณ์ธต ๊ตฌ์กฐ ์ฌ์ฉ
Common Software Architectures
Pipes and Filters
Pipes and Filters Example: Compilers
Object-Oriented Organization
- David Garlan and Mary Shaw, CMU/SEI-94-TR-021
