[ 정처기 실기 ] 요구사항 확인 #2 / 현행 시스템 분석
1. 소프트웨어 아키텍처
- 여러 가지 소프트웨어 구성요소와 그 구성요소가 가진 특성 중에서 외부에 드러나는 특성, 그리고 구성요소 간의 관계를 표현하는 시스템의 구조나 구조체
2. 소프트웨어 아키텍처 4+1 뷰
- 고객의 요구사항을 정리해둔 시나리오를 4개의 관점에서 바라보는 소프트웨어적 접근 방법
[4+1 뷰]
1) 유스케이스 뷰 (Usecase View)
- 유스케이스 또는 아키텍처를 도출하고 설계하며 다른 뷰를 검증하는데 사용되는 뷰 / 사용자, 설계자, 개발자, 테스트 관점
2) 논리 뷰 (Logical View)
- 시스템의 기능적 요구사항이 어떻게 제공되는지 설명 / 설계자, 개발자 관점
3) 프로세스 뷰 (Process View)
- 시스템의 비기능적인 속성으로서 자원의 효율, 병행 실행, 비동기, 이벤트 처리 등을 표현 / 개발자, 시스템 통합자 관점
4) 구현 뷰 (Implementation View)
- 정적인 소프트웨어 모듈의 구성을 보여주는 뷰
5) 배포 뷰 (Deployment View)
- 컴포넌트가 물리적인 아키텍처에 어떻게 배치된 느지 매핑해서 보여주는 뷰
3. 소프트웨어 아키텍처 패턴 (Software Architecture Pattern)
- 소프트웨어를 설계할 때 참조할 수 있는 전형적인 해결 방식
[종류]
1) 계층화 패턴 (Layered Pattern)
- 시스템을 계층으로 구분하여 구성하는 패턴
2) 클라이언트 - 서버 패턴 (Client - Server Pattern)
- 하나의 서버와 다수의 클라이언트로 구성된 패턴
3) 파이프 - 필터 패턴 (Pipe-Filter Pattern)
- 데이터 스트림을 생성하고 처리하는 시스템에서 사용 가능한 페턴
4) 브로커 패턴 (Broker Pattern)
- 분리된 컴포넌트들로 이루어진 분산 시스템에서 사용 / 원격 서비스 실행을 통해 상호작용이 가능한 패턴
5) 모델-뷰-컨트롤러(MVC Pattern)
- 대화형 애플리케이션을 모델, 뷰, 컨트롤러 3개의 서브 시스템으로 구조화하는 패턴
4. 소프트웨어 아키텍처 비용 평가 모델
- 품질 속성에 미치는 영향을 판단하고 아키텍처의 적합성 평가
[종류]
1) SAMM(Software Architecture Analysis Method)
- 변경 용이성과 기능성에 집중, 평가가 용이
2) ATAM (Architecture Trade-off Analysis Method)
- 아키텍처 품실 속성을 만족시키는지 판단 / 품질 속성들의 이해 상충관계까지 평가
3) CBAM (Cost Benefit Analysis Method)
- ATRM 바탕의 시스템 아키택처 분석 중심 / 경제적 의사결정
4) ADR (Active Design Review)
- 구성요소간 응집도
5) ARID (Active Reviews for Intermediate Designs)
- 특정 부분에 대한 품질요소에 집중
5. 디자인 패턴 유형
디자인 패턴
- 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 사용하는 설계 방법을 정리한 패턴
[목적에 따른 디자인 패턴 유형]
1) 생성
[종류]
(1) Builder
- 복잡한 인스턴스를 조립하여 만드는 구조 / 객체 생성 방법과 객체 구현 방법 분리 / 생성과 표기를 분리하여 복잡한 객체를 생성
(2) Prototype
- 기존 객체를 복제함으로써 객체를 생성
(3) Factory Method
- 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고 하위 클래스에서 인스턴스를 생성 / 생성할 객체의 클래스를 국한하지 않고 객체를 생성 / 오버 로딩
(4) Abstract Factory
- 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴 / 동일한 주제의 다른 팩토리를 묶음
(5) Singleton
- 한 클래스에 한 객체만 존재하도록 제한
2) 구조
[종류]
(1) Bridge
- 기능 클래스와 구현 클래스 연결 / 구현부에서 추상 계층을 분리 / 구현뿐만 아니라 추상화된 부분까지 변경해야 하는 경우 활용
(2) Decorator
- 구현되어있는 클래스에 필요 기능을 추가해 나가는 설계 패턴 / 객체의 결합을 통해 기능을 동적으로 유연하게 확장
(3) Facade
- 사용자와 시스템 간 또는 여타 시스템과의 결합도 낮추어 시스템 구조에 대한 파악을 쉽게 하는 패턴 / 통합된 인터페이스 제공
(4) Flyweight
- 클래스의 경량화를 목적으로 함 / 여러 개의 가상 인스턴스 제공하여 메모리 절감
(5) Proxy
- '실체 객체에 대한 대리 객체' / 특정 객체로의 접근을 제어하기 위한 용도로 사용
(6) Composite
- 객체들의 관계를 트리구조로 구성 / 복합 객체와 단일 객체를 동일하게 취급
(7) Adapter
- 기존 클래스를 재사용할 수 있도록 중간에 맞춰주는 역할을 하는 인터페이스를 만드는 패턴
3) 행위
[종류]
(1) Mediator
- 중재자를 두고 중재자에게 모든 것을 요구하여 통신의 빈도수를 줄여 객체 지향의 목표를 달성하게 해주는 디자인 패턴 / 상호작용의 유연한 변경을 지원
(2) Interpreter
- 언어의 다양한 해석, 구체적으로 구문을 나누고 분리된 구문의 해석을 맡는 클래스를 각각 작성하여 여러 형태의 언어 구문을 해석할 수 있게 만드는 디자인 패턴 / 문법 자체를 캡슐화하여 사용
(3) Iterator
- 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 방법을 제공하는 디자인 패턴 / 내부 구조를 노출하지 않고 복잡한 객체의 원소를 순차적으로 접근 가능하게 해주는 행위 패턴
(4) Template Method
- 상위 작업의 구조를 바꾸지 않으면서 서브 클래스로 작업의 일부분을 수행 / 기능의 골격 제공 / 코드 양 줄이고 유지보수 용이
(5) Observer
- 객체의 상태 변화에 따라 다른 객체의 상태도 연동, 일대다 의존
(6) State
- 객체의 상태에 따라 행위 내용을 변경
(7) Visitor
- 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패턴 / 특정 구조를 이루는 복합 객체의 원소 특성에 따라 동작을 수행할 수 있도록 지원하는 행위
(8) Command
- 요구사항을 객체로 캡슐화
(9) Strategy
- 행위 객체를 클래스로 캡슐화해 동적으로 행위를 자유롭게 변환 / 서로 교환해서 사용
(10) Memento
- 객체의 정보를 저장할 필요가 있을 때 적용하는 디자인 패턴 / undo 기능 개발할 때 사용
(11) Chain of Responsibility
- 한 요청을 2개 이상의 객체에서 처리
6. OSI 7 계층
- 네트워크 통신에서 생긴 여러 가지 충돌 문제를 완화하기 위해 국제 표준화 기구에서 제시한 네트워크 기본 모델
[종류]
(7) 응용 계층 - Application Layer
- 사용자와 네트워크 간 응용서비스 연결, 데이터 생성 / HTTP, FTP / 데이터(Data)
(6) 표현 계층 - Presentation Layer
- 데이터 형식 설정과 부호 교환, 암/복호화 / JPEG, MPEG / 데이터(Data)
(5) 세선 계층 - Session Layer
- 연결 접속 및 동기제어 / SSH, TLS / 데이터(Data)
(4) 전송 계층 - Transport Layer
- 신뢰성 있는 통신 보장, 데이터 분할과 재조립, 흐름 제어, 오류 제어, 혼잡 제어 등을 담당 / TCP, UDP / 세그먼트(Segment)
(3) 네트워크 계층 - Network Layer
- 단말 간 데이터 전송을 위한 최적화된 경로 제공 / IP, ICMP / 패킷(Packet)
(2) 데이터 링크 계층 - Data Link Layer
- 인접 시스템 간 데이터 전송, 전송 오류 제어, 동기화 흐름 제어 등의 전송 기능 제공 , 오류 검출 , 재전송 등 기능 제공 / 이더넷 / 프레임(Frame)
(1) 물리 계층 - Physical Layer
- 0과 1 비트 정보를 회선에 보내기 위한 전기적 신호 변환 / RS-232C / 비트 (bit)