에자일(Agile)이란?

들어가기

이글은 애자일의 의미, 맥락을 정리한 글이다. 구체적인 애자일 방법론에서 사용되는 기술명세는 다루고 있지 않다.


애자일(Agile:민첩)

애자일은 어떤 단일 개념이 아니다. 애자일은 서로 다른 여러 맥락에 따른 방법론과 테크닉의 조합이다. 소프트웨어 프로젝트는 변화 자체가 기본 속성이다. 애자일은 개발팀과 기업들이 그러한 변화에 적응할 수 있도록 변화와 관련된 위험을 줄이기위한 방법론 중 하나이다. 애자일의 핵심은 변화에 민첩하게 대응하기 위한 빠른 피드백이다.

개발자라면 한번쯤 들어 봤을법한 마틴파울러, 켄트벡과 같은 IT업계에 유명한 개발자들이 2001년 애자일 연합을 만들고, 애자일 매니페스토를 창안했다.


애자일 매니페스토

우리는 스스로 소프트웨어를 개발하고, 다른 사람들이 개발하는 것을 도와주면서 더 나은 소프트웨어 개발 방법들을 찾고 있다. 이 과정에서 우리는 다음과 같은 가치를 중요하게 생각한다.

절차와 도구보다는 개성과 화합을 방대한 문서작업 보다는 동작하는 소프트웨어를 계약 조건에 대한 협상보다는 고객과의 협력을 계획을 따르는 것을 넘어서서 변화에 대처하는 것을 더 가치있게 여긴다.

좌측의 사항도 가치가 있음을 인정하지만 우리는 우측의 사항에 더 높은 가치를 둔다는 것이다.


애자일 메니페스토의 원칙들

  1. 가치있는 소프트웨어를 일찍, 지속적으로 전달하여 고객을 만족시키는 것을 최우선으로 한다.
  2. 개발의 막바지 단계이더라도 고객의 요구사항 변경을 환영한다. 애자일 프로세스들은 변화를 활용하여 고객의 경쟁력을 높이는 데 기여한다.
  3. 동작하는 소프트웨어를 몇 주에서 몇 개월 단위로 자주 전달한다. 가능한 한 전달주기를 짧게 한다.
  4. 비지니스 담당자들은 프로젝트 기간 내내 매일 개발자와 함께 일한다.
  5. 프로젝트는 동기가 부여된 개인들로 구성한다. 그들이 필요로 하는 환경과 지원을 제공하고 프로젝트가 완료될 때까지 믿고 맡긴다.
  6. 개발팀 내에서 정보를 전달하는 가장 효율적이고 효과적인 방법은 얼굴을 마주보고 대화하는 것이다.
  7. 프로젝트의 진척도를 가늠하는 가장 기본 요소는 동작하는 소프트웨어다.
  8. 애자일 프로세스들은 지속 가능한 개발을 이끈다. 투자자, 개발자, 사용자들은 일정한 개발속도를 계속 수용할 수 있어야 한다.
  9. 기술적인 탁월함과 좋은 설계에 대한 지속적인 관심은 기민함을 높인다.
  10. 단순함, 즉 하지 않아도 될 일은 최대한 하지 않아야 한다.
  11. 최선의 아키텍처, 요구사항, 설계는 스스로 조직화되는 팀에서 나온다.
  12. 개발팀은 정기적으로 일을 어떻게 하는 것이 더 효과적인지 되돌아보고 그에 맞추어 일하는 방식을 조율하고 바로잡는다.

절차적 관점에서의 애자일 원칙

애자일은 탐과 조직이 어떻게 구성되고 협업해야 하는지에 대한 것들을 규정한다.

  • 회의 방식
  • 구성원 각각의 역할
  • 요구사항 파악 방법
  • 작업 진척 속도 파악방법
  • 점진적/반복적으로 일할 때 취하는 방식
  • 진행 상황을 개발팀 밖의 관계자(고객, 영업 등)에게 전달하는 방식
  • 비지니스 피드백 방식

기술적인 관점에서의 애자일 원칙

애자일 원칙의 기술적인 부분들은 개발, 확장, 유지보수, 제품을 출시(또는 납품, 서비스 배포)하면서 겪는 어려움들에 대해 특정한 기술적 관례나 기술 자체를 매우 구체적으로 가이드한다. 테스트 주도 개발(TDD), 페어 프로그래밍, 지속적인 통합, 단순한 디자인 원칙등과 같은 것들이다. 이러한 기술적 원칙들은 소프트웨어의 품질에 집중하여 팀이 결과물을 올바르게 만들어 가는지, 즉 목표한 것을 올바르게 실행하고 있는지에 대해 안심할 수 있게 한다.


애자일 방법론 사용시 주의점

애자일도 그저 수많은 방법론 중에 하나이다. 맹신은 금물이다. 그냥 따르기만 하면 갑자기 모든 것이 나아지는 마법의 방법론이 아니다. 애자일의 모든 절차들에는 기술적 탁월함이 전제되어 있어야 한다. 애자일 전환은 주로 절차, 동기부여 권한이양, 관료주의와 낭비의 제거, 우선순위, 업무의 가시화, 그리고 정보의 흐름에 집중한다.

절차에만 집중하고 스프트웨어 개발을 공장 라인처럼 취급하면, 그저 시키는 일만 하고 출퇴근하는 공장 노동자와 다를 바 없는 개발자들만 생긴다. 이렇게 되면 비효율적인 피드백 시스템이 되어 전체 프로젝트에 해를 끼친다.

완전한 애자일 전환을 위해서는 프로페셔널 소프트웨어 개발자들이 필요하다. 이들은 기술적 실행 관례, 기술적 전문성 그리고 관련도구들을 마스터하고 있어야 한다. 정기적으로 계속해서 배포되는 소프트웨어에 대해서도 높은 품질을 유지시키며, 완벽하게 테스트되고 쉽게 변형할 수 있는 소프트웨어를 개발할 수 있어야 한다. 완전한 애자일 전환을 위해서는 기업들이 소프트웨어 장인정신을 품어야 한다.


참고서적

소프트웨어 장인(산드로 만쿠소)