이 책에서는 애자일은 무엇이고, 무엇이었고, 앞으로도 영원히 무엇일지를 다룬다.
애자일(Agile), 어디서 들어봤지?
데이터 분석가 직무를 준비할 때, 취준생이라면 일단 따고보는 자격증이 몇 개 있다. 사회조사분석사, ADSP, SQLD, 정보처리기사 등등 … 아마도 그런 자격증 서적 중 하나의 어딘가에서 애자일
이라는 단어를 처음 보았을 것이다. 이 책은 애자일에서 파생된 여러 기술적인 방법론에 대한 소개보다는, 애자일 철학의 역사와 근본을 다루는 것을 목표로 한다. 나이 지긋한 저자가 라떼의 이야기를 시간의 흐름으로 풀어낸 구성이며, 가장 대표적이고 기본적인 방법론 하나를 다양한 예시로 풀어 설명한다. 따라서 처음 읽을적에는 그냥 한 권의 자서전을 읽듯 부담없이 읽어나갈 수 있었다. 그러나 이 이야기에 담긴 철학을 소화하고, 업무에 녹여내는 것은 전혀 다른 차원의 일이다. 애자일은 자기 자신에게 거짓말하지 않는 완벽주의자들을 위한 도구이며, 적당히 찍먹해볼 수 있는 성격의 철학은 확실히 아니다.
애자일은 왜 시작됐지?
애자일을 이해하기 위해서는 우선, 이에 대치되는 폭포수 개발 모델
이라는 개념을 인지할 필요가 있다. 폭포수란 철저한 설계와 분석을 기반하여, Top-Down 방식으로 소프트웨어 개발이 이루어지는 것을 의미한다. 개발에 대한 의뢰가 들어오고, 마감이 정해지면 폭포수 모델은 크게 3단계로 일정을 나누어 프로젝트를 진행한다.
[1] 분석 단계:
프로젝트의 규모를 추산하고, 기본적인 실현 가능성 검증이나 인력 계획 등을 수행한다.
[2] 설계 단계:
프로젝트를 모듈별로 나누고, 각 모듈 간의 인터페이스를 설계한다.
몇 개의 팀이 필요하고, 각 팀 사이에는 어떻게 연결해야 할지를 고민한다.
[3] 구현 단계:
코딩을 한다.
폭포수 개발 모델의 3단계 중, 분석과 설계의 단계에서는 명확한 성공과 실패의 기준이란 것이 존재하지 않는다. 단지 폭포수가 나누어 준 일정에 따라, 분석과 설계의 일정이 마무리되면 각 단계가 끝났다고 보는 것이다. 저자는 이것이 폭포수 개발 모델이 실패할 수 밖에 없는 이유라고 말한다. 자신들의 일이 잘 되고 있는지, 실패할 것 같은지 명확히 알지도 못한채 일정의 많은 부분을 낭비하기 때문이라고 한다. 구현 단계에서 실패를 직감할 즈음에는 이미 마감 기한은 얼마 남지 않았고, 개발을 의뢰한 사업팀에서는 마감 기한을 마출 수 없다는 말을 이제서야 하는 개발팀을 도저히 용서 할 수 없다.
애자일 개요
애자일
은 우선 전체 일정을 3단계로 나누지 않는다. 훨씬 작은 단위(1주 or 2주)로 잘게잘게 쪼갠다. 그리고 하나의 단위를 반복 주기 혹은 스프린트
라고 부른다. 첫 반복 주기(반복 주기 0)에는 개발 환경을 준비하고, 짧은 단위로 만들어낼 수 있는 기능들의 목록을 만든다. 그리고 하나하나의 기능들을 스토리
라고 부른다.
이제 반복 주기 1을 시작한다. 주기 내 몇 개의 스토리를 완성할 수 있는지 추산한 뒤, 일을 한다. 그리고 반복 주기 1이 끝나면 얼마나 스토리를 완료했는지에 대한 데이터를 얻는다. 모든 반복 주기가 비슷하고, 처음 기획한 스토리 외에 새로운 기능이 필요하지 않는다면 완벽하게 프로젝트 종료일을 측정할 수 있을 것이다.
그러나 물론 한 번의 데이터로 얻은 종료일에 대한 오차 범위는 넓을 것이다. 그러나 표본을 반복하여 얻을수록 표준 오차가 작아지는 것과 마찬가지로 스프린트를 반복하며 얻는 데이터는 프로젝트를 관리 가능한 상태로 만든다. 관리자는 데이터를 모으고, 그 데이터에 기반하여 최선의 결정을 내림으로써 소프트웨어 프로젝트를 관리한다.
애자일은 프로젝트를 더 작은 반복 주기로 나누는 프로세스다. 각 반복 주기의 결과물을 측정하여 지속적으로 일정을 평가하는 데 사용한다. 기능은 비즈니스 가치 순서대로 구현한다. 품질은 가능한 한 높게 유지한다. 일정은 필요 기능의 범위를 조절하여 관리한다.
Extreme Programming(XP) 실천 방법
이 책에서는 XP를 애자일의 프로토타입이자, 최고의 대표주자이며, 본질이고, 핵심이라 말한다.
XP는 (비즈니스 실천 방법, 팀 실천 방법, 기술 실천 방법) 3가지 실천 방법으로 구성된다.
비즈니스 실천 방법
- 계획 세우기
- 작은 릴리스
- 인수 테스트
- 전체 팀
팀 실천 방법
- 메타포
- 지속 가능한 속도
- 공동 소유
- 지속적 통합
기술 실천 방법
- 테스트 주도 개발 (TDD)
- 리팩터링
- 단순한 설계
- 짝 프로그래밍
XP의 실천 방법과 그 하위의 구성요소들은 모두 제대로 설명하려면 별도의 책이 한 권씩 필요한 만큼 이야기할 것이 많고 복잡한 주제라고 한다. 그러나 이 책은 각 요소를 깊이 설명하기보다는 동기와 도입 이유에 집중한다. 저자는 XP를 도입하기를 권유하지 않는다. 다만, 애자일의 가치를 지닌 무언가를 프로젝트의 시작과 끝까지 유지하기를 요구한다. 대부분의 프로젝트가 비즈니스 단계에서만 애자일을 실천하는 것을 비판한다.
이 책의 마지막 챕터는 장인 정신을 다룬다. 장인 정신은 개인을 전문가로 만든다. 전문가는 더 잘하고 싶어 한다. 더 많은 기술을 얻고 더 오래, 더 많은 성취를 하며 경력을 쌓고 싶어 한다. 전문가는 일에서 삶의 의미를 찾는다. 애자일은 주도적인 실천 방법을 지속하는 가치이기 때문에, 구성원의 장인 정신이 없다면 가능하지 않을 것이다. 애자일은 실패에 지친 개발자들이 만든, 성공적인 소프트웨어 개발에 대한 간절함이다.