💡아키텍처 (Architecture)
아키텍처는 소프트웨어의 뼈대를 만드는 과정으로, 요구분석명세서의 기능을 제한조건에 따라 설계하는 것을 의미한다.
⚬ 컴포넌트 (Component)
컴포넌트는 역할을 가지고 있고 독립적으로 존재할 수 있는 시스템의 한 부분이다.
⚬ 아키텍처의 특징
소프트웨어의 추상화된 전체 구조를 제공하며, 소프트웨어의 구성요소(서브시스템, 컴포넌트) 등을 다룬다. 또한 세부 내용보다 중요 기능을 다루며, 비기능적 요구사항을 반영하고, 제한조건을 정의한다.
1. 시스템 아키텍처: 인프라의 물리적인 구조
2. 소프트웨어 아키텍처: 서버 중심으로 작동하는 소프트웨어의 논리 구조
⚬ 소프트웨어 설계를 위한 작업 분류
1. 소프트웨어 아키텍처 설계
2. 인터페이스 설계
3. 자료저장소 설계
4. 모듈 설계
5. 사용자 인터페이스(UI) 설계
⚬ 인증, 인가, 과금
1. 인증은 사용자의 신원 또는 메시지의 근원을 확인하는 것으로, ID, PW, 공인인증서가 이에 해당한다.
2. 인가는 사람에게 적절한 권한을 부여해 접근, 허가를 결정하는 것으로, 기밀문서의 등급(1급, 2급..)을 부여하는 것이 이에 해당한다.
3. 과금은 리소스 사용 정보를 수집하고 관리하는 것을 의미하며, 이를 통합 관리하는 보안규격을 AAA라고 한다.
💡아키텍처 4+1 관점
고객의 요구사항을 정리한 시나리오를 다음의 4가지 관점에서 검토하는 접근 방법을 의미한다. 이중 시나리오 관점은 문제 영역에 해당하며, 논리 관점, 프로세스 관점, 개발 관점, 물리적 관점은 해법 영역에 해당한다.
⚬ 시나리오 관점 (Scenario view, Usecase view)
최종사용자가 인식하는 시스템 기능을 의미하며, 아키텍처 또는 유스케이스를 설계하여 다른 4개 관점의 분석 및 설계의 전 과정에서 사용해 다이어그램을 구체화한다.
⚬ 논리 관점 (Logical view, Design view)
분석가, 설계자 관점에서 시스템의 내부를 들여다보며, 기능적 요구사항(클래스, 컴포넌트 등)의 종류 및 관계를 설명하는 관점이다.
⚬ 개발 관점 (Development view, Implementation view)
프로그래머 관점에서 서브시스템(비기능 속성, 이벤트 처리 등)의 모듈 구조 및 관계를 설명하는 관점이다.
⚬ 프로세스 관점 (Process view)
개발자와 시스템 통합자의 관점에서 개발 구동 환경을 검토하고, 소프트웨어 모듈의 성능, 구성을 설명하는 관점이다.
⚬ 물리 관점 (Physical view, Deployment view)
시스템 엔지니어의 관점에서 물리적인 아키텍처에 시스템이 어떻게 배치되어있는가를 설명하는 관점이다.
💡아키텍처 스타일
아키텍처 스타일은 아키텍처 설계과정에서 반복적으로 나타나는 문제를 해결하고, 시스템 품질 속성을 달성하는 방법을 정리한 것이다.
⚬ 데이터 중심 스타일 (Repository architecture)
데이터가 리포지토리(Repository)에서 중앙관리되며, 리포리토지 및 이에 접근하는 서브시스템으로 구성한다. 중앙 자료저장소를 이용하는 데이터베이스가 이에 해당한다.
⚬ 클라이언트 – 서버 스타일 (Client / Server)
분산 시스템 형태의 서버, 서비스, 클라이언트로 분할 구성되어 있으며, 서버와 클라이언트가 네트워크를 통해 상호작용한다.
1. 서버 특성
2. 클라이언트 특성
3. 씬 클라이언트 스타일: 모든 응용 처리 및 데이터 관리를 서버에서 수행하고, 클라이언트는 프레젠테이션만 구현한다.
4. 팻 클라이언트 스타일: 서버에서 데이터 관리만 관여하고, 애플리케이션 로직 및 프레젠테이션의 대부분을 클라이언트에서 구현한다.
⚬ 계층구조 스타일 (Layered)
가장 일반적인 방식으로, 서브시스템을 계층으로 묶어 관계를 표시하고 배치한다.
1. 프레젠테이션 계층: 사용자가 만나는 화면으로, front-end라고 한다.
2. 비즈니스 로직 계층: 기능요구사항을 구현하며, middleware라고 한다.
3. 데이터 계층: 데이터베이스에 접근해 데이터 처리 및 관리, 데이터 제공 기능을 수행하며, back-end라고 한다.
⚬ MVC 구조 스타일 (Model / View / Controller)
모델(Model), 관점(View), 제어(Controller)로 모듈을 기능별, 특성별로 모듈화하여 유지보수를 쉽게 하고 확장성 및 유연성을 높인다.
⚬ 데이터 흐름 스타일 (Pipes and Filters)
필터에 해당하는 서브시스템이 데이터를 입력받아 처리한 결과를 다음 서브시스템으로 넘겨주는 과정을 반복하며, 데이터를 변환하는 시스템에 주로 사용한다.
1. 파이프: 필터 간 통신 채널로, 한 소스에 데이터 스트림을 입력받아 다른 소스에 출력한다.
2. 필터: 필터를 거쳐 생성된 데이터 스트림 하나를 다른 필터의 입력에 연결한다.
+ 데이터 스트림: 한 번의 읽기/쓰기 동작으로 전송되는 정보
💡소프트웨어 품질 속성
⚬ 시스템 품질 속성
1. 가용성 (Availability)
2. 변경 용이성 (Modifiability)
3. 성능 (Performance)
4. 보안성 (Security)
5. 사용성 (Usability)
6. 테스트 용이성 (Testability)
⚬ 비즈니스 품질 속성
1. 시장 적시성 (Time to market)
2. 비용과 이익 (Cost and benefit)
3. 예상 시스템 수명 (Predicted lifetime of the system)
4. 목표 시장 (Targeted market)
5. 신규 발매(공개) 일정 (Rollout schedule)
6. 기존 시스템과의 통합 (Integration with legacy system)
+ 레거시 시스템 (Legacy system)
과거부터 현대까지 남아 사용되고 있거나 현대 기술에 영향을 주고 있는 낡은 기술, 방법론, 컴퓨터 시스템, 소프트웨어 등을 의미한다.
⚬ 아키텍처 품질 속성
1. 개념적 무결성 (Conceptual integrity)
2. 정확성과 완전성 (Correctness and Completeness)
3. 개발 용이성 (Buildability)