Module View
- 개발자가 그리는 Class Element 로 그림, Software
Layered Style
- 하위 레이어는 상위레이어에 의존하지만 그 반대는 안됨
- 어떤 요구사항이 변경 됐을 때, 모듈간 의존성이 아래와 같으면 맨 밑에꺼가 바뀌면 젤 위에가 영향을 미칠 수 있다. 상위 레이어는 마음대로 바꿔도 상관없음. 어떤 요구사항이 더 빈번한지에 따라서 레이어를 젤 상위로 보내고, 잘 안 바뀌는 부분(Stable)은 레이어를 젤 아래로 보내는 것이 좋고, 싸이클이 없어야 한다.

- concern 으로 구분하는 것이 좋음
- Data/Calculate/Logic 에 관련 된 부분으로 Module 을 나눔
[원칙]
- SDP (Stable Dependency Principle) : 안정적인 모듈에 의존
- ADP (Acycle ")
Work Assignment View
- 각각의 Module 이 누구한테 할당될것인지 Table 로 정리한 것
- Module 하나에 대해서 여러 조직이 공유하는 것은 좋지 않음. Communication overhead 가 커짐
- Ownership 을 하나만 갖도록 하는 것이 좋음
- Module 구성 설계시 조직에 바탕을 두고 그리는 것이 좋음
- 중요한 concern 중 하나
Component & Connector View
Element
Componenet
Connectors
- 경로
- Component 와 Component
실행 동작에 대한 설명
Relations
- Attachment
- Interface delegation
Client-Server Style
Deployment View
- Component 는 Computing platform
- 내가 구동하는 infra 가 어떤 element unit 으로 배치하고 그 unit 으로 동작시키는지를 봐야함
- CPU, Core 를 다 Deployment unit 으로 볼 수 있다.
- Virtual Machine, Container
- OS Process/thread 가 모두 Deployment unit 이 될 수 있음
- 과거에는 hardware로 봤지만, 지금은 내가 개발하는 compute environment 의 실행 unit으로 봐라
- multi thread 인 경우 thread 가 deployment unit 이 됨
- OS 없이 multi core 에서 동작하면 core 가 deployment unit 이 됨
- 클라우드에서는 POD 가 deployment unit 이 됨
- ROS 에서는 node
- Real-time OS 는 task
- 내가 컴퓨터를 3대를 쓴다면, 컴퓨터는 Component이고 그 안에 OS가 여러개이면 Deployement View로 봐준다.
- 시스템이 어떻게 구성되느냐에 따라서 어떤 영향을 미칠지 달라지기 때문에 실행측면에서의 분석을 하고자 할 때 Deployement View 를 본 후 Component View 를 본다.
SW Architecture = Set of Views
- Element 개발 측면에서의 Module
- View 를 그리는 목적 : Stakeholder 의 concern 때문에 View 를 그린다.
개발 초기에 개념적인 logical view 를 그린다면 logical 한 system view

Layered Style View : Module View
Pipe-and-Filter Style View : Component & connector view
Booting Time
Performance view : Component & Connector view (Flow 를 설명하는 것)
Data Format Modifiability view : Module View (설명의 내용이 개발과 관련)
등장하는 Element 가 뭐냐에 따라서 View 를 그림
Module 은 Module 간 개발 측면에서 그릴 때
Component 는 flow 를 그리는 것이 좋고
섞어서 그리는 것은 좋지 않다.
** 단, Flow를 설명하는 것은 Sequence diagram, activity diagram 이 더 좋음
Major View Types

- Component&Connector View : Client 와 Server 간 연결 상태, 시행하면서 동작과 관련 된 그림
- Deployement View : Client 와 Server 의 배치
- Module View : Client 와 Server 를 사용하는 것을 Common Module 로 구성, 의존성에 따라 Layered Style 로 변경
- Work Assignment View : 각각 Module 을 누가 담당할지 표현, 조직도와 관련있음.
- 조직 구성으로 보면 Server 밑에 Common을 두고 Common이 변경됐을 때 Client가 쫓아오도록 하는 것이 Communication overhead 를 줄일 수 있음.
- View 를 잘 그리고 표현할 수 있어야 함.
- Architect 는 그림을 그려서 잘 표현하는게 가장 중요.