📍1. 요구사항 확인
기능적 요구
- 시스템의 처리량, 반응 시간 등의 성능, 품질 (예-모든 화면이 3초 이내에 유저에게 보여야 한다)
- 시스템 구축과 관련된 안전, 보안
애자일(Agile) 에서 우선시 하는 것
- 개인과의 상호작용 (vs 공정, 도구)
- 실제 동작하는 소프트웨어(소스코드) (vs 문서)
- 고객과의 협력 (vs 계약)
- 변화에 빠르게 대응 (vs 계획대로 이행)
- 상식적인 원리와 경험을 최대한 끌어올림
- 비구조적
애자일 방법론 종류
1. XP(eXtreme Programming)
5가지 핵심가치
- 의사소통
- 피드백
- 존중
- 용기
- 단순성
12가지 실천방법
2. 스크럼
- 스프린트 단위: 짧은 기간(30일) 내에 동작 가능한 소프트웨어 나와야 함
- 15분 내외의 짧은 회의
3. FDD
4. 크리스탈
5. Lean
소프트웨어 개발에 이용되는 모델(Model - 그림)
- 개발 대상을 추상화하고 기호나 그림으로 시각적 표현
- 향후 개발될 시스템 유추 가능
UML
- 표준화된 모델링 언어
- 객체 지향 시스템 개발시 사용
- 산출물을
1. 명세화
2. 시각화: 클래스 다이어그램
3. 문서화
UML 종류
정적 (구조적) 다이어그램
- 클래스 다이어그램: 클래스의 속성, 메서드
- 컴포넌트 다이어그램: 컴포넌트간의 관계
- 객체 다이어그램: 인스턴스
- 컴포지트 구조 다이어그램: 아키텍쳐
- 배치 다이어그램: 컴포넌트들의 물리적 구성
- 패키지 다이어그램: 관련있는 모델링 요소들을 그룹화
예) 회원 -> 취미 객체, 등등을 묶기
동적 (행위) 다이어그램
- 활동 다이어그램: 활동의 흐름
- 유즈케이스 다이어그램: 사용자 관점에서 바라본 시스템 표현
사용자 측면에서의 요구사항, 사용자가 원하는 목표를 달성하기 위해~
1. 구성 요소간의 관계
- 연관 관계: 유즈 케이스와 액터 사이에 상호작용을 실선으로 표시
- 포함 관계: 하나의 유즈 케이스가 실행될 때 포함 관계에 있는 유즈 케이스는 반드시 실행되어야 한다
- 확장 관계: 유즈 케이스가 실행될 때 포함 관계에 있는 유즈 케이스가 특정 상황에서만 실행되어야 한
- 일반화 관계: 부모 유즈 케이스와 자식 유즈 케이스들 간의 상속 관계
2. 구성 요소
- 시스템: 개발하고자 하는 소프트웨어
- 액터: 시스템 외부에서 시스템과 상호작용하는 객체(사람, 회사, 외부 시스템)
- 유즈 케이스: 일련의 작업을 수행하기 위한 행위
- 관계: 2개의 액터 또는 유즈케이스들이 서로 상호작용함을 나타냄
- 시퀀스(순차) 다이어그램: 시간에 흐름에 따른 메시지 교환
1. 시간 개념을 중심으로 모델링
2. 다이어그램 수직 방향이 시간의 흐름 나타냄
3. 회귀 메시지, 제어블록 등으로 구성됨
- 커뮤니케이션 다이어그램: 객체들이 주고받는 메시지 표현
- 인터랙션 오버뷰 다이어그램: 활동 다이어그램 + 시퀀스 다이어그램
- 타이밍 다이어그램: 시간의 흐름에 따른 상태 변화를 표현
📍2. 화면 설계
와이어프레임(Wireframe)
- 페이지에 대한 개략적인 레이아웃이나 UI 요소 등에 대한 뼈대를 설계하는 단계에서 사용
목업(Mockup)
- 와이어프레임보다 좀 더 실제 화면과 유사하게 만든 정적인 형태의 모형
스토리보드(Story Board)
- 와이어프레임에 콘텐츠에 대한 설명, 페이지간 이동 흐름 등을 추가한 문서
프로토타입(Prototype)
- 실제 구현된 것처럼 테스트가 가능한 동작 가능한 형태의 모형
유즈케이스(Use Case)
- 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술
UI 설계 원칙
- 직관성: 누구나 쉽게 이해하고 사용할 수 있어야 함
- 유효성: 사용자의 목적을 정확하게 달성해야 함
- 학습성: 누구나 쉽게 배우고 익힐 수 있어야 함
- 유연성: 사용자의 요구사항을 최대한 수용하며, 오류를 최소화
UI 설계 지침
- 치명적인 오류에 대한 부정적인 사항을 사용자가 인지할 수 있게 해야 함
GUI
CLI/CUI(Character User Interface)
NUI(Natural User Interface)
- 멀티 터치, 동작 인식 등 사용자의 자연스러운 움직임을 인식하여 서로 주고받는 정보를 제공
📍3. 애플리케이션 설계
객체지향 특징
- 캡슐화(Encapsulation): 속성과 관련된 연산을 클래스 안에 묶어서 하나로 취급
- 정보은닉(Information Hiding)
- 상속(Inheritance)
- 다형성(Polymorphism): 여러 가지 형태를 가지고 있음 -> 여러 형태를 받아들일 수 있음
현재 코드를 변경하지 않고 새로운 클래스를 쉽게 추가할 수 있게 함
1. 오버로딩: 예) 함수 이름은 같은데 매개변수(타입 등)를 다르게
2. 오버라이딩: 예) 함수를 상속받아 수정
- 추상화(Abstraction)
- 동적 바인딩(Dynamic Binding) -> Python
객체 특징
- 상태, 동작, 고유 식별자를 가진 모든 것
- 필요한 자료구조와 이에 수행되는 함수들을 가진 하나의 독립된 존재
- 객체의 상태는 속성값(멤버 변수, 메서)에 의해 정의됨
SOLID (객체지향 설계)
- Single responsibility principle: 단일 책임 원칙
- Open closed principle: 개방-폐쇄 원칙
- Liskov substitution principle: 리스코프 치환 원칙
- Interface segregation principle: 인터페이스 분리 원칙
- Dependency inversion principle: 의존관계 역전 원칙
클래스: 하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현하는 데이터 추상화
클래스 설계 원칙
- 단일 책임원칙: 하나의 역할만 수행
- 개방-폐쇄의 원칙: 클래스는 확장에는 열려있어야 하며, 변경에 대해서는 닫혀있어야 한다
- 리스코프 교체(치환)의 원칙: 자식 클래스는 언제든 부모 클래스를 대체할 수 있어야 한다
- 인터페이스 분리 원칙
- 의존관계 역전의 원칙: 자주 바뀌는 클래스에 의존을 가지면 안됨
객체지향 분석기법
1. Rumbaugh Method: 3개의 모형 생성
- 객체 모델링: 객체 다이어그램
- 동적 모델링: 상태 다이어그램
- 기능 모델링: 자료 흐름도(DFD)
2. Booch 방법
- 미시적, 거시적 개발 프로세스 모두 사용
3. Jacobson
- Use Case 사용
4. Coad와 Yourdon
- ERD 사용
5. Wirfs-Brock
- 분석과 설계간 구분 없음
하향식 설계 vs 상향식 설계
하향식 설계: 구조적
- 설계 초기 단계에서도 레벨이 낮은 데이터 구조 세부사항 필요
상향식 설계: 객체지향
- 우선 인터페이스가 만들어져 있지 않으면 기능 추가 불가능
DFD (Data Flow Diagram)
- 프로세스: 자료의 처리/변환 과정을 표현
- 자료 흐름
- 자료 저장소(Data Store): 파일, 데이터베이스 등 저장소의 위치 표현
- 단말(Terminator): 자료의 출처와 도착지 표현
디자인 패턴: 소프트웨어 설계에서 자주 발생하는 문제에 대한 일반적이고 반복적인 해결 방법
디자인 패턴의 구성
- 패턴이름 및 유형
- 문제 및 배경
- 해결 방안
- 사례
- 결과
- 샘플코드
GoF(Gangs of Four) 디자인 패턴
생성 패턴
- 추상 팩토리
- 팩토리 메서드
- 싱글턴
- 빌더
- 프로토타입
구조 패턴
- 컴퍼지트
- 어댑터
- 브릿지
- 데코레이터
- 퍼사드
- 플라이 웨이트
- 프록시
행위 패턴
- 템플릿 메서드
- 인터프리터
- 이터레이터
- 커맨드
- 체인 오브 리스펀서빌리티
- 스테이트
- 스트레티지(전략): 알고리즘
- 메디에이터(중재자)
- 메멘토
- 비지터
- 옵저버
📍4. 인터페이스 설계
인터페이스 특징
- 소프트웨어에 의해 간접적으로 제어되는 장치와 소프트웨어를 실행하는 하드웨어
- 기존의 소프트웨어와 새로운 소프트웨어를 연결하는 소프트웨어
- 순서적 연산에 의해 소프트웨어를 실행하는 절차
EAI 구축 유형
- Point to Point
- Hub and Spoke
- Message Bus
- Hybrid
아키텍처 설계과정
1. 설계 목표 설정
2. 시스템 타입 결정
3. 스타일 적용 및 커스터마이즈
4. 서브시스템 기능, 인터페이스 동작 작성
5. 아키텍처 설계 검토
아키텍처 패턴 종류
1. 계층화 패턴 (Layered)
2. 클라이언트-서버 패턴
3. 마스터-슬레이브 패턴
4. 파이프-필터 패턴
5. 브로커 패턴
6. Peer to Peer 패턴
7. Event Bus 패턴
8. MVC 패
FEP(Front End Processor)
입력 데이터를 컴퓨터 프로세서가 처리하기 전에 미리 처리하여 컴퓨터 프로세서의 처리 시간을 줄여주는 프로그램 또는 하드웨어
--- 분류
메시지 지향 미들웨어(Message-Oriented Middleware, MOM)
- 느리고 안정적인 응답이 필요한 업무에 적합
- 독립적인 애플리케이션을 하나의 통합된 시스템으로 묶음
- 송신측과 수신측의 연결 시 메시지 큐 활용
- 상이한 애플리케이션 간 통신을 비동기 방식으로 지원
미들웨어
- 여러 운영체제에서 응용 프로그램들 사이에 위치한 소프트웨어
- 소프트웨어 컴포넌트를 연결하기 위해 준비된 인프라 구조 제공
- 여러 컴포넌트를 1대1, 1대다, 다대다 등 형태로 연결 가능
- 서비스 이용을 위해 유저가 내부 동작을 쉽게 확인할 필요는 없
미들웨어의 종류
- RPC: 원격 프로시저 호출
- MOM: 메시지 지향 미들웨어
- ORB: 다른 시스템의 프로그램을 네트워크를 통해 호출할 수 있는 미들웨어
- DB 접속 미들웨어: JDBC, ODBC
- TP 모니터
- WAS
- ESB
컴포넌트
- 독립적으로 존재
- 재사용성
- 인터페이스를 통해서만 접근
MVC: UI 계층의 응집도를 높일 수 있고, 여러개의 다른 UI를 만들어 그 사이의 결합도를 낮출 수 있다