
최근에 기술면접을 보았는데, 방법론과 생명주기를 혼동하는 것 같다는 피드백을 받아 개념 정리를 위해 기술합니다.
소프트웨어 생명주기는 소프트웨어가 탄생하고 사용되며 사라지기까지의 전 과정을 체계적으로 정의한 것이다.
요구사항 분석 -> 설계 -> 구현 -> 테스트 -> 배포 및 유지보수
| 모델 이름 | 특징 요약 | 적합한 상황 |
|---|---|---|
| 폭포수 모델 (Waterfall Model) | 각 단계를 순차적으로 진행. 뒤로 돌아가지 않음. | 요구사항이 명확하고 변경이 적은 프로젝트 |
| V 모델 (V-Model, 검증 및 확인 모델) | 폭포수 모델 + 각 단계에 대응하는 테스트 단계 포함 | 신뢰성과 안정성이 중요한 시스템 (예: 의료, 항공) |
| 프로토타입 모델 (Prototype Model) | 빠르게 프로토타입을 만들고 피드백 받아 개선 | 사용자 요구를 정확히 파악하기 어려운 경우 |
| 나선형 모델 (Spiral Model) | 반복과 점진적 개발 + 위험 관리 강조 | 대규모, 고위험, 복잡한 프로젝트 |
| 반복적 모델 (Iterative Model) | 기본 구조를 반복적으로 확장하며 개발 | 요구사항이 유동적인 프로젝트 |
| 애자일 모델 (Agile Model) | 빠른 반복, 사용자 피드백, 변화에 유연 | 소규모 팀, 빠르게 변화하는 환경 |
"생명주기"는 소프트웨어가 거치는 전체 과정이고 그 과정을 '어떻게' 밟을지에 따라 다양한 생명주기 모델(=개발 방법)이 있다.
(요구 분석 → 설계 → 구현 → 테스트 → 유지보수)
(폭포수 모델, 애자일 모델, 나선형 모델 등)
(예: 애자일 모델 안의 스크럼, XP)