경희대학교 이성원 교수님의 '오픈소스 SW 개발 방법 및 도구 수업'을 기반으로 본인이 이해한 바로 새롭게 정리한 글입니다.
Software 개발의 패러다임 변화
- 과거 : 소프트웨어
- 마이크로소프트 윈도우 / 오피스
- 한컴 한글 워드 프로세서
- 어도브 포토샵
- 패키징 게임들
- 이러한 소프트웨어는 매우 장기간의 걸친 프로젝트이다.
- 거대한 규모의 인력과 자본을 필요로 한다.
- 예상된 마감기한이 존재한다.
- 현재 : 서비스위주
- 구글 & 네이버 검색 서비스
- 무료 게임 (부분 유료화 서비스)
- 다음, 카카오, 라인 메신저 서비스
- 광고 기반 무료 서비스들
- 가능한 빨리 서비스를 출신한다.
- 제한된 인력과 자본을 요구한다. (비교적 소규모)
- 시장의 요구사항들을 만족하는 서비스를 개발한다.
Waterfall process : 아래로 흐르는 개발 과정cess : 아래로 흐르는 개발 과정
Waterfall process의 표식도

1. 요구사항 분석 : 1~6개월
2. 디자인(설계) : 6개월 ~ 3년
3. 개발 : 6년
4. 시험(테스팅)
5. 유지 및 보수
Waterfall process with Gantt chart

해야할일 들을 작성하고, 정해진 시간( 마감 기한 )에 맞게 제대로 진행하고 있는지 일련의 과정을 볼 수 있는 차트표.
Waterfall process의 장점
- 전체 프로젝트의 과정을 문서화와 소스코드를 확인할 수 있다.
- 문제를 쉽게 고칠 수 있고, 문제를 나중에 발견하는 것이 아닌, 조기에 발견할 수 있다.
- 의사소통이 부족하거나 오류가 덜 발생하며, 각 단계들을 간다하게 참고할 수 있다.
- 각 단계별로 성취해야할 목표들을 간단명료하게 확인하고 공유할 수 있다.
- 견고한 구조는 팀의 목표와 스케줄을 관리할 능력을 증가시켜준다.
Waterfall process의 단점
- 전체 프로젝트의 과정이 단계별로 간단하게 이어나가지만, 뒤에 문제가 발생하였을 때 뒷 단계로 돌아가기 쉽지 않다.
- Waterfall 방식에서는 refactoring을 하지 않는다.
- 각 단계별 조건을 완전히 만족하기란 불가능에 가깝다. -> 시장은 빠르게 변하짐만 1번과 같이 개발 도중에 고객의 요구가 변화하더도, 뒷 단계로 돌아가지 못하기 때문에 즉각적인 대응이 하기 어렵다.
- 3번과 같은 즉각적인 대응이 어려우므로, 프로젝트 자체의 시간과 비용이 기하급수적으로 증가하게 된다.
Agile
소프트웨어 개발 및 프로젝트 관리에서 계획에 얽매이지 않고 변화에 민첩하게 대응하며 점진적·반복적으로 결과물을 산출하는 유연한 방법론
Agile이 무엇인가?

- process와 tools보다는 individuals와 interactions을
- comprehensive documentation 보다는 Working software를
- contract negotiation 보다는 Customer collaboration를
- following a plan 보다는 Responding to change를 가치 있게 여긴다.
Agile Manifesto 12 Principles

- 고객 만족
- 변화에 대응
- 자주 보여준다
- 정기적으로 의사소통한다
- 대면으로 의사소통한다
- 업무의 진척도를 측정한다
- 개발 과정을 보여준다
- 좋은 디자인을 공유한다
- 진척도를 측정한다
- 팀 멤버와 협력한다
- 결과를 계속해서 찾아본다
- 반영하고 조정하는 것을 두려워하지 말라
Scrum for Agile
Scrum은 Agile의 정신을 실현하고 소프트웨어 개발에서 업무를 관리하고 중요성을 강조하기 위한 프레임워크이다.
Scrum은 3~9명의 개발자 팀을 위해 고안된 방식으로, 진행도를 추적하고, 매일 15분씩 업무의 상황을 보고하고, 미팅을 가진다.

DevOps (development and operations)
DevOps는 시스템 변화를 확인하고 일반 상품에 적용시키는데 걸리는 시간을 줄이도록 고안된 방식이다.

- DevOps의 주된 특성은 강력한 자동화와 모든 소프트웨어 개발의 단계를 모니터링한다는 것이다.
- DevOps는 더 짧은 개발 사이클, 증가된 빈도, 더 많은 출시 등을 목표로 한다.
DevOps 개발 도구들
