본문으로 바로가기

애자일 방법론 스크럼(Scrum)

category Helloworld! 2013. 10. 28. 09:54
개발을 할때 사용자가 원하는 것이 무엇인지 요구분석 한 후 설계를 하고 개발을 시작한다.
그리고 프로그램이 완성이 되었을 때, 사용자에게 완성된 프로그램을 보여주는데 
이때 사용자는 그 결과물을 보고 다시 프로그램의 기능을 수정, 추가하거나 최악인 경우는 새로 짜게 되는 일이 많다.

위 같은 경우는 대부분 사용자 또한 원하는것이 무엇인지 몰라 요구분석시 
이런 기능이 있었으면 좋겠다. 이것도 있음 좋고, 이건 어때? 식의 무분별한 설명을 추스려 요구분석을 하기 때문에 (즉, 사용자도 원하는게 뭔지 잘 모르는 경우가 많다) 
완성된 모양을 보고나서야 원하는 것이 무엇인지 확신이 서는 경우일 것이다. 
뭐 그 이외의 이유들도 있겠지만..
이런일이 계속 반복되다보면 일정기간이 지연되는건 당연지사.

익히 이런 난감한 일을 경험해본 프로그래머들의 해결방안으로는 만드는 도중에 계속 "뒤를 돌아봐야한다"라는 노하우가 생기는데,
이 또한 개발 중간 중간에 사용자와 여러번 중간 점검을 하며 요구분석을 하는것은 쉽지 않은 일이다.
하지만 기획은 언제든지 바뀔 수 있기 때문에 계속 뒤를 돌아보는 것은 
위험한 150%보다 안정적인 100%의 프로그램을 완성할 수 있는 지름길임은 확실하다.

그래서 이러한 문제점을 해결하는 방안으로 나온것이 애자일의 스크럼이라는 방법론이 있다.

스크럼의 개념을 간단하게 말하자면 위에서 실컷 설명한 "반복 개발"인데 
1) 해야할 일, 하고있는 일, 끝마친 일로 우선 프로젝트를 나눈 후
2) 이번에 할 프로젝트의 긴 개발 기간을 잘게 쪼개서 (이 쪼갠 단위를 스프린트라고 한다) 개발하는 방법을 말한다.
3) 이때 스크럼 프로세스(스프린트, 미팅, 산출물)은 대체로 1~4주 단위의 반복 개발을 한다.

자세하게 설명하면 다음과 같다.

스프린트가 끝날 무렵 회의를 진행하는데 이때 제품 책임자, 스크럼 마스터, 스트럼 팀 으로 역할을 나눈 후 미팅을 한다.
- 제품 책임자 : 제품 기능 목록에 해당하는 제품 백로그를 만들고 우선순위 조정하거나 새로운 항목을 추가하는 일을 관리함
- 스크럼 마스터 : 스크럼 팀의 업무를 방해하는 요소를 제거하기 위해 노력해야함
- 스크럼 팀 : 하나의 스프린트 기간 동안 구현해야할 기능을 사용자 스토리로 도출하고 이를 구현

그리고 이 미팅은 일일 스크럼, 스프린트 계획, 스크린트 리뷰를 하는데 이 미팅 시간은 절대 15~30분 이상을 넘기지 않도록 간단하게 하는 것이 원칙이다. 
그리고 이 때 함께 모여 프로젝트가 잘 진행되고 있는지를 체크하고 만약 계획에 차질이 생겼을 경우 다시 스프린트 계획을 처음부터 다시 짜서 프로젝트를 진행해야한다.
- 일일 스크럼 : 매일 진행하는 15분간의 프로젝트 진행 상황을 공유하는 회의하면서 각자 한일, 할일, 문제점을 이야기
- 스프린트 계획 : 각 스프린트에 대한 목표를 세우고 제품 백로그로부터 스프린트에서 진행할 항목을 선택하고 각 항목에 대한 담당자를 배정하고 태스트 단위로 계획을 수립
- 스프린트 리뷰 : 스프린트 목표를 달성했는지 진행 및 결과물을 확인하는 회의. 스크럼 팀은 스프린트 동안 작업한 결과를 데모하고 피드백을 받음. 스크럼 마스터는 스프린트 동안 잘된 점, 아쉬운 점, 개선할 사항 등을 착기 위한 회고를 진행

스프린트 회의 때는, 제품 백로그에서 우선 순위가 높은 기능을 선정하고 기능을 구현하는데 필요한 작업을 기준으로 나눈 후 완료하는데 얼마나 걸릴지를 각자 예측한다. 이때 개발자 혼자 "나 이거 끝내려면 얼마나 걸릴것 같아요"라고 예상하는 것이 아니라
회의에 참여한 모든 사람들이 개발 예상 기간을 써서 내고 그 중에 제일 많이 적혀있는 기간을 선정하며, 만약 적어낸 기간이 모두 다를 경우 제일 짧은 기간과 제일 긴 기간을 쓴사람이 왜 그렇게 썼는지에 대해 들어본 후 개발 기간을 정한다.

특히, 일일 스크럼을 한 뒤 해야할 일, 할 일에 대해서는 포스트잇으로 써서 보드에 각각에 해당하는 곳에 붙이고, 완료 되었을 경우 끝마친 일로 포스트잇으로 옮기는 식으로 사용한다. 
그리고 해야할일 대비 끝마친일이 얼마나 되는지 차트로 그려서 개발 작업량을 틈틈히 확인한다.
이런 것들을 스크럼 산출물이라고 한다.
- 제품 백로그 : 제품 기능의 우선 순위를 정리한 목록(개발자가 아닌 사용자도 알아볼 수 있도록 해야함)
- 스프린트 백로그 : 하나의 스프린트 동안 개발할 목록(사용자 스토리와 이를 완료하기 위한 작업을 태스크로 정의)
- 소멸 차트 : 개발 완료하기까지 남은 작업량을 보여주는 그래프  

요즘 회사에서 하고 있어서 정리했는데 아직 위에 적은 모든 방법을 사용하고있진 않고 몇가지를 시행중인데 물론 아직은 익숙하지 않아 쉽게 진행되고 있진않다.
하지만 좀 더 익숙해지고 잘 사용한다면 분명 개발시 도움이 되지않을까 생각한다.