개발문화탐구: 데브옵스 (DevOps) - 애자일(Agile)


어질? 애자일? 이노옴!

도적 키우는데 어질(agility) 만땅 찍나요?


아... 아뇨 여기서 알아볼 애자일(Agile)은 민첩하다는 뜻은 맞는데... 게임 얘기는 아니고요.

Agile이라 불리는 소프트웨어 개발 방법론에 대해서 살짝 맛을 보려고 합니다.

개발 방법론이라 하면 뭐 많이들 얘기하는 Lean startup, Scrum, Squad 등등 종류도 많고 이게 사실 무슨 소린지 잘 모르겠단 말이죠?

이게 무엇이며, 왜 DevOps 이야기에 애자일 관련 이야기 빠지지 않고 나오는지 관련해서 알아보도록 합시다.

소프트웨어 개발 방법론이란?

소프트웨어 개발을 함에 있어 절차, 툴, 기법 등을 제시해 주는 지식입니다.
실제 회사에서 제품을 만들 때, 예전부터 사용된 하나의 정형화된 작업 방식이라고 보시면 될 것 같습니다.

Waterfall

형이 여기서 왜 나와?

Agile을 설명하기 전, Agile의 개념을 보다 쉽게 이해하기 위해 Waterfall(폭포수 모델) 먼저 짧게 설명하고 지나가겠습니다!

이해를 돕기위해 폭포수 모델을 적용해 게임 개발 하는 상황을 예로 들어봅시다!

우리는 이제 게임 프로젝트를 시작하기로 합니다. 
이름은 뭐... 대충 신들을 잡는 좀비가 주인공인 모바일 대작 게임 라스트 오브 워 M을 만들도록 합시다. 

두 유 가이즈 낫 해브 어 폰?

그럼 이제부터 우리는 기획부터 시작해서 게임의 개발 QA 그리고 오픈까지 모든 걸 계획하고 준비하게 됩니다.

시작 전, 게임 컨셉과 기획, 요구사항에 맞게 문서화가 될 것이고, 그런 일련의 프로젝트 진행 과정들을 정리하면 아래와 같은 흐름으로 작업이 진행될 겁니다.

위 그림과 같이 프로젝트 진행이 위에서 아래로 내려오는 폭포수의 모습과 같아 Waterfall이라고 합니다. 
그런데 제가 템플릿을 잘못 선택 해서 뒷산 계곡 같아 보이긴 합니다. ㅈㅅ;;ㅎㅎ..ㅋㅋ!

문제는 Waterfall에서의 단계들은 병행되거나 반대로 진행되지 않습니다.
그 말인즉 만약 테스트 중에 요구사항이 변경됐다면? 요구사항 분석부터 설계, 구현, 테스트까지 다시 전부 진행되어야 합니다.

머라구요? 사장님이 그 부분을 약간 바꾸라고 하셨다구여? 엄마 나 오늘 늦게 집에 들어가...

Agile

그렇다면 Agile이란 무엇일까요?

우선 Agile이란 '날렵한', '민첩한'이란 형용사입니다.

Agile이 빠르다고는 하는데, 뒤에서 채찍 들고 빨리해! 하면서 노예처럼 부린다는 의미는 아니구요...

이 경우 Waterfall처럼 큰 계획을 만들지 않습니다.
주어진 요구사항을 스프린트에 맞춰 작은 단위로 유연하게 개발하는 방식입니다.

위의 과정을 하나의 스프린트라고 하며, 서비스의 종류에 따라서 다르겠지만 그 주기가 빠르면 빠를수록 좋습니다. 
왜냐하면 고객의 피드백을 빠르게 대응할 수 있기 때문입니다.

1. 고객의 피드백 or 서비스 요구사항 발생
2. Scrum이나 다른 개발 방법론 등을 통해 스프린트 목표 설정  (Scrum 포스트에서 다룰 예정)
3. 다음 릴리즈까지 스프린트 진행 
4. 배포. (다시 1로)

Waterfall과의 차이가 느껴지시나요?

요리로 치면 Waterfall은 시작 전 미리 계량된 재료와 레시피로 요리를 완성시키는 것이기 때문에 레시피와 계량 등의 시간을 많이 소비하는 반면, Agile의 경우 정확한 레시피는 없지만, 중간중간 맛을 보면서 피드백을 통해 음식의 간을 맞출 수 있습니다.

물론 따지고보면 요리는 제품과 전혀 다르지만! 제가 말하려는데 무엇인지 전해졌기를 바랍니다! :)

여담이지만 우리 회사는 현재 1주 간격으로 서비스 배포를 진행 하고 있습니다! (이후 포스트에서 자세히 다룰 예정)

사용자의 피드백 빠르게 반영하자

애자일 소프트웨어 개발선언을 보시면 핵심 가치를 쉽게 이해하실 수 있습니다.

  • 개인과의 상호작용
  • 문서보다 작동하는 소프트웨어
  • 고객과의 협력
  • 변화에 대응하기

폭포수 모델에서는 요구사항 수렴단계에서 배포 이후의 상황을 예측하고 문서화를 해야 하는 반면, 애자일은 실제로 고객의 피드백을 빠르게 확인할 수 있고 좀 더 현실적이고 효율적인 서비스의 진화를 체감할 수 있습니다.

와우! 오늘 당장 Agile을 도입해볼까?

준비되지 않은 애자일 모델의 도입은 마치, 갑자기 운동하겠다고 헬스장 간 다음 자세도 잘 모르는 상태에서 스미스 머신이랑 각종 머신 깔짝대고 런닝머신타고 집으로 오는 것과 같습니다. 결국 헬스장 몇주 다니다가 안 가는...

심지어 재수 없으면 부상까지 입을 수 있습니다.

새해 운동하듯이 충동적으로 시작하면 안되고, 많은 준비가 필요합니다.

DevOps와 Agile

DevOps는 Agile과 연장선에 있습니다.

Agile의 목표가 Lean Manufacturing에 기반하여 빠른 소비자 피드백을 가질 수 있게 해준다면, DevOps는 분리되어있던 개발자와 운영자의 역할을 합쳐버리니 더욱 민첩한 개발 및 배포 사이클을 가질 수 있습니다.

고전적인 방법으로, 배포 시 운영팀에 연락해서 서버 올려주세요~ 하고 한참 기다린 후 수많은 절차를 걸쳐 준비됐다는 답변받은 후, 서비스 설치하고... 운영팀에 다시 연락하고... 이걸 2주마다 하려면...

감당하실 수 있겠습니까?

물론 감당할 수 있게 이를 도와주는 많은 도구나 서비스들이 존재합니다만, 그것들은 나중에 다뤄보도록 하겠습니다!

마치며

글을 몇 번을 다시 쓴 지 모르겠네요.

장단점 테이블로 써놓고 보니 뭔가 지루해도 지우고... 실제 경험을 써보니 뭔가 디스하는거 같고... 
결국 "최대한 가볍고 읽기 쉽게 쓰자" 해서 다시 작성했습니다.

앞으로의 개발문화탐구 시리즈도 최대한 가볍고 이해하기 쉬운 정보전달을 목적으로 작성할 예정입니다.

잘못된 부분이나 이상한 부분이 있으면 댓글 부탁드리겠습니다.

긴 글 읽어주셔서 감사합니다!