Introduction to software development models - 소프트웨어 개발 모델에 대한 기초적인 이해
hyperskill - Introduction to software development models 영어 원문
우리는 소프트웨어를 개발 할 때, 다양한 것들에 초점을 맞춰야 합니다.
코드를 작성하는 것이 유일 한 작업은 아니지만, 그래도 여전히 매우 중요합니다.
기본적으로, 밑의 질문들에 대답해야 합니다 :
- 당신은 무엇을 하고 있으며,
- 당신은 무엇을 어떻게 할 것이며,
- 당신은 어떠한 방법론을 사용 할 것이며,
- 이러한 방법론을 왜 사용하는 것인가?
이러한 모든 관심사를 고려하며, 효과적으로 workflow를 조직하려면,
당신은 적합한, 알맞는 소프트웨어 개발 모델을 선택해야 합니다.
Software development models - 소프트웨어 개발 모델
이런 복잡한 프로세스를 조종하기 위해서는, 간단한 To-Do List 보다는 더 복잡한 것이 요구됩니다.
그러므로, 당신은 분명히 개발 모델이 필요합니다.
이러한 개발 모델은 당신의 올바른 단계를 설명 할 뿐 아니라,
당신이 사용하는 방법론과 미래의 제품의 전체적인 구조를 자세히 설명합니다.
위의 설명이 약간 이상해서 구글 번역을 돌려보니 어느정도 정확히 나옵니다 :
이는 올바른 순서의 단계뿐만 아니라 사용하는 방법과 향후 제품의 전체 구조를 자세히 설명합니다.
이러한 모델들이 많이 존재합니다.
일반적으로, 이러한 모델들은 SDLC 라고 부르는데, Software Development Life Cycle 을 지칭합니다.
아래에서, 우리는 가장 유명한 모델들을 다룰 것인데,
이러한 모델들의 본질을 보고, 그들의 핵심 기능들을 비교 할 겁니다.
모든 SDLC 모델들은 Workflow 조직도에 의존하여 여러 그룹으로 분할 할 수 있습니다.
이 뿐만 아니라, 팀 메이트와의 관계 유형, 고객과의 커뮤니케이션에도 의존 할 수 있습니다.
workflow는 linear(선형적) 혹은 iterative(반복적) 입니다.
즉, 당신은 제품의 작업을 단계별로 수행하거나, 이전 단계로 돌아와서 바꿀 수도 있다는 겁니다.
관계지향과 커뮤니케이션을 위해서,
당신은 고객으로부터 임무를 가져오거나,
그리고 나서 간단히 매 단계마다 고객에게 당신이 가진 것을 보여주거나, 상담 할 수도 있습니다.
이제 특정한 모델을 관찰하며, 그들의 장점과 단점, 그리고 적용법을 봅시다.
Waterfall - 폭포수 모델
이 모델의 프로세스는 모든 개발 단계를 통틀어 폭포수처럼 떨어지는 선형 모드로 움직입니다.
- analysis 분석
- design 디자인
- coding 코딩
- testing 테스팅
- deployment 배포
waterfall (폭포수 모델) 은 돌아갈 수 없다는 걸 의미합니다.
따라서, 당신은 어떠한 변경사항도 만들 수 없습니다.
더 나아가, 당신은 이전의 단계가 완료되기 전 까지는 다음 단계에서 시작 할 수 없습니다.
---
title : Waterfall model
---
flowchart
Analysis --> Design
Design --> Coding
Coding --> Testing
Testing --> Deployment
최종 결과는 개발의 마지막에서만 볼 수 있으며, 확인 할 수 있습니다.
테스트를 종종 서두르게 되며, 에러를 고치기 위해 비용이 든다는 것을 의미합니다.
하지만, 이 모델은 몇 가지 장점을 가지고 있습니다.
waterfall 은 프로젝트의 비용을 예상할 수 있으며, 정밀한 데드라인을 도입 할 수 있게 해 줍니다.
이 모델은 짧은 데드라인과 특정한 업무를 가진 작은 프로젝트에 어울리며,
이러한 임무들이 완료 될 때 까지 돈이 얼마나 들던지 상관하지 않는 경우에 어울립니다.
waterfall model(폭포수 모델) 은 개별적인 기능들이 완료 되었을 때가 아니라,
모든 기능이 가능 한 빨리 완료되었을 때 완료된 제품을 클라이언트가 받는다고 가정합니다.
이는 클라이언트가 무언가를 좋아하지 않거나, 몇 가지 변경사항을 만들기를 원 할 때 문제가 될 수 있습니다.
이러한 문제는 iterative model 에서 해결되었으며,
이 모델에서 각각의 기능은 완료된 직후 증명 할 수 있습니다.
Iterative model - 반복 모델
현실에서, 에러는 개발 도중에 언제나 떠오릅니다.
그리고 모든 것이 박살나기 전에 가능한 빨리 고치는 것이 낫습니다.
Iterative model 은 문제를 확인 할 수 있게 해 주며,
따라서 그 시간에 실수를 고칠 수 있습니다.
게다가, 만약 당신의 고객이 업무를 수정하기로 결정했다면, 몇 가지 변경사항을 만들어야 할 겁니다.
또한, 외부 환경과 시장 조건은 바뀔 것이며,
제품의 원래 버전은 더 이상 관련되지 않고, 유용하지 않을 겁니다.
---
title : Iterating model
---
flowchart
Analysis --> Design
Design --> Coding
Coding --> Testing
Testing --> Deployment
Deployment --> Analysis
Testing --> Analysis
Coding --> Analysis
Design --> Analysis
여기 있는 장점 중에서 우리는 고객이 높은 확률로 원하는 것을 골라 낼 수 있다는 것이 있습니다.
그리고 일반적으로,
변경사항이 어떤 단계에서도 만들어 질 수 있기 때문에, 이러한 개발은 매우 유연합니다.
하지만, 수정하는데 얼마나 오래 걸릴지 알 수 없으며,
이러한 업무에 할당하는 데 얼마나 많은 돈이 들어 갈 지 알 수 없습니다.
이러한 것은 이 모델의 단점으로 고려 될 수 있습니다.
이 SDLC 모델은 말 그대로 고객의 참여를 수반합니다.
왜냐면 작은 변경사항이 개발 프로세스 도중에 필요 할 가능성이 있기 때문입니다.
하지만, 인간의 상호작용은 여전히 복잡한 프로세스입니다.
이것이 의미하는 바는 요구사항은 자세히 묘사되어야 하며,
생산성 향상을 위해, 이러한 상호작용에 대한 규칙이 반드시 세워져야 한다는 의미입니다.
이를 위해서, Agile Group (애자일 그룹) 모델이 발명되었습니다.
Agile group - 애자일 그룹
지금까지, 우리는 에러를 염두 해 두고 있고,
비용 또한 고려하며, 알고리즘에 따라 행동하는 것이 중요하다는 것을 언급했습니다.
하지만, 우리는 가장 중요한 것을 잊었습니다 :
이 모든것을 수행하는 사람들..
Agile (애자일) 은 이러한 것을 고치기 위해 발명되었습니다.
애자일은 개발 프로세스를 용이하게 하거나, 인간이라는 요인을 염두에 두는 규칙의 집합 혹은 원칙입니다.
모든 원칙은 애자일 선언서에 작성되어 있습니다.
우리는 이를 여러 토픽에서 더 자세히 분석 할 겁니다.
지금으로서, 개발자들은 개발보다 더 중요하다는 것을 아는 것이 중요합니다.
그리고 만약 개발자들이 그들이 하는 것을 동의하지 않고, 업무 방식에 동의하지 않는다면,
좋은 결과가 나오지 않을 겁니다.
또한 고객의 요구사항과 기분을 따르는 것도 중요합니다.
결국, 만약 고객이 이를 만족하지 않는다면, 결과는 다시 만족스럽지 않을 겁니다.
따라서, 애자일은 팀과 클라이언트와 더 가까이 협동하여 작업한다는 것을 의미합니다.
이러한 각각의 반복 후에는, 이해관계자들은 개발 프로그레스를 리뷰 할 것이며,
투자에 있어 투자금을 향상하기 위해 미래 iteration에 대한 업무를 재 정렬하며,
유저의 필요사항과 비즈니스 목표를 정렬 할 겁니다.
이 모델은 말 그대로 유저의 요구가 지속적으로 변화하는 거대한 프로젝트에서 사용됩니다.
Conclusion - 결론
따라서, 우리가 개발 모델들이 필요한 이유에 대해서 간단히 다뤄봤습니다.
이것들이 무엇이며, 이것들의 장점과 단점에 대해서 다뤘습니다.
지금 우리는 어떤 특정한 유형에서 어떠한 모델이 유용한지를 이해했습니다.
더 나아가서, 우리는 특정한 예제들과 함께 이 지식을 더 깊게 들어 갈 겁니다.
words to remember
though : 그렇지만, 그래도, 지만, 이지만, 비록일지라도
vital : 필수적인, 치명적인, 극히 중대한, 살아 있는
complicate : 복잡하다, 악화시키다
definitely : 분명히
consult : 찾다, 의견을 묻다, 상담하다
rush : 서두르다, 갑자기 나타나다, 돌진하다, 쇄도하는
precise : 정밀한, 정확한
amend : 개정하다, 고치다, 수정하다, 고쳐지다
single out : 골라내다, 발탁하다
entails : 수반한다, 들게 하다
involvement : 참여
So far : 지금까지, 여태까지, 아직까지
have noted : 언급했습니다
manifesto : 선언서
stakeholder : 이해관계자