애자일(Agile) 방법론이란 소프트웨어 개발하는 접근법/개발 기법 중 하나이다.
무엇인지 알아보자.
초기 소프트웨어 개발 방법은 계획 중심의 프로세스였다.
마치 도시 계획으로 건축에서 사용하는 방법과 유사하며, 당시에는 이런 프로세스를 활용하는 프로젝트가 대부분이었다.
이러한 프로세스를 폭포수(waterfall) 개발 모델이라고 하며 아래와 같은 한계점을 가진다.
- 한 과정이 제대로 되지 않으면 다음으로 못넘어간다.
- 다음 단계가 되더라도 전 단계가 문제가 생기면 다시 처음으로 돌아가게 된다.
- 요구분석단계에서 사용자가 개발자에게 한 번에 모든 요구사항을 정확하게 전달하는 것을 가정하고 있으나, 현실적으로 불가능하다.
- SW의 비가시성으로 사용자의 요구사항이 프로젝트 진행 시 지속적으로 변경된다.
90년대 이후, 소프트웨어 분야가 넓어지면서 소프트웨어 사용자(end user)들이 '일반 대중들'로 바뀌기 시작했다.
즉, 이제 모든 사람들이 소프트웨어 사용자들의 대상으로 되면서 트렌드가 급격하게 빨리 변화하는 시대가 도달한 것이다.
이로인해 비즈니스 사이클(제품 수명)이 짧아졌고, SW 개발의 불확실성이 높아지게 되었다.
개발의 불확실성이 높아지면서 예전의 전통적 개발 방법 적용이 어려워졌고 사람들은 새로운 자신만의 SW 개발 방법을 만들어 사용하게 된다.
따라서 '경량 방법론 주의자(lightweight methodologies)'들은 일단 해보고 고쳐나가자는 방식으로 개발하게 되었다.
규칙을 적게 만들고, 가볍게 대응을 잘하는 방법을 적용하는 것
이런 경량 방법론 주의자들이 모여 자신들이 사용하는 개발 방법론을 공유하고, 공통점을 추려서 애자일(Agile)이라는 용어에 의미가 담기게 된 것이다.
애자일에서는 소프트웨어 개발의 불확실성이 중요하게 작용한다.
불확실성이 높으면, 우리가 생각한거랑 다르다.
라는 상황에 직면하게 된다.
이때, 전통적인 방법론과 애자일의 방법론의 차이는 아래와 같다.
전통적 방법론
: '그때 계획 세울 때 좀 더 잘 세워둘껄..
이런 리스크도 생각했어야 했는데... 일단 계속 진행하자'
애자일 방법론
: '이건 생각 못했네. 어쩔 수 없지. 다시 빨리 수정해보자'
전통적 방법에 속하는 '폭포수 모델'은 요구분석단계에서 한번에 모든 요구사항을 정확하게 전달하는 것이 원칙이다. 하지만 요즘같이 변화가 많은 프로젝트에서는 현실적으로 불가능에 가깝다.
이런 한계점을 극복해주는 애자일은, 개발 과정에 있어서 시스템 변경사항을 유연하게 or 기민하게 대응할 수 있도록 방법론을 제공해준다.
애자일 소프트웨어 개발 선언문
우리는 소프트웨어를 개발하고, 또 다른 사람의 개발을
도와주면서 소프트웨어 개발의 더 나은 방법들을 찾아가고
있다. 이 작업을 통해 우리는 다음을 가치 있게 여기게 되었다:
공정과 도구보다 개인과 상호작용을
포괄적인 문서보다 작동하는 소프트웨어를
계약 협상보다 고객과의 협력을
계획을 따르기보다 변화에 대응하기를
가치 있게 여긴다. 이 말은, 왼쪽에 있는 것들도 가치가 있지만,
우리는 오른쪽에 있는 것들에 더 높은 가치를 둔다는 것이다.
http://agilemanifesto.org/
애자일은 위 '애자일 소프트웨어 개발 선언문'에 나와있는 것이 전부이다.
해당 선언문을 좀 더 정리하자면 '협력'과 '피드백'을 더 자주하고, 일찍하고, 잘하는 것이라고 할 수 있다.
즉, 애자일의 핵심은 바로 '협력'과 '피드백'이다.
애자일이 되기 위해 필요한 조건을 좀 더 풀어 말하자면 애자일은 4가지 가치를 수호해야 한다.
4 가지 모두 뛰어넘어야 하는 대상을 명시하고 있으며, 비교 대상은 기존의 개발 방법론에서 거쳤던 과정이다. 즉, Agile 방법론은 기존의 다른 프로젝트 개발 방법론의 문제점을 극복하기 위해 탄생한 것임을 알 수 있다.
애자일과 전통적인 개발방법론의 차이점 및 특징
소프트웨어를 개발한 사람들 안에서의 협력을 말한다.(직무 역할을 넘어선 협력)
협력을 통해 스스로 느낀 좋은 통찰은 협력을 통해 다른 사람에게도 전해줄 수 있으며, 예상치 못한 기회 또는 기대 효과를 가져올 수 있다.
ex) 좋은 일은 x2가 된다.
어떤 사람이 2배의 속도로 개발할 수 있는 방법을 발견함
협력이 약하면?
→ 혼자만 좋은 보상과 칭찬을 받음
→ 하지만 그 사람 코드와 다른 사람의 코드의 이질감이 생겨서 시스템 문제 발생 가능성 존재
협력이 강하면?
→ 다른 사람과 공유해서 모두 같이 빠르게 개발하고 더 나은 발전점을 찾기에 용이
→ 팀 전체 개선이 일어나는 긍정적 효과 발생
또한 협력을 통해 문제가 발생하는 부분을 찾기 쉬워지며, 고칠 수 있다.
그리고 예상치 못한 문제를 협력으로 막을 수도 있다.
ex) 안 좋은 일은 /2가 된다.
내가 생각지 못한 실수를 했는데 아무리 다시 봐도 모르겠거나 더 나은 방법이 생각나지 않을 때가 있다.
협력이 약하면?
→ 개발 지연
→ 또 다른 문제점 발생 가능성 존제
협력이 강하면?
→ 다른 사람과 공유해서 빠르게 문제점을 발견하여 고칠 수 있다.
→ 다양한 의견으로 추가적인 문제점이 발생할 가능성을 낮출 수 있다.
피드백은 학습의 가장 큰 전제조건이다. 내가 어떻게 했는지 확인하면서 학습을 진행해야 한다.
또한 모르는 게 많으면 더 빨리 배워나가야 하기 때문에 소프트웨어의 불확실성이 높을 수록 학습의 중요도는 올라간다.
일을 잘하는 사람은 이처럼 피드백을 찾는 능력(feedback seeking)이 뛰어나다. 즉, 더 많은 사람들에게 피드백을 구하고 발전시켜 나간다.
애자일을 적용하여 여러 개발 방법론이 존재한다.
UML(Unified Modeling Language)
- 프로그램 설계를 표현하기 위해 사용하는, 주로 그림으로 된 표기법을 의미한다.
- 소프트웨어 시스템, 업무 모델링, 시스템의 산출물을 규정하고 시각화하며 문서화하는 '언어'이다.
- 모델링 언어일뿐 방법론이나 프로그래밍 언어는 아니다.
참고 자료
애자일 소프트웨어 개발 선언문
https://gmlwjd9405.github.io/2018/05/26/what-is-agile.html
https://ememomo.tistory.com/126
https://asfirstalways.tistory.com/95
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Software%20Engineering/%EC%95%A0%EC%9E%90%EC%9D%BC(Agile).md
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Software%20Engineering/%EC%95%A0%EC%9E%90%EC%9D%BC(Agile)2.md