728x90
이번 글에서는 애자일 소프트웨어 개발에 대해서 정리하고자 한다.
우선 다루는 주제는 아래와 같다.
- Agile development (애자일 개발)
- Extreme Programming (XP)
- Aglie vs. Plan-driven
- 올바른 소프트웨어 프로세스 모델 선택
애자일 개발
- 배경
- 소프트웨어 프로세스의 과도한 오버헤드에 대한 불만이 있었다.
- 목표
- 과도한 재작업 없이 변화하는 요구사항에 빠르게 대응하여 시스템 전달 시간을 줄이는 것을 목표로 둔다.
아래는 Plan-driven과 Agile development 방식에 대한 도식화 그림이다.


Agile 개발
- 특징
- 점진적 개발
- 여러 버전/증분으로 개발
- 소규모.빈번한 릴리즈
- 반복적 접근
- 고객 참여
- 팀과의 지속적 협업
- 문서화로 프로세스 오버헤드 감소
- 점진적 개발
- 적용성
- 소규모, 한 장소에 모인 팀
- 맞춤형 개발에 적합
728x90
Extreme programming (XP)
- 매우 영향력 있는 애자일 방법이다.
- 반복 개발을 극단적으로 적용한다.
- 하루에도 여러 번 새 버전을 빌드한다.
- 2주마다 고객에게 증분(increments)을 제공한다.
- 릴리즈 주기가 짧다.
- Release cycle (릴리즈 주기)

XP의 핵심 실천
- 사용자 스토리
- 리팩토링
- 테스트 우선 개발
- pair 프로그래밍
아래에서 XP의 핵심 실천에 대해 자세하게 알아보자.
먼저 사용자 스토리이다.
- 고객/사용자가 XP팀의 일원으로 요구사항을 결정한다.
- 요구사항을 사용자 스토리/시나리오로 표현한다.
- 카드를 이용해 작성하고, 개발팀이 구현 작업으로 분해한다.
- 고객이 우선순위와 일정에 따라 다음 릴리즈에 포함될 스토리를 선택한다.
리팩토링
- 기존 코드 구조를 개선하되 외부 동작은 변경하지 않는다.
- 지속적인 코드 개선, 문서화 필요성이 감소된다.
- 예) 중복 코드 제거, 속성/메소드 정리 및 명확화
테스트 우선 개발
- 코딩 전 테스트를 작성한다.
- 요구사항을 명확화한다.
- 새 릴리즈마다 모든 컴포넌트 테스트를 실행한다.
- 테스트는 자동화된 프로그램 형태이다.
- 사용자도 테스트 개발과 검증에 참여한다.
- 수용 테스트 개발에 도움이 된다.
Pair 프로그래밍
- 두 명이 함께 코드를 개발한다.
- 한 컴퓨터에서 협업한다.
- 비공식 코드 리뷰 역할(컴토 프로세스 역할)이다.
- 여러 사람이 각 코드 라인을 살펴본다.
- 이는 팀 전체에 지식을 전파하는 데 도움이 된다.
- 팀원 이탈 시 전반적인 위험을 줄일 수 있다.
애자일 개발의 실질적 문제
- 문서화가 부족하다.
- 요구사항 불안정
- 팀 유지가 어렵다.
- 장기 프로젝트에서 원 개발팀 유지가 불가하다.
애자일의 잘못된 적용 시
- 개발자 간섭, 압박, 결함 증가, 속도 저하 등의 문제가 발생할 수 있다.
애자일 개발은 어디에 적합할까?
- 소규모, 한 장소에 모인 팀에 적합하다.
- 고객 참여가 가능한 경우에 적합하다.
Agile과 plan driven 방식을 비교해보자.
| 구분 | Agile | Plan-driven |
| 개발 방식 | 반복적, 점진적, 유연함 | 선형, 체계적, 사전 계획 중시 |
| 요구사항 관리 | 변화에 유연하게 대응, 지속적 변경 가능 | 초기 단계에서 상세 명세 필요, 변경이 어려움 |
| 고객 참여 | 개발 과정 내내 적극적 참여 | 주로 초기 단계에만 참여 |
| 문서화 | 최소화, 구두/비공식적 커뮤니케이션 중시 | 상세하고 공식적인 문서화 |
| 팀 구성 | 소규모, 한 장소에 모인 팀에 적합 | 대규모, 분산된 팀에도 적용 가능 |
| 릴리즈/배포 | 짧은 주기, 빈번한 릴리즈 | 한 번에 전체 시스템 배포 |
| 적용 적합성 | 요구사항이 자주 변화거나 빠른 피드백이 필요한 경우 | 요구사항이 명확하고 변경이 적은 경우 |
애자일 소프트웨어 개발에 대해 알아봤다.
다음 글에서는 객체 지향에 대해서 정리해보겠다.
728x90
'CS > Software Engineering' 카테고리의 다른 글
| [소프트웨어공학/Software Engineering] Polymorphism 다형성 (0) | 2026.04.10 |
|---|---|
| [소프트웨어공학/Software Engineering] 객체 지향이란? (2) | 2026.04.09 |
| [소프트웨어공학/Software Engineering] 소프트웨어 프로세스 (2) (2) | 2026.04.03 |
| [소프트웨어공학/Software Engineering] 소프트웨어 프로세스 (1) (0) | 2026.04.02 |
| [소프트웨어공학/Software Engineering] 소프트웨어란? (0) | 2026.04.02 |