에자일(Agile)이란?

개발 블로그·2022년 4월 11일
0
post-thumbnail

서론

개발자 채용공고를 보다보면 흔히 마주치는 사항입니다. Agile한 프로세스, Agile한 개발 방식, Agile한 프로세스 관리를 위한 협업 툴 jira 사용 경험 등등 Agile이 도대체 무엇이길래 많은 회사에서 원하나 궁금증이 생겨 이 글을 작성하게 됩니다.

Agile의 역사

agile: 민첩한. 기민한. 영민한.

"this car is very agile"
"내가 운전하는 대로 이 차가 반응을 잘한다"
"원하는 방향을 갑자기 틀어도 반응이 굉장히 빠르다"

Agile은 일을 빠르게 하기 위해서가 아니라 고객과 시장에 빠르게 대처하기 위해서 태어났습니다. Agile 그 자체는 개발 방법론에 국한되지 않고 좀 더 포괄적인 의미로 사용됩니다.

Agile스러운 조직문화, Agile 방식의 소프트웨어 개발을 이해하기 전에 앞서 그전에는 그럼 어떻게 업무를 진행햇을까 이야기를 먼저 하고자 합니다.

Waterfall(폭포수) 개발 방법론

요구사항 정의  ➡️  분석 / 설계  ➡️  개발  ➡️  테스트  ➡️  배포  ➡️  유지보수

개발의 흐름이 마치 폭포수처럼 지속적으로 아래로 향하는 것처럼 보인다고 해서 붙여진 이름입니다. 흔히 건축에 비유를 많이 하며 개발에서 기본적인 방법론입니다.

장점
1. 각 단계에서 뭘 해야 되는지 명확하다.
2. 각 단계마다 적합한 문서가 잘 나온다. (WBS)
=> 단계의 업무가 명확하기 때문에 각 단계마다 업무 담당자가 전부 다를 수 있다.
=> 다음 단계의 업무자에게 전 단계들의 문서가 정확히 인수인계되어야하므로 문서 작업이 필수다.
3. 요구사항 변경이 보수적이고 명확히 설계된 대로 작업해야하는 프로젝트들에 유용한 방식이다.

단점
1. 폭포수라는 이름처럼 전 단계로 거슬러 올라가는 과정이 힘들다.
2. 소프트웨어에서는 요구사항이 변경되는 일이 생각보다 아주 많기 때문에 기존 설계나 기저를 바꿔야되는 상황에 불리하다.

Agile 개발 방법론

폭포수 개발론과는 반대로 처음부터 설계를 다하지말고 최소한의 수준, 최소한의 기능을 가진 제품을 시장에 선보이고 피드백 받은 다음 개선한다를 빠르게 빠르게 진행합니다. Scrum, Kanban 등등 여러가지 방식들이 이 Agile 원칙에서 파생되었으며 여기서 핵심은 작은 단위로 쪼개서 여러 번 반복한다는 것입니다.

소프트웨어에서 에자일은 보통 배포되어 있는 서비스, 멈출 수가 없고 초기화할 수 없는 서비스 운영을 하면서 기능이 추가되는 상황에서 많이 사용되고 한번의 배포 주기(보통 2~4주)를 Sprint라고 표현합니다.
waterfall 개발방법론에서는 WBS라는 문서를 통해 일정을 중심으로 관리했다고 한다면 Agile에서는 백로그를 통해 task 중심으로 관리를 하게 됩니다.

이번 스프린트의 요구사항 
-- 1. ToDolist의 할일 삭제 기능 

중간 피드백(고객의 요구사항이나 회의)로 인한 우선되어야할 Task 추가 
-- 할일 삭제 기능보다 우선적으로 할 일 수정 기능이 이번 주기에서 꼭 구현되어야함 

스프린트 종료단계 구현 및 추가된 기능들
-- 1. 할 일 수정 기능 --
-- 2. 할 일 삭제 기능-- 

장점
1. 요구 사항 변경이나 고객의 피드백에 바로바로 반응하고 대처할 수 있다.
2. 지속적인 피드백으로 고객이 원하는 제품을 얻고 만족할 가능성이 높아진다.
3. 강력한 팀워크
=> 주로 소규모 팀 단위로 진행되기 때문에 시너지 예상
4. 짧은 주기로 테스팅을 하기 때문에 기술 부채가 쌓일 가능성이 적음

단점
1. 문서보다는 코드를 통해 진행된다.
=> 체계화된 문서가 적을 수 있다는 단점이 존재
2. 처음 변하지 말아야할 제품의 가치, 방향을 잘 정하지 못하면 아예 다른 결과물이 될 수 있음
3. 계획의 불확실성

결론

초기에 확정된 일을 그대로 한다면 Waterfall이 나을 수 있지만 초기부터 동작되는 소프트웨어를 만들어 시장에 적용/학습/개선하기 위해서는 Agile방식이 더 낫습니다.

마지막으로 Agile의 12가지 원칙을 보면서 마무리 짓겟습니다.

  1. 초기부터 지속적으로 고객 만족
  2. 요구사항 변경 수용
  3. 짧은 배포 간격
  4. 기획자/현업과 개발자는 함께 일하기
  5. 동기부여된 팀원들로 프로젝트팀 만들기
  6. 얼굴보고 대화하기
  7. 동작되는 소프트웨어로 진도 측정
  8. 지속 가능한 개발 속도 유지
  9. 좋은 기술, 설계에 관심
  10. 단순성
  11. 자기 조직화 팀
  12. 정기적으로 효율성 제고

참고 영상들
https://www.youtube.com/watch?v=4zlSzEX9irM&t=265s
https://medium.com/hgmin/agile-principles-%EC%95%A0%EC%9E%90%EC%9D%BC-12%EA%B0%80%EC%A7%80-%EC%9B%90%EC%B9%99-d3f386bd9839
https://www.youtube.com/watch?v=pdZNjNTyr8Q&t=95s
https://www.youtube.com/watch?v=3y5rCRys4t0

profile
프론트엔드 개발자의 TIL

0개의 댓글