애자일(Agile) 방법론

@Deneb·2022년 1월 14일
0

"애자일 방법으로 개발하자"
필자 : ?

👩‍💻애자일 그게 뭔데

애자일 방법론은 소프트웨어 개발 방법에 있어서 아무런 계획이 없는 개발 방법과 계획이 지나치게 많은 개발 방법들 사이에서 타협점을 찾고자 하는 방법론

예시를 들어보겠다.

레고로 차를 만드는 과제를 디자이너, 경제학자, 초등학생한테 부여한다.

디자이너는 본업에 충실히 디자인부터 시작하고 Aerodynamic , 필러당 수치, 근래 자동차 디자인 유행 흐름 등을 고려하며 시작할 것이다.

경제학자의 경우는 최대한 노력을 덜 들이면서 가장 최대한의 효율을 낼 수 있는 방법, 가장 합리적이며 적은 레고 부품으로 차를 만들 방법을 논의할 것이다

초등학생은? 그냥 쌓을 것이다. 어떠한 방법을 생각하지 않고 일단 만든다.

결과적으로 보면 단순히 자동차라는것을 만드는것에 있어서는 초등학생의 방법이 가장 효과적이다.

디자이너의 방식은 가장 멋지고 최적의 디자인을 가진 자동차를 만들 수 있겠지만 속도가 가장 느릴 것이고 경제학자는 효율을 찾기 위함이지만 오히려 효율을 해치고 초등학생의 경우는 자신이 가진 현재의 재료로 서로 간에 크게 다툴 일 없이 빠르게 보다 좋은 아이디어가 있으면 그 토대에서 유연하게 변화해가며 결과적으로 제시한 과제 목적에 맞게 빠르게 만들 수 있는 것이다.

만약 차를 만드는데 버스를 만들어 달라고 과제 목적을 바꿔버린다면?
디자이너는 다시 재디자인을 할 것이고 경제학자는 비용에 대한 회의를 초등학생은 다시 허물고 만들 것이다.

👩‍💻애자일이란 이런것이다

시장 요구사항의 변동, 외부적 요인, 내부적 요인으로 얼마든 예외 사항이 있을 수 있는 개발 환경에서 처음부터 완벽한 설계를 가지거나 완벽한 구조를 가지고 개발을 하는 것이 아니라

초등학생이 레고로 자동차를 만들듯이 기본적인 콘셉트에 대하여 실질적으로 개발을 해보고 중간중간 변동 사항과 개선사항에 대해 유연하게 변화하며 제품을 개발하는 개발 방법론을 말한다.

그렇다고 아무런 계획 없는 개발을 뜻하는 것은 아니다. 애자일 개발을 통해 생겨나는 지나친 유연 함의 범용성 있는 모듈 단위 개발로 해결할 수 있다.

예를 들어 레고로 자동차를 만든다고 했을 때 바퀴, 문, 휠, 차체 등 범용성을 갖춘 부분을 먼저 만들다가 변경이 생기면 만들어진 부분을 튜닝하여 좀 더 효율적으로 만들거나 기록해둔 개발 기법이나 방식을 활용하여 쉽게 다음 개발을 하는 등 프로젝트의 철저한 관리가 필요하다.

👩‍💻애자일 개발 프로세스와 전통적인 개발 프로세스와의 차이

전통적인 개발 프로세스들은 폭포수 모델계획 기반 개발을 따르지만 애자일 개발 프로세스는 그에 반한다는 점에서 가장 큰 차이를 가진다.

폭포수 모델과 계획 기반 개발 기법들은, 일련의 차례와 탄탄한 계획을 기반으로 하여 개발을 진행하게 한다. 이것은, 이해하기도 쉽고 사용하기도 쉬운 바람직한 기법이기도 하지만, 이에 따라서 많은 부작용이 생길 수 있다. 가장 큰 부작용이 발생할 때는, 계획대로 진행되지 않을 경우이다. 이럴 때 다음과 같은 부작용이 발생하게 된다.

  • 납기일 전 철야
  • 철야에도 불구하고 납기일 지연
  • 지연에 따른 비난과 스트레스로 개발자 에너지 소진
  • 결국 납품된 솔루션은 고객의 니즈를 충족하지 못함

이런 부작용은 근본적인 개발 프로세스 접근법의 차이에서 나타난다. 전통적인 개발 프로세스들은 공업에서 사용하는 정형적 프로세스 제어 모델을 따르고 있다. 정형적 프로세스 제어모델은, 같은 입력에 대해서 같은 결과가 기대될 경우에 적합하다.

하지만, 소프트웨어를 포함한 IT의 개발은 경험적 프로세스 제어 모델로 접근할 필요가 있다. 경험적 프로세스 제어 모델은 항상 불확실성을 수반하고 포용하고 있다. 애자일 개발 프로세스는 경험적 프로세스 제어모델로 개발을 관리한다.

단, 일반적으로 애자일 개발 프로세스는 자사가 대중에게 직접 제공하는 서비스를 단계적으로 개선하여 나가려는 입장에서 주로 사용됨으로, 소프트웨어 개발 업무를 수주하여 납품하는 것을 주 업무로 행하는 개발 업체의 업무의 범위에서 그 특성을 한정하여 비교하는 것은 바람직하지 않다.

👩‍💻애자일 개발 프로세스의 종류

1. 익스트림 프로그래밍(Extreme Programming, XP)

  • 고객과 함꼐 2주 정도의 반복 개발을 하고 테스트우선 개발(TDD)를 특징으로 하는 명시적인 기술과 방법을 지님

2. 스크럼

  • 매일 정해진 시간에 정해진 장소에서 짧은시간의 개발을 하는 팀을 위한 프로젝트 관리 중심의 방법론

3. 크리스털 패밀리

  • 익스트림 프로그래밍 만큼 엄격하지도 않고 효율도 높지 않지만, 프로젝트에 적용하기 쉬운 방법론

4. Feature-Driven Development

  • feature마다 2주정도의 반복 개발을 실시

5. Adaptive Software Development

  • 소프트웨어 개발을 혼란 자체로 규정하고 혼란을 대전제로 그에 적응할 수 있는 소프트웨어 방법을 제시하기 위해 만들어진 방법론

6. 익스트림 모델링

  • UML(통합 모델링 언어)을 이용한 모델링 중심 방법론. 다만 여타 모델링 방법들과는 달리 언제나 실행할 수 있고 검증할 수 있는 모델을 작성하는 공정으 반복해서, 최종적으로 모델로부터 자동적으로 제품을 생성하게 한다.

👩‍💻끝으로 애자일 방법론은

1. 공정과 도구보다 개인과 상호작용

2. 포괄적인 문서보다 작동하는 소프트웨어를

3. 계약 협상보단 고객과의 협력

4. 계획을 따르기보다 변화에 대응하기

를 가치있게 여긴다. 실무에서 분명 자주 쓰인다. 알아두자

profile
JeongSeob LEE

0개의 댓글