아키텍쳐 설계
목차
•
소프트웨어 아키텍쳐란?
•
아키텍쳐의 표현법
•
아키텍쳐 유형
분석에서 설계로
분석 단계에서 모은 요구를 반영하여, 미래 시스템을 위한 설계 도면 작성
•
분석 : 비즈니스 요구가 무엇인지
•
설계 : 구현이 가능하도록 시스템 도면 생성
아키텍쳐 설계
분석단계에서 찾아낸 클래스와 메소드 교통정리
패키지 서브 시스템의 구성 & 인터페이스 결정
•
건축 설계에 비유
•
아키텍쳐 스타일
◦
구조 유형
•
아키텍쳐가 중요한 이유
◦
일단 시스템이 개발되고나면, 잘못된 구조를 바로잡기가 어려움
•
범위
◦
시스템 분할, 전체 제어 흐름, 오류처리방침, 서브시스템 간 통신 프로토콜 etc…
설계 용어
모듈
집합 식별자가 있는 경계가 있는 요소
프로그래밍 언어 수준에 따라 정의된 컴포넌트
서브 시스템
대규모 시스템의 일부분으로 규정된 인터페이스를 가짐
컴포넌트
분명한 역할을 가지고 있는 하드웨어 or 소프트웨어 조각(plug-in)
프레임워크
완성되지 않은 뼈대
설계 수준
표현하고자 하는 내용이 다 표현되었는가?
다른 다이어그램에도 동일하게 표현되었는가?
아키텍쳐 스타일
주요 스타일
아래 스타일들의 구조가 무엇이며, 장단점이 무엇이며, 어떻게 적용할 것인가?
클라이언트 서버형 계층형 이벤트 기반 아키텍쳐 MVC 파이프 필터 데이터 중심 아키텍쳐(Repository)
Peer-to-Peer 스타일
중앙 저장소 형(Repository)
응집도가 높고, 결합하기 좋다
중앙저장소에 문제가 있지 않는 한, 서브시스템에 문제가 있어도 해결 가능
(그러나, 중앙저장소는 매우 안전하게 설계. 뚫리는 경우는 99% 내부자의 침입이다)
서브시스템들이 단일 중앙 저장소의 자료를 접근하고 변경
서브시스템들은 독립적이고, 중앙 자료 저장소를 이용하여 상호 대화
EX) 급여 시스템, 은행 시스템
데이터 중심 아키텍쳐
중앙저장소 형태와 매우 유사
클라이언트 서버형
통신기기만 잘 가지고 있으면, 서버의 무한한 성능을 활용할 수 있다
(학부생 수준에서, 소켓을 가지고, 챌린지 해보기 가장 좋은 아키텍쳐 스타일)
서버
강력한 성능으로 자원을 관리하며, 클라이언트가 요청하는 기능이나 자원을 제공
(DB와 연동하여 쿼리 날리며 사용)
클라이언트
자원 사용을 위해 서버를 접속
장점
데이터 집중화, 보안(클라이언트에 비해… 서버 보안이 강하다고 하긴 뭐하다)
단점
병목, 비용, 비강인성
계층형
특징
1. 소프트웨어의 기능을, 수직으로 상호작용하는 여러 층으로 분할
2. 각 층 사이는 메세지를 교환
장점
추상화, 캡슐화, 응집성 높음, 재사용성 높음
단점
이웃 층과의 커뮤니케이션이 제한적, 오버헤드가 높음
MVC
사용자 인터페이스로부터, 비즈니스 로직과 데이터를 분리
Controller
모델에 명령을 보냄 → 모델의 상태를 변경
Model
데이터의 상태가 변화할때, 컨트롤러와 뷰에 이를 통보
View
사용자가 볼 결과물을 생성하기 위해, 모델로부터 정보를 얻어옴
파이프 필터
특징
1. 필터 사이에 데이터를 이동시키며 단계적으로 처리
2. 데이터 변환을 수행하는 필터 구성 요소로 구성
장점
단순성, 재사용성, 병렬성
단점
자원 낭비
Heuristic 설계
설계에는 정답이 없다!!
Heuristic(경험적, 직관적)을 적용하면, 좋은 설게를 얻을 수 있다.
Code Complete에 있는 9가지 Heuristic
1. 객체를 식별하라
2. 일관적인 추상을 적용하라
3. 구현에서 결정할 상세내용은 캡슐화해라
4. 상속보다 합성을 사용하라
5. 정보를 감춰라
6. 느슨한 결합, 강한 응집을 유지하라
7. 변경될 것 같은 부분을 식별하라
8. 디자인 패턴을 사용하라
9. 테스트하기 좋게 만들어라

