All'alba vincerò

At dawn, I will win!

기타

애자일(Agile) 방법론: 짧은 단위의 계획을 통해 개발·수정을 반복하는 개발 방식

나디아 Nadia 2024. 12. 30. 21:23

소프트웨어 개발 방법론

: 소프트웨어 개발을 효과적으로 진행하기 위한 계획, 관리, 실행 방법을 정의하는 접근 방식

 

 

1. 구조적 방법론 (Structured Development)

: 시스템을 기능별로 나누어 개발하고, 이를 통합하는 방법론

  • 분할과 정복 접근 방식을 사용한다.
  • 프로세스 중심의 하향식 방법론으로, Nassi-Shneiderman 차트를 사용하여 구조적 프로그래밍을 표현한다.
  • 복잡한 조건을 시각적으로 명확히 식별할 수 있어 논리의 기술에 중점을 둔다.

 

 

2. 정보공학 방법론 (Information Engineering Development)

: 대형 정보 시스템을 체계적으로 개발하는 방법론

  • 관리 절차와 작업 기법을 체계화하여 개발 주기를 활용한다.
  • 대형 프로젝트를 수행하는 데 유용하며, 시스템의 개발 및 관리가 체계적이다.

 

 

3. 객체지향 방법론 (Object-Oriented Development)

: 시스템을 '객체'라는 기본 단위로 분석하고 설계하는 방법론

  • 객체, 클래스, 메시지를 사용하여 시스템을 구성하며, 복잡한 현실 세계를 사람이 이해하는 방식으로 모델링한다.
  • 높은 재사용성과 모듈화가 가능하며, 유지보수가 용이하다.

 

 

4. 컴포넌트 기반 방법론 (CBD; Component Based Development)

: 기존 소프트웨어 컴포넌트를 재사용하여 새로운 응용 프로그램을 개발하는 방법론

  • 개발 기간 단축과 생산성 향상을 목표로 하며, 소프트웨어 재사용이 가능하다.
  • 새로운 기능 추가가 쉬워 확장성 있는 개발이 가능하다.

 

 

5. 애자일 방법론 (Agile Development)

: 절차보다는 사람 중심으로, 변화에 유연하고 신속하게 적응하며 시스템을 개발하는 경량 개발 방법론

  • 반복적인 개발 주기와 피드백을 통해 빠르게 고객의 요구 사항에 대응한다.
  • 효율적이고, 변화에 빠르게 적응할 수 있는 특성이 있다.

 

 

6. 제품 계열 방법론 (Product Line Development)

: 특정 제품군에 적용할 공통 기능을 정의하여 개발하는 방법론

  • 임베디드 소프트웨어 개발에 적합하며, 영역 공학과 응용 공학으로 나뉜다.
    • 영역 공학: 영역 분석, 설계 및 핵심 자산 구현
    • 응용 공학: 제품 요구 분석, 설계 및 제품 구현
  • 제품군 간 공통된 기능을 재사용하여 개발 효율성을 높인다.

 


애자일(Agile; 기민한) 방법론

: 작업 계획을 짧은 단위로 세운 뒤 제품 개발 & 수정 사이클을 반복함으로써 유연하고도 신속하게 개발하는 방법론

  • 주문 ➪ 디자인 ➪ 기능구현 ➪ 테스팅 ➪ 배포" x ∞
  • 반복적이고 점진적인 개발을 통해 고객의 요구사항을 빠르게 반영하고, 변화에 유연하게 대응하는 것을 목표로 한다.
  • 개발 과정을 여러 번의 작은 반복(스프린트)으로 나누어, 매 반복마다 기능을 추가하거나 개선한다.
  • 요구사항이나 계획이 변경될 수 있음을 인정하고, 이를 적시에 반영한다.
  • 각 반복마다 결과물을 만들어 고객에게 제공하고, 그에 대한 피드백을 받아 다음 작업에 반영한다.

 

 

 

애자일 방법론의 주요 요소

 

1. 스크럼 (Scrum)

: 작은 팀 단위로 작업을 나누고, 정해진 시간 동안 완성 가능한 작업 목표를 반복적으로 수행하는 방식

  • 팀 협업을 중시하며, 일정한 주기(스프린트)로 작업을 계획하고 평가한다.
  • 매일 정기적인 회의를 통해 진행 상황을 점검한다.
  • 핵심 구성 요소
    • 스프린트(Sprint): 짧은 개발 주기(보통 1~4주)
    • 스프린트 계획 회의(Sprint Planning): 목표와 작업을 계획
    • 데일리 스탠드업 미팅(Daily Standup): 매일 진행 상황 점검 및 장애 요인 논의
    • 스프린트 리뷰(Sprint Review): 결과물을 검토하고 피드백 수집
    • 스프린트 회고(Sprint Retrospective): 개선점 논의 및 다음 스프린트 준비

 

 

2. 스프린트 (Sprint)

: 스크럼에서 사용하는 짧은 개발 주기, 일정 기간 동안 구체적인 작업 목표를 달성하는 단위

  • 일정 기간 동안 작업 목표가 고정된다.
  • 작업 완료 후 피드백을 반영해 다음 스프린트를 개선한다.

 

 

3. 칸반 (Kanban)

: 작업의 흐름과 진행 상태를 시각적으로 관리하는 방법론

  • 작업 항목을 보드에 시각적으로 표시(To Do, In Progress, Done)
  • 작업의 병목 현상을 파악하고, 효율적으로 관리한다.
  • 대기 중인 작업을 최소화 한다.(WIP 제한)

 

 

4. XP (Extreme Programming)

: 소프트웨어 품질을 극대화하고, 변화에 유연하게 대응하기 위한 개발 실천 중심의 방법론

  • 페어 프로그래밍: 두 명의 개발자가 하나의 코드 작업을 함께 수행
  • 테스트 중심 개발(TDD): 코드를 작성하기 전에 테스트를 먼저 설계
  • 짧은 반복 주기: 작은 단위의 작업을 빠르게 완료
  • 계속되는 고객 피드백: 고객과 밀접한 협업을 통해 요구 사항 반영

 

 

5. 번다운 차트 (Burndown Chart)

: 스프린트 기간 동안 남은 작업량을 시각적으로 보여주는 그래프

  • 작업 진척 상황을 한 눈에 파악할 수 있다.
  • 목표 달성 가능성을 예측하고, 일정 관리를 돕는다.

 

 

6. 제품 백로그 (Product Backlog)

: 프로젝트에서 구현할 모든 작업 항목(기능, 수정 사항 등)의 목록

  • 우선순위가 높은 작업부터 처리한다.
  • 지속적으로 갱신 및 개선한다.

 

 

7. 사용자 스토리 (User Story)

: 사용자의 관점에서 작성된 간단한 요구 사항 기술 방식

  • "사용자로서, 나는 [무엇을 하고 싶다] 그래서 [어떤 가치를 얻는다]." 식으로 기술한다.
    • ex) "사용자로서, 나는 이메일로 알림을 받고 싶다. 그래서 중요한 정보를 놓치지 않는다."

 


애자일 방법론의 등장 배경

  • 애자일 방법론은 기존의 워터폴(Waterfall) 방식의 단점을 보완하기 위해 등장했다.

 

워터폴(Waterfall; 폭포수) 방법론

: 개발 과정에서 단계를 순차적으로 진행하는 전통적인 개발 방법론

  • 주문 ➪ 디자인 ➪ 기능구현 ➪ 테스팅 ➪ 배포
  • 각 단계가 완료된 후에야 다음 단계로 넘어갈 수 있기 때문에 시간과 비용의 낭비가 증가한다는 단점이 있다.

 

 

 

애자일 방법론 VS 워터폴 방법론

구분
애자일(Agile) 방법론
워터폴 방법론
요구사항관리
지속적인 요구사항 개발 및 변경수용
초기 요구사항 수집 및 엄격한 변경관리
계획 수립
두 단계 계획(찾은 계획 수립 & 갱신) 경험 기반 프로세스
상세한 계획 수립(Up-Front) 계획 기반 프로세스
설계
적시(Just-in-time)설계
상세한 사전(Up-Front) 설계
문서화
경량 프로세스 및 문서화보다 코드를 강조
중량 프로세스 및 상세한 문서화 강조
역할
전체 팀워크 중시
엄격한 역할 분리

 


 

 

💡 '애자일(Agile) 방법론' 이란? - feat. TDD

개발에 대한 공부를 시작하면서 종종 보였던 단어, 'Agile' 뭔지는 모르겠지만 '애자일 방식으로..' '애자일 조직..' '애자일에 기반하여....''애자일...''애ㅈ...' 아무튼 엄청 많이 언급되는 단어였다

velog.io

 

 

애자일과 워터폴 방법론 비교 | 정의, 차이, 장단점, 적합한 조직 - 코드스테이츠 공식 블로그

애자일 방법론의 출발은 소프트웨어 개발 방식이었지만 이제는 제품 개발을 넘어 하나의 일하는 방식, 워크플로우로 자리 잡았습니다. 대표적인 프로덕트 개발 방법론인 애자일 방법론을 소개

www.codestates.com

 

 

 

애자일 소프트웨어 개발 선언

애자일 소프트웨어 개발 선언 우리는 소프트웨어를 개발하고, 또 다른 사람의 개발을 도와주면서 소프트웨어 개발의 더 나은 방법들을 찾아가고 있다. 이 작업을 통해 우리는 다음을 가치 있게

agilemanifesto.org