• 글을 쓰는 목적: 스프린트, 애자일, 스크럼 단어의 개념이 헷갈려서 정리하기 위해.
  • 내용 요약: 아래 첫번째 문장은 두번째 문장과 같이 해석할 수 있다
    • 우리 팀은 애자일 방법론스크럼을 도입하여 실천하고 있다. 이번 스프린트에서는 사용자가 자신의 히스토리를 확인하고 편집할 수 있는 기능을 완성하기로 했다.
    • 우리 팀은 변화에 빠르게 대응할 수 있는 소프트웨어 개발 방법에 대한 이론프로덕트 오너, 스크럼 마스터, 그 외 팀원들이 매일 짧게 진행상황을 공유하는 등 스크럼 이라고 하는 것에 포함된 룰을 지키며 일하는 것을 통하여 실천하고 있다. 이번 집중해서 일하는 n주(1주 ~ 4주) 동안에는 사용자가 자신의 히스토리를 확인하고 편집할 수 있는 기능을 완성하기로 했다.

현재 다니고 있는 회사에 들어온 후로, 꽤 오랜 기간동안 몇 주차 '스프린트'라는 단어를 계속 들으면서 일을 했었다. 근데 스프린트가 뭐냐? 라고 물으면... 딱히 할 말이 없었다(지금 생각해보니 당시에는 스크럼 규칙에 딱 들어맞지 않지만, 그렇다고 스크럼이 완벽하게 아니라고 하기에도 조금 애매한 방식으로 일을 했던 것 같다). 그냥 기간을 정해놓고, 그 기간동안 일하고, 기간이 끝나면 회고 한번 하는 (올해 7월즈음까지 하던)것을 스프린트라고 하는건가... 하고 열심히 개발을 하며 하루하루를 보내던 중, 회사에 새로운 팀원들이 합류 하면서 우리 팀이 일을 더 잘 하려면 어떻게 해야 할지 많은 고민과 회의를 하게 되었다(그리고 이 고민은 많은 시도+실험과 함께 여전히 진행중...).
그 와중에 우리의 '스프린트'에 문제가 많다 라는 이야기가 나왔다. 생각해보니 나는 아직 스프린트가 무엇인지 잘 모르겠더라. 그래서, 회의와 다른 팀원들의 설명을 통해 얻어낸 키워드(스프린트, 애자일, 스크럼)을 자세하게 알아보고 나름대로 정리해보기로 했다.


가장 익숙한 단어인 스프린트(Sprint)를 먼저 찾아보았다.
스프린트의 사전적 의미는 아래와 같다

스프린트(sprint): 육상 경기·수영 경기·스피드 스케이트 등의 단거리 레이스. 또는, 단거리를 전력(全力)으로 행하는 질주(疾走)나 역영(力泳).

단거리 전력질주. 이 정의를 에 대입해서, 매우 크지 않은 태스크(단거리)를 적당한 기간(너무 길면 안됨! 단거리니까)동안 집중해서 전력질주하듯 업무를 수행하는 것을 스프린트라고 생각하면 되는 듯 하다.

더 자세한 정보를 얻기 위해 스프린트를 검색 했더니 가장 먼저 구글 스프린트가 나왔다. 예전(스프린트가 별로 와닿지 않을 시절)에 읽었던 에 나온 그 스프린트였다. 여기에서의 스프린트는 뭔가... '오호 이렇게 1주일 만에 아이디어를 모아 프로토타이핑을 할 수 있구나~' 라는 생각은 들었지만 이게 지금 내가 하는 일(이미 의사결정을 거쳐 개발하기로 결론이 난 사항을 소스코드를 작성하여 구현하는 일)에 어떻게 대입할 수 있을까 생각해봤는데 어떻게 생각해야 할지 잘 모르겠다. 내가 뭔가 잘못 알고 있었나...?

다음 키워드에서 뭔가 도움을 받을 수 있으려나 싶어서, 다음 키워드인 애자일로 넘어갔다. 애자일(Agile). 역시 사전적 의미 먼저 살펴보자.

Agile: 민첩한, 기민한, 재빠른, 날렵한

내가 읽었던 글 중 가장 쉽게 애자일에 대한 이해를 시켜준 글을 아래에 첨부한다. 이 글 이후로 연관된 '스크럼', '린 소프트웨어 개발'에 관한 글도 위에 나열한 알쏭달쏭한 단어들을 조금 더 구체적으로 이해하는 데에 도움이 되었다.

https://brunch.co.kr/@insuk/5

위의 글도 읽고, 여러 사람이 써 놓은 글을 읽으며 내가 이해한 바는 아래와 같다.

  • 애자일은 소프트웨어 개발 방법론 중 하나이다.
  • 애자일 소프트웨어 개발, 애자일 개발 프로세스, 애자일 방법론 등 다양한 단어가 있지만 다 같은 말이라고 생각해도 될 것 같다.
  • 이전에 내가 배웠던 다른 '개발 방법론'은 '폭포수 모델'이 있다.
    • 잠깐 회상을 해보자면 폭포수 모델은
      요구사항 분석 → 설계 → 구현 → 테스트 → 통합 → 유지보수
      위 순서로 진행되는데, 앞 단계의 일이 끝나지 않으면 뒤 단계를 수행할 수 없으며, 요구사항이 변경된 경우 시간과 비용이 '매우'많이 늘어난다. 이러한 이유로 시간이 오래 걸리는 방법이라고 했던 것 같다.

      소프트웨어 개발 초기에 적절히 사용된 시간은 생명 주기(lifecycle)의 후기에 큰 경제적 영향을 줄 수 있다. 다시 말하면, 경제학적 관점에서 소프트웨어 개발의 초기(요구사항 기술 또는 설계 단계)에 발견된 버그는 후기에 발견된 것에 비해 고치는 시간과 돈, 그리고 노력이 몇배는 적게 들기 마련이다. 관련하여 스티브 맥코넬은 그의 저서, "Rapid Development"에서 "요구사항 상의 결함이 구현이나 유지보수 단계에까지 발견되지 않고 남아 있을 경우, 이를 수정하는 비용은 요구사항 기술 시에 수정하는 것에 비해 최소 50배에서 최대 200배까지 드는 것"으로 예측했다. (출처: https://ko.wikipedia.org/wiki/폭포수_모델)

  • 애자일 방법론은 요구사항이 변화하는 것을 당연한 전제로 두고, 변화하는 요구사항에 민첩하게, 기민하게, 재빠르게, 날렵하게 대응하며 소프트웨어 개발을 하기 위한 방법에 대한 이이다.

애자일 소프트웨어 개발 선언

우리는 소프트웨어를 개발하고, 또 다른 사람의 개발을 도와주면서 소프트웨어 개발의 더 나은 방법들을 찾아가고 있다. 이 작업을 통해 우리는 다음을 가치 있게 여기게 되었다:
공정과 도구보다 개인과 상호작용
포괄적인 문서보다 작동하는 소프트웨어
계약 협상보다 고객과의 협력
계획을 따르기보다 변화에 대응하기
가치 있게 여긴다.
이 말은, 왼쪽에 있는 것들도 가치가 있지만, 우리는 오른쪽에 있는 것들에 더 높은 가치를 둔다는 것이다.
Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. MartinSteve Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas
© 2001, 상기 저자들
이 선언문은 어떤 형태로든 자유로이 복사할 수 있지만, 본 고지와 함께 전문으로서만 가능하다.
출처: https://agilemanifesto.org/iso/ko/manifesto.html

  • 애자일 방법론(이론)을 실천할 수 있는 여러가지 방법이 있다.
    • '변화에 민첩하게 대응하며 소프트웨어 개발을 해야 해!' 라는 말로는 어떻게 일을 해야겠다는 감이 전혀 안온다(이론)
    • 반면, '우선 2주동안 a라는 기능만 개발해서 출시한 후 사람들의 반응을 한번 보고, 그것을 바탕으로 그 다음 할 일을 정해보자. 2주동안 우리 팀원들은 매일 1시에 진행상황에 대하여 간단하게 공유하고, 1주일이 지난 시점에서는 계획대로 잘 되어가고 있는지 중간점검을 한번 하도록 하자.'(수행 방법) 라고 이야기한다면 어떻게 해야 할지 훨씬 명확한 느낌이다.
    • 어디에선가 들어본 것 같은 스크럼, 칸반 등의 단어는 '애자일'을 실천하는 방법들이다.
  • 린 소프트웨어 개발 이라는 것도 있는데.. 이녀석은 애자일을 실천하는 방법에 속하는 것이 아닌, 다른 소프트웨어 개발 방법론이다. 아래와 같이 이해하면 되는 듯.
    • 소프트웨어 개발 방법론 → [폭포수, 애자일, 린]
      애자일 실천방법 → [스크럼, 칸반]

여기까지 찾아보니 스프린트는 영 관련이 없는 이야기인가 싶었는데, 그 다음으로 찾아보려 했던 단어인 스크럼(Scrum)스프린트와의 연결고리가 있었다.

사전에서 찾은 Scrum과 위키백과에 적혀있는 정의를 가져왔다.

럭비에서 반칙이 있을 때, 양편 선수가 밀집하여 서로 팔을 꼭 끼고 뭉치는 일. 그 사이로 굴려 넣은 공을 자기편 쪽으로 빼냄.

스크럼(Scrum)은 프로젝트 관리를 위한 상호, 점진적 개발 방법론이며, 애자일 소프트웨어 공학 중의 하나이다.
https://ko.wikipedia.org/wiki/스크럼_(애자일_개발_프로세스)

'애자일 소프트웨어 공학 중의 하나이다' 라는 말은 알아듣겠다. 애자일 방법론을 실천하는 방법 중 하나라는 이야기인 듯. 스크럼에 대한 좀 더 상세한 정보를 얻기 위해 위키 링크와 아래 첨부한 글을 읽어보았다. 아래 링크에는 스크럼 실천 방법에 대한 구체적인 내용이 나와있다.

1편 - https://brunch.co.kr/@insuk/13 / 2편 - https://brunch.co.kr/@insuk/14
다른 사람의 글 - https://medium.com/dtevangelist/scrum-dfc6523a3604

  • 위에 첨부한 링크에 들어가서 글을 읽어보면, 마치 보드게임 처럼 사람들이 각각 어떤 역할을 부여받고(Product Owner, Scrum Master 등) 정해진 규칙(매일 정해진 시간에 15분정도 각자의 상황을 공유한다, 1주에서 4주 사이의 스프린트 기간동안 각자의 일을 하고, 스프린트가 끝나면 스프린트 리뷰와 회고를 한다 등 많은 규칙이 있음)에 따라 소프트웨어를 개발하는 것을 스크럼이라고 하는 것 같다.
  • 내가 생각했던 스프린트(Sprint)라는 단어는 여기에서 나온다.
    • 스프린트: 작은 기능 하나에 대한 [계획, 개발, 테스트, 기능 완료] 주기를 일컫는 말.
    • 보통 1주 ~ 4주 사이의 기간 동안 스프린트를 진행한다. 스프린트 기간 동안, 스크럼을 수행하는 구성원들은 단거리 전력질주(sprint)를 하듯 집중해서 자신의 업무를 수행한다.
    • 스프린트 기간이 끝나면 스크럼 구성원은 해당 스프린트때 무엇을 했는지(스프린트 리뷰), 해당 스프린트를 돌아보며 드는 생각을 함께 나눈다(스프린트 회고).
    • 결국 처음에 찾아봤던 '구글 스프린트'도 짧은 기간동안 빠르게 [계획-디자인-프로토타이핑-테스트] 까지의 주기를 반복하는 것이기 때문에 '스프린트'인 것이다.

여기까지 얻은 지식을 바탕으로 정리를 해보면,

우리 팀은 애자일 방법론스크럼을 도입하여 실천하고 있다. 이번 스프린트에서는 사용자가 자신의 히스토리를 확인하고 편집할 수 있는 기능을 완성하기로 했다.

위와 같은 문장은 아래 문장과 같이 풀이할 수 있겠다.

우리 팀은 변화에 빠르게 대응할 수 있는 소프트웨어 개발 방법에 대한 이론프로덕트 오너, 스크럼 마스터, 그 외 팀원들이 매일 짧게 진행상황을 공유하는 등 스크럼 이라고 하는 것에 포함된 룰을 지키며 일하는 것을 통하여 실천하고 있다. 이번 집중해서 일하는 n주(1주 ~ 4주) 동안에는 사용자가 자신의 히스토리를 확인하고 편집할 수 있는 기능을 완성하기로 했다.

오늘의 정리는 여기까지!