소프트웨어 구축 요약 정리
1. 소프트웨어 생명 주기 (Software Development Life Cycle, SDLC)
주요 단계
요구사항 분석 → 시스템 설계 → 구현 → 테스트 → 유지/보수
폭포수 모델 (Waterfall)
- 고객의 명확한 요구사항 전제
- 각 단계가 완료되어야 다음 단계 진행 (문서화 중시)
- 반복 x / 고객 요구사항 변경 반영 어려움 x / 단계 병행 x
나선형 모델 (Spiral)
- 반복적 개발 모델 + 위험 분석 기능 추가
- 전체 과정 반복 / 점진적 개발
- 유지보수, 요구사항 반영에 유리
- 프로젝트 전체 기간, 비용 증가 우려
애자일 모델 (Agile)
- 반복적 개발 주기 (Sprint 또는 Iteration) 중심
- 고객 피드백 기반 / 문서화 최소화 / 팀 간 협업 중심
- Ex) XP(Extreme Programming), Scrum, Kanban 등
- 대표 프레임워크: LEAN, DSDM
설계 접근 방식
- 하향식 설계 (Top-down)
전체 → 하위 기능 분할 설계
전체 흐름 파악에 용이 / 초기 단계에 유용
- 상향식 설계 (Bottom-up)
부품/모듈 → 전체 통합
유지보수 편리 / 공통 모듈 효율화
익스트림 프로그래밍 (XP)
- 고객 중심 반복 개발, 테스트 주도 개발
- 5가지 가치: 의사소통, 단순성, 피드백, 용기, 존중
- 주요 실천 방법: Pair Programming / 지속적 통합 / TDD / 코드 공유 등
2. 개발 일정 산정
WBS (Work Breakdown Structure)
네트워크 차트
- PERT (Program Evaluation and Review Technique)
- 낙관/비관/기대치 기반의 일정 계획
- 불확실한 작업에 적합
- CPM (Critical Path Method)
- 프로젝트 작업 중 가장 오래 걸리는 경로 파악
- 작업 단위 간의 선후 관계를 표현
- 임계경로 = 프로젝트 전체 시간
- 예: A-B-E-G-H 경로가 14일 소요 → 임계 경로
간트 차트
- 각 작업의 시작/종료 일정을 막대(Bar)로 표현
- 작업 진척도 시각화에 유리
3. 요구사항 분석
요구사항 정의
- 고객의 문제 해결을 위해 필요한 조건 및 제약사항 도출
요구사항 유형
- 기능적 요구사항: 실제 시스템 수행 가능하고 필수 기능
- 비기능적 요구사항: 품질, 성능, 보안 등
Ex. 모든 페이지는 3초 이내에 사용자에게 보여야 한다.
요구사항 개발 프로세스
- 도출/수집: 인터뷰, 브레인스토밍 등
- 분석: 사용자 요구 검토 및 타당성 분석
- 명세: 요구사항을 체계적으로 문서화
- 확인/검증: 문서화된 요구사항의 정확성 검증
요구사항 분석 도구
- CASE (Computer Aided SW Engineering)
- SADT, SREM, PSL/PSA, HIPO, TAGS 등
4. 구조적 분석 모델
데이터 흐름도 (DFD, Data Flow Diagram)
- 프로세스 / 데이터 흐름 / 데이터 저장소 / 단말기 표현
- 단계별 상세화 (레벨 0, 레벨 1 등)
자료 사전 (DD, Data Dictionary)
5. 객체지향 분석 모델
| 모델 | 특징 |
|---|
| Booch | 전체 개발 프로세스 사용 |
| Jacobson | Use Case 중심 |
| Coad-Yourdon | ER 다이어그램 사용 |
| Wirfs-Brock | 책임 기반 설계 |
| Rumbaugh | 객체-관계-동작 3모델 사용 |
객체지향 용어 정리
- 정형 명세: 수학적, 정확한 표현
- 비정형 명세: 자연어 표현, 쉬우나 모호성 존재
6. 소프트웨어 설계 원리
- 분할 정복: 시스템을 작은 단위로 나눔
- 모듈화(Modularity): 독립적인 기능 단위
- 추상화(Abstraction): 세부 내용 감춤
- 정제(Refinement): 구체화 반복
- 정보 은닉: 모듈 내부 정보 감춤
7. 아키텍처 패턴
| 패턴 | 설명 |
|---|
| Layer | 계층화 설계 (예: OSI 7계층) |
| Client-Server | 클라이언트/서버로 역할 분리 |
| Pipe-Filter | 필터 단위로 처리 / 유닉스 Shell |
| MVC | Model-View-Controller 패턴 |
| Master-Slave | 주/종 관계 |
| Broker | 메시지 중계자 존재 |
| Peer-to-Peer | 동등한 관계 |
| Event-Bus | 이벤트 기반 분산 처리 |
| Blackboard | 공유 데이터 중심 |
| Interpreter | 인터프리터 기반 해석 구조 |
8. UML (Unified Modeling Language)
- Rumbaugh, Booch, Jacobson 방식 통합
- 고객/개발자 간 의사소통 및 모델링 표준 제공
구성 요소
-
사물(Things): 클래스, 인터페이스, 컴포넌트 등
-
관계(Relationship):
- 연관 (Association)
- 집합 (Aggregation)
- 포함 (Composition)
- 일반화 (Generalization)
- 의존 (Dependency)
- 실체화 (Realization)
-
다이어그램(Diagram)
구조 다이어그램
- 클래스(Class)
- 객체(Object)
- 컴포넌트(Component)
- 배포(Deployment)
- 복합 구조(Composite Structure)
- 패키지(Package)
행위, 동작 다이어그램
- 유스케이스(Use Case)
- 시퀀스(Sequence)
- 커뮤니케이션(Communication)
- 상태(State)
- 활동(Activity)
- 타이밍(Timing)
- 상호작용 개요
9. UI 설계 (User Interface)
설계 기준
UI 설계 도구
| 도구 | 설명 |
|---|
| Wireframe | 기획 초기 레이아웃 설계 |
| Storyboard | 화면 흐름 및 시나리오 구성 |
| Prototype | 실제와 유사한 동작 구현 |
| Mockup | 시각적 디자인 표현 |
| Use Case | 사용자 요구 기반 기능 흐름 도식화 |