SW Architecture란?
소프트웨어 아키텍처는 시스템에 대해 추론하기 위해 필요한 구조들의 집합으로, 이는 소프트웨어 요소들과 그들 간의 관계 및 각 요소와 관계의 속성을 포함한다.
1. Architectural View
Architectural View(아키텍처 뷰)는 시스템 아키텍처의 특정 관심사(concerns)에 집중하여 구조를 표현한 것
- 소프트웨어 아키텍처 문서는 여러 뷰의 집합으로 구성된다.
1.1 하나의 시스템에 여러 View가 필요한 이유
- 현대 시스템은 복잡성이 높아 전체 구조를 단일한 구조로 한 번에 이해하는 것이 어려움
- 서로 다른 이해관계자(Stakeholders)는 각자 시스템에 대한 다른 관심사를 가짐
→ 각 관심사, 중요도에 초점을 맞춰 구조를 표현함으로써 복잡한 소프트웨어 시스템을 다양한 관점에서 이해할 수 있도록 해야함
- 건물을 설계할 때 각 전문가가 자신이 관심 있는 부분에 초점을 맞추어 보는 것과 유사
e.g.,
- 구조적 관점(Structural View): 건축 구조 엔지니어(Structural Engineers)가 건물의 골격, 하중 등을 분석할 때 사용하는 뷰.
- 배관 관점(Plumbing View): 배관공(Plumbers)이 물 공급 및 배수 설비 등을 검토할 때 사용하는 뷰.a
- 전기적 관점(Electrical View): 전기 엔지니어(Electrical Engineers)가 배선, 전력 공급 및 전기 설비를 설계할 때 사용하는 뷰.
1.2 Architecture view Model
- 4+1 View Model
- SEI View Model → 앞으로 내가 사용할 Model
- Siemens View Model
2. SEI View Model
SEI(Software Engineering Institute) View Model은 소프트웨어 아키텍처를 다음의 세 가지 주요 관점(View)으로 나누어 설명함:
- Component-and-Connector (C&C) View
- Module View
- Allocation View
각 View는 시스템을 서로 다른 측면에서 설명하며, 함께 사용되어 전체 시스템의 구조와 특성을 포괄적으로 표현함.
2.1 Component-and-Connector (C&C) View
정의
- 런타임 시점의 시스템 구성 요소(component)와 이들 간의 상호작용(connector)을 설명함.
구성
- Component: runtime에 존재하는 주요 처리 단위 및 데이터 저장소
- 1개 이상의 Port(다른 컴포넌트와의 interaction을 위한 interface)를 가지고 있음 (Port name 필수, multiplicity까지 포함 가능)
- streotype (<<controller>>, <<server>> 등)을 통해 어떤 역할을 하는지 작성
- 예시: 프로세스, 스레드, 객체, 데이터 저장소, 주요 processing unit(logical 혹은 conceptual), 또는 데이터 저장소
- Connector: 구성 요소 간의 통신 및 상호작용
- interaction을 명확하게 인지할 수 있도록 작성
- 마찬가지로 name, role(== component의 port와 동일, multiplicity를 가짐), stereotype 가질 수 있음
- 복잡한 connector는 여러개의 component와 connector의 집합으로 만들어질 수 있음

- UML Connector는 그냥 simple line임
- UML Connector에서도 조금 복잡해지면, Component처럼 표현해야 함
- call-return connector는 assembly connector(rollypop 형식)으로 작성
- Tagged values(simple line에 메모 달기)를 통해 connector에 부가 설명 가능
- Attachment: 컴포넌트 포트는 커넥터의 역할(role)과 연결됨

- Delegation: 컴포넌트 포트는 내부 서브 아키텍처의 포트와 연결될 수 있음

목적
- 시스템이 실행 시 어떻게 동작하는지 시각적으로 표현
- 런타임 품질 속성 분석에 활용됨:
e.g.,
- Performance: 각 프로세스의 cycle time 분석
- Reliability: 개별 구성 요소의 신뢰도 기반 전체 신뢰도 추정
- Availability: 상호작용 경로의 장애 대응성 분석
주의사항
- 컴포넌트 타입과 컴포넌트 인스턴스(:)를 하나의 다이어그램에서 섞어 쓰지 말아야 함
- 포트의 이름은 왠만하면 작성해야 함 (외부 component의 입장에서 어떤 component인지 적어주면 됨)
즉, Client Teller와 Main: Account Server이 같은 다이어그램 안에 혼재되면 안 되고, 분리된 다이어그램으로 그려야 함
- lollypop interface 및 port multiplicity를 component instance에는 적지 마라
예시

- 보통 C&C Type + Runtime Configuration으로 이루어지기도 함


2.2 Module View
정의
- 시스템의 정적 구조를 코드 단위인 모듈로 나누고, 모듈 간의 관계를 설명함.
- 모듈: 명확한 책임을 가진 구현 단위
- 예시: 클래스, 함수, 레이어, 라이브러리 등
- 모듈 관계: 포함, 호출, 의존성 등
구성
목적
- 구현 단계(Construction): 소스 코드 설계의 청사진(blueprint)으로 사용
- 분석(Analysis): 요구사항 추적성과 영향도 분석에 사용
- 커뮤니케이션(Communication): 시스템 구조를 잘 모르는 사람에게 Top-down 구조로 시스템 설명 가능
- 모듈 뷰는 런타임 동작 및 품질 속성 분석용이 아님
- (e.g., Performance, reliability)
- 모듈 뷰에서의 하나의 모듈들은 C&C 뷰에서 많은 요소와 매핑될 수 있음
- 반대로, C&C 뷰에서 하나의 요소는 모듈 뷰에서 많은 모듈에 매핑될 수 있음
스타일
- Decomposition Style

- 복잡한 시스템을 한눈에 파악하기 위한 스타일
- is-part-of relation에 초점을 맞춤
- 표현 방법
- UML: Package construct(박스 안에 박스)
- Indentation
- 나누는 기준
- Achievement of certain quality attributes
- Build-versus-buy decisions
- Product line implementation: 동일 회사 제품군으로 묶기
- Team allocation
- 패키지: 의미있는 요소들 모아둔 것
- 서브시스템(우측 상단에 fork symbol 존재): 독립적으로 실행 및 배포 가능한 시스템들의 집합
-
Uses Style

- depends-on relation에 초점을 맞춤
- "특정 모듈이 work하기 위해서 어떤 모듈이 존재해야하는가?"
- Incremental development를 위한 planning 하는데에 사용됨
- 변경 파급효과 측정 가능
- 표현 방법
- UML: <> stereotype 사용
- Matrix, Two column table
- Generalization Style

- abstract module을 사용한 class inheritance, interface inheritance, interface realization
- 표현 방법
- Layered Style

- 가장 많이 사용
- Layer: 밀접하게 관련된 서비스들의 논리적 묶음
- 상위 layer만 하위 layer에 접근 가능 (이 순서가 꼭 지켜져야 함)
- layer 정보는 소스 코드로부터 절대 도출될 수 없음
- layer끼리 영향 x --> modifiability, portability, reusability ↑
- Decomposition Style과 일치하지 않을 수 있음
- 표현 방법

- Data Model Style

- Data entity와 그들간의 관계에 초점을 두어서 표시
- Relations
- one-to-one, one-to-many, many-to-many
- Generalization/Specialization
- Aggregation
- 데이터 구조 표현
- 데이터 모델의 영향 분석
- 표현 방법
- UML: Multiplicity로 표현

2.3 Allocation View
정의
- 소프트웨어 요소(Module or C&C View)와 환경 요소(하드웨어, 파일시스템, 조직 등) 간의 매핑을 설명함.
스타일
-
Deployment Style
- 컴포넌트 및 커넥터를 실제 하드웨어 환경(디스크, 노드, 네트워크 등)에 매핑
- Software element가 요구하는 속성들을 고려하여 Environment element에 매핑
- UML: Deployment diagram: Artifact(파일, 라이브러리, db, config 파일 등)가 node(devide 혹은 SW 실행 환경) 안에서 deploy되는 그림
- <<manifest>>: 구체화
- 노드 간에는 physical link나 protocol 작성
- 예: 웹 서버 프로세스를 특정 서버 노드에 배치
-
Installation Style
- 소프트웨어 구조를 파일 시스템에 매핑
- 예: 실행 파일, 설정 파일, 디렉토리 구조 구성
-
Work Assignment Style
- 소프트웨어 모듈을 담당 인력, 팀, 조직 단위에 매핑
- 예: A 팀은 UI 모듈, B 팀은 백엔드 모듈 담당
목적 (특히 Deployment Style 기준)
- Performance 분석
- 소프트웨어-하드웨어 매핑 변경을 통해 성능 조정 가능
- Reliability 분석
- 실패 가능성이 있는 처리 요소나 통신 채널 파악
- Security 분석
- 하드웨어 구성과 소프트웨어 배치에 따른 보안 영향 평가
- Cost Estimation
예시

No discussion of design alternatives with rationale
설계 대안들에 대한 합리적인 설명(이유 포함)이 없는 상태