소프트웨어 설계 중 Agile (애자일) 방법론이란? 정의, 예시, type
소프트웨어 개발방법론 중 Agile(애자일) 방법론이라는 개념에 대해 알아보자.
Agile은 영어로 "민첩한" 이라는 의미를 가지고 있다.
이를 생각하면 애자일 방법론의 개념에 대해서도 쉽게 이해할 수 있는데,
Agile 방법론이란 개발과 함께 즉시 피드백을 받아서 유동적으로 개발하는 방법을 뜻한다.
애자일 방법론은 위와 같은 개념도로 나타낼 수 있다.
애자일 방법론은 크게 두 가지의 배경과 함께 등장했다.
첫 번째로 소프트웨어 개발 환경이 변화하는 상황 속에서 등장했다.
모바일 환경으로 소프트웨어 개발 트렌드가 변화하면서 시장 적시성 뿐 아니라 잦은 배포가 중요해졌다.
이와 함께 두번째 배경으로는 기존 개발방법론의 한계를 들 수 있다.
기존 개발 방법론은 문서와 절차 위주의 개발 방법을 활용했기 때문에 첫 번째 배경처럼 빠르게 변화하는 환경에서의 대응이 어려워졌다.
이에 따라 빠르게 적용하고 효율적으로 개발할 수 있는 방법론의 필요성이 대두되었다.
애자일 방법론의 특징은 다음과 같다.
이는 2020년에도 정보처리기사 기출문제로 출제된 바가 있기 때문에 주의깊게 살펴보자.
- 고객과의 피드백 중시
- 소프트웨어가 잘 실행되는 데 가치를 둠 (전통적 개발방법에서 문서나 절차가 중요했던 것과 상반되는 특징)
- 절차와 도구보다는 개인과 소통을 중요시함
- 작업 계획을 짧게 세워 요구 변화에 유연하고 신속하게 대응할 수 있음
- 프로젝트의 요구 사항은 기능 중심으로 정의
이러한 애자일 방법론에는 크게 세 가지 유형 (XP, Lean, Scrum)이 존재한다.
1. XP (eXtreme Programming)
XP란 extreme programming을 줄인 단어로,
의사소통 개선과 즉각적 피드백으로 소프트웨어 품질을 높이기 위한 방법론이다.
기존의 방법론에 비해 '실용성'을 강조했으며 1~3주의 반복 개발 주기를 가진다.
XP가 중요시하는 가치는 Courage, Simplicity, Communication, Feedback, Respect 이렇게 총 5가지가 있다.
용기를 가지고 자신감 있게 개발하되, 필요한 것만 하고 그 이상의 것들은 하지 않으며,
원활한 소통, 피드백, 그리고 소통 과정 중 서로에 대한 존중을 중요시하는 것을 알 수 있다.
XP에는 또한 12가지의 기본원리가 존재한다.
정보처리기사를 위해서는 일일히 암기할 필요는 없어 보이는데 나름 흥미로운 내용들이다.
- Pair programming: 개발자 둘이서 짝으로 코딩
- Continuous Integration (CI) : 기존 CI의 개념과 동일. 매일 여러 번씩 소프트웨어의 통합과 빌드가 필요
- Collective Ownership: 시스템에 있는 코드는 누구든, 언제라도 수정 가능
- Planning Process: 고객의 요구 가치 정의, 개발자의 요구사항, 그리고 어떠한 부분에서 지연될 수 있는지를 알려주어야 함
- Small Release: 짧은 단위로 배포, 업데이트를 해야 함
- Metaphor: 공통적인 이름 체계와 시스템 서술서를 통해 고객과 개발자 간 의사소통을 원활하게 함
- Test Driven Develop (TDD) : TDD 또한 개발하는 사람이라면 한 번쯤은 들어보았을 것 같은 이름이다. 작성해야 하는 프로그램에 대한 테스트를 먼저 수행하고 해당 테스트를 통과할 수 있도록 코드를 작성해야 함
- Simple Design: 현재 요구사항에 적합한 가장 단순한 시스템을 설계해야 함. XP의 5가지 가치 중 Simplicity와 일맥상통한 원리임
- Refactoring: 프로그램의 기능을 바꾸지 않으면서 중복제거, 단순화를 위해 시스템을 재구성해야 함
- 40-Hour Work: 개인적으로 가장 흥미로웠던 원리. 개발자의 피곤으로 인한 실수를 방지하기 위해 일주일에 40시간 이상을 일하지 않아야 한다는 원리
- On Site Customer (고객 상주) : 개발자들의 질문에 즉각 대답해 줄 수 있는 고객을 프로젝트에 풀타임으로 상주시켜야 한다는 원리
- Coding Standard: 모든 코드에 대한 코딩 표준을 정의해야 함
2. Lean (린)
린 방식은 도요타의 린 시스템 품질기법을 소프트웨어 개발 프로세스에 적용해서 낭비 요소를 제거하여 품질을 향상시킨 방법론이다.
Just In Time, Kanban 보드를 사용하며 낭비 제거, 품질 내재화, 지식 창출, 늦은 확정, 빠른 인도, 사람 존중, 전체 최적화 등의 원칙을 가지고 있다.
3. Scrum (스크럼)
스크럼은 매일 정해진 시간, 장소에서 짧은 시간의 개발을 하는 팀을 위한 프로젝트 관리 중심 방법론이다.
실제로 많은 IT 기업에서는 매일 특정 시간에 Scrum 회의를 실시하며 진행과정을 공유한다.
위와 같이 XP, Lean, Scrum이 Agile 방법론의 가장 대표적인 유형이지만 이외에도 Crystal, ASD, FDD 방법론이 존재한다. 간단하게만 살펴보겠다.
4. Crystal (크리스탈)
크리스탈은 일반적인 프로세스나 도구보다는 '사람'에게 더 많은 중점을 두는 방법론이다.
생명이 중요하지 않은 시스템에서 작업하는 최대 6명/8명의 공동 배치 소프트웨어 개발자 팀에 적용하는 방식이다.
5. ASD (Adaptive Software Development)
이는 확실하지 않은 것, 혼란을 개발로 규정하고 그러한 혼란에서도 그에 적응할 수 있는 소프트웨어 방법을 제시하기 위해 만들어진 q방법론이다.
6. FDD (Feature Driven Development)
앞서 XP의 원리 중 우리는 TDD (test driven development)를 살펴보았다.
이와 반대로 FDD는 신규 기능 단위로 하는 개발 방법론을 의미한다.
지금까지 애자일 (Agile) 방법론에 대해서 살펴보았다.
확실히 전통적 방법론에 비해 빠르게 변화하는 시대에 적합한 방법론을 제시한 것 같다.