[개요]
최근 부트캠프에서 프로젝트를 시작하면서 굉장히 바빴다.
실력이 부족한 탓인지 아니면 내가 꼼꼼한 것인지는 모르겠지만, 예상보다 개발 속도가 잘 안 붙어서 시간을 많이 투자했었다.
그러다 보니 약간의 좌절감에 빠져 블로그를 등한시 했는데 이번에 나의 부족함을 깨닫고 다시 차근차근 작성해보려고 한다.
아무튼! 오늘은 소프트웨어 개발 수명 주기 - Software Development Life Cycle (이하 SDLC)에 대해 공부하고 포스팅하려고 한다.
SDLC를 작성하는 이유는 오늘 팀 프로젝트를 처음 시작했고, 이 과정에서 아키텍쳐나 개발 모델은 어떻게 설정할 것인지 요구사항 명세서 작성이라던가 모르는 것이 천지였지만, 그 중에서 그나마 익숙하고 자주 들어본 방법론의 기본 구조인 SDLC를 공부하고 해당 주기를 기반으로 구성되는 모델이 어느것이 있는지 공부하려고 한다.
[SDLC]
사실 방법론이나 생명주기 모델을 논하기 전에 SDLC가 뭔지부터 알아야 이해할 수 있을 것 같았다.
정확한 정의를 찾기 위해 위키피디아에서 검색한 결과, 아래와 같이 정의를 찾을 수 있었다.
시스템 엔지니어링, 정보 시스템 또는 소프트웨어 공학에서 정보 시스템을 계획, 개발, 시험, 채용하는 과정을 뜻하는 용어
간단하게 얘기하자면, 소프트웨어의 개발이 어떻게 이루어지는지에 대한 과정이라고 할 수 있다.
단계별로 요구사항 분석 -> 설계 -> 개발 -> 테스트 -> 운영 단계로 나뉘게 된다.
SDLC의 목적은 결국 고품질의 소프트웨어를 만들어 고객에게 높은 만족도를 주기 위해서 고안된 것이라고 할 수 있다.
그도 그럴것이 이러한 체계를 무시하고 멋대로 개발하여 나온 결과물과 체계를 철저하게 지켜 제작한 결과물은 아마 같은 업계에서는 누가 봐도 알 수 있지 않을까 생각이 든다. (한 개발자에게 내가 만든 결과물과 경력있는 개발자의 결과물을 보여줬을 때, 당연히 후자를 선택하지 않을까...?)
해당 체계의 구체적인 프로세스를 살펴보자면
1. 요구사항 분석
- 다양한 이해관계자의 요구사항을 고려하여 새로운 제품이나 변경될 제품에 부합하는 요구와 조건을 결정하는 단계
- 예) 기능 / 비기능 요구사항
2. 설계
- 시스템 요구사항 단계에서 정의한 기능을 실제 수행할 수 있도록 수행 방법을 논리적으로 결정하는 단계
- 예) 시스템 구조 설계, 프로그램 설계, 사용자 인터페이스 설계 등
3. 구현
- 설계 단계에서 논리적으로 결정한 문제 해결 방법을 프로그래밍 언어를 사용하여 실제 프로그램을 작성하는 단계
- 예) 인터페이스 개발, 자료 구조 개발, 오류 처리 등
4. 테스트
- 시스템이 정해진 요구를 만족하는지, 예상과 실제 결과가 어떤 차이를 보이는지 검사하고 평가하는 단계
- 예) 단위 테스트, 통합 테스트, 시스템 테스트 등
5. 유지보수
- 시스템이 인수되고 설치된 후 일어나는 모든 활동
- 예) 예방, 완전, 교정, 적응 유지보수
정도가 있겠다.
해당 부분은 다른 포스팅에서도 찾아볼 수 있는 것들이라 간단하게만 정리하고 넘어가려고 한다.
이러한 생명 주기를 바탕으로 문제의 유형이나 개발 방법에 따라 어떤 특정한 생명 주기 모델을 선택하여 사용하게 되는데 모델은 보통 Waterfall, Prototype, Spiral, Iterative이 있다.
1. Waterfall Model
소프트웨어 개발 시 단계를 확실하게 마무리 지은 뒤 다음 단계로 넘어가는 모델
가장 오래된 모델이며, 선형 순차적 모델(고전적 생명주기 모델이라고도 함)이다.
단계별로 정의와 산출물이 명확하지만 요구사항의 변경이 어렵다.
2. Prototype Model
고객이 요구한 주요 기능을 프로토타입으로 구현하여, 고객의 피드백을 반영한 뒤 소프트웨어를 만들어나가는 모델
프로토타입이 구현 단계에서 골격의 역할을 한다.
3. Spiral Model
시스템 개발 시 위험을 최소화하기 위해 점진적으로 완벽한 시스템을 개발하는 모델
절차로는 (1) 계획 및 정의 -> (2) 위험 분석 -> (3) 개발 -> (4) 고객 평가 가 있고 해당 절차를 지속적으로 반복한다.
4. Iterative Model
개발을 여러 단계로 나누어 각 단계를 반복하여 숙련된 개발을 수행하는 모델(Agile Model 이라고도 부른다.)
반복을 통해 개선 사항 및 변경에 신속하고 유연하게 대응할 수 있다는 장점이 있다.
[마치며]
지금 하고 있는 팀 프로젝트를 생각해보면서 어떤 모델로 팀 프로젝트를 제작하면 좋을까? 생각해보았다.
근데 뭔가 짬뽕이 된 듯한 느낌이긴 하다.
아이디어톤때 디자인 적으로 프로토타입을 만들었으니 프로토타입 모델을 사용하는 것인가? 아니면 디자인적인 프로토타입은 프로토타입 모델이라고 할 수는 없나? 하는 생각이 들다가도 지금 요구사항 명세서를 작성하는 것을 넘어 다음 단계로 설계를 하고 개발을 진행할텐데 그럼 워터폴 모델을 사용하는 건가? 싶기도 하다.
내 생각엔 아이디어톤을 통한 프로토타입을 디자인함으로써 프로토타입 모델을 기반으로 워터폴 모델을 사용한 것이라고 생각이 드는데 정확한 정답을 위해 멘토님께 질문을 드려야겠다.
'✏️ > TIL' 카테고리의 다른 글
[혼자 공부하는 컴퓨터 구조 + 운영체제] 3 ~ 4강 정리 (0) | 2024.06.04 |
---|---|
[혼자 공부하는 컴퓨터 구조 + 운영체제] 1 ~ 2강 정리 (0) | 2024.06.01 |
[Today I Learned] 2023.06.19 (0) | 2023.06.20 |
[Today I Learned] 2023.06.18 (0) | 2023.06.19 |
[Today I Learned] 2023.06.17 (0) | 2023.06.18 |