Waterfall이란?
Waterfall은 소프트웨어 개발을 순차적인 단계로 나누어 진행하는 개발 방법론이다.
폭포처럼 이전 단계에서 다음 단계로 흐른다는 의미에서 Waterfall이라고 부른다.
일반적인 흐름은 다음과 같다.
요구사항 분석 -> 설계 -> 구현 -> 테스트 -> 배포 -> 유지보수
핵심은 각 단계를 명확히 끝낸 뒤 다음 단계로 넘어가는 것이다. 따라서 초기에 요구사항을 충분히 정의하고, 그 요구사항을 기준으로 설계와 구현을 진행한다.
기본 단계
Waterfall은 보통 다음 단계로 구성된다.
| 단계 | 설명 |
|---|---|
| 요구사항 분석 | 사용자가 원하는 기능과 제약 조건을 정리 |
| 설계 | 시스템 구조, 데이터 모델, 인터페이스를 설계 |
| 구현 | 설계 문서를 바탕으로 실제 코드를 작성 |
| 테스트 | 구현 결과가 요구사항을 만족하는지 검증 |
| 배포 | 완성된 시스템을 운영 환경에 반영 |
| 유지보수 | 버그 수정, 운영 대응, 제한적인 변경 수행 |
각 단계의 산출물이 다음 단계의 입력이 된다. 예를 들어 요구사항 명세서가 설계의 기준이 되고, 설계 문서가 구현의 기준이 된다.
특징
Waterfall의 가장 큰 특징은 계획 중심이라는 점이다. 개발 초기에 범위, 일정, 비용, 요구사항을 가능한 한 명확히 정한다.
무엇을 만들지 먼저 확정한다.
그 다음 어떻게 만들지 설계한다.
그 다음 구현한다.
이 방식은 요구사항 변경이 적고, 결과물이 비교적 명확한 프로젝트에 잘 맞는다. 반대로 개발 중간에 요구사항이 자주 바뀌는 프로젝트에서는 대응이 느릴 수 있다.
장점
Waterfall의 장점은 관리하기 쉽다는 것이다. 단계가 명확하므로 현재 프로젝트가 어디까지 진행되었는지 파악하기 쉽다.
| 장점 | 설명 |
|---|---|
| 명확한 단계 | 진행 상황과 책임 범위를 구분하기 쉽다 |
| 문서화에 강함 | 요구사항, 설계, 테스트 기준이 문서로 남는다 |
| 일정 관리 용이 | 전체 계획을 먼저 세우기 쉽다 |
| 계약 기반 프로젝트에 적합 | 범위와 산출물을 사전에 합의하기 좋다 |
특히 외주 개발처럼 계약 범위가 명확해야 하는 프로젝트에서는 Waterfall 방식이 여전히 사용된다.
단점
Waterfall은 변경에 약하다. 초기에 정한 요구사항이 틀렸거나, 개발 도중 시장 상황이 바뀌면 뒤 단계에서 수정 비용이 커진다.
| 단점 | 설명 |
|---|---|
| 변경 대응이 느림 | 앞 단계로 돌아가야 할 수 있다 |
| 피드백이 늦음 | 사용자가 실제 동작하는 제품을 늦게 본다 |
| 초기 요구사항 의존 | 처음 분석이 틀리면 전체 방향이 흔들린다 |
| 테스트가 뒤에 위치 | 결함 발견이 늦어질 수 있다 |
예를 들어 구현이 끝난 뒤 사용자가 "원한 기능이 아니다"라고 말하면 요구사항 분석과 설계 단계로 돌아가야 한다. 이 경우 일정과 비용이 크게 늘어날 수 있다.
언제 적합한가
Waterfall은 다음과 같은 상황에 적합하다.
| 상황 | 이유 |
|---|---|
| 요구사항이 안정적일 때 | 변경 가능성이 낮으면 순차 진행이 효율적 |
| 규제나 문서가 중요할 때 | 단계별 문서화가 강점 |
| 납품 범위가 명확할 때 | 계약과 검수 기준을 세우기 쉽다 |
| 기술적 불확실성이 낮을 때 | 사전 설계의 신뢰도가 높다 |
예를 들어 내부 업무 시스템, 공공 프로젝트, 하드웨어와 강하게 연결된 시스템에서는 Waterfall이 선택될 수 있다.
Agile과의 차이
Waterfall과 Agile의 차이는 개발을 바라보는 관점에서 나온다.
| 구분 | Waterfall | Agile |
|---|---|---|
| 진행 방식 | 순차적 | 반복적 |
| 요구사항 | 초기에 확정하려고 함 | 변경을 수용 |
| 피드백 | 후반부에 많음 | 짧은 주기로 반영 |
| 문서 | 상대적으로 중요 | 동작하는 소프트웨어를 더 중시 |
| 적합한 환경 | 안정적인 요구사항 | 불확실한 요구사항 |
Waterfall이 항상 나쁘고 Agile이 항상 좋은 것은 아니다. 프로젝트의 불확실성, 조직 구조, 계약 방식, 배포 주기에 따라 적합한 방식이 달라진다.
정리
Waterfall은 요구사항부터 유지보수까지 단계를 순차적으로 진행하는 개발 방법론이다. 명확한 계획과 문서화가 강점이지만, 변화에 빠르게 대응하기는 어렵다.
따라서 Waterfall은 다음과 같이 이해하면 된다.
처음에 충분히 정의하고,
정해진 단계에 따라 만들고,
마지막에 검증하는 방식
요구사항이 안정적이고 산출물 기준이 명확한 프로젝트라면 여전히 실용적인 선택지가 될 수 있다.