개발하는 방식에는 어떤 것이 있을까?
이때 내가 떠오른 단어들은 다음과 같다
개발 방법론
??? 프로그래밍
디자인 패턴
아키텍쳐 등
위 4가지 개념들이 각각 뭔지 설명할 수 있는지?
어 그렇구나 하고 넘겼던 것들이 막상 이렇게 한꺼번에 오니, 좀 멈칫하게 되었다
그래서 이번에는 개발 방법론에 대해 이야기하기 전에 우선 위 개념들부터 좀 정리를 해야할 것 같다
여기서는 간단하게 구분할 수 있을 정도만 알아보고, 뒤에서 자세히 알아보도록 하자!
소프트웨어 개발 전 과정중 개발 단계를 어떻게 진행할 것인가를 말한다
아키텍쳐는 소프트웨어 관점에서 설계에 대한 적절한 틀(구조)을 제안하는 것이라면,
개발 방법론이란 프로젝트 관점에서 개발 단계는 어떻게 진행되어야 하는지 제안하는 것이다
애자일 방법론, 객체지향 방법론, DDD 등
다른 것들은 방법이나 틀을 제안하는 것인 반면, 단순히 코드를 작성하는 방식을 말한다
프로그램이 흘러가는 순서대로 작성하는 절차지향 방식과, 객체를 중심으로 작성하는 객체지향 방식이 있다
절차지향, OOP, FP, 선언형 등
이것도 역시 많이 들어봤을 것으로, GoF 디자인패턴으로 유명하다
코드를 작성하면서 생기는 문제에 대해 적절한 해결책을 제시하는 것으로, 추상 팩토리 패턴, 빌더 패턴 등이 이에 속한다
추상 팩토리 패턴, 빌더 패턴, 싱글톤 패턴 등
4. 아키텍쳐
소프트웨어 구조 또는 소프트웨어 아키텍처(software architecture)는 소프트웨어의 구성요소들 사이에서 유기적 관계를 표현하고 소프트웨어의 설계와 업그레이드를 통제하는 지침과 원칙이다.
by Wikipedia
소프트웨어 아키텍쳐 혹은 아키텍쳐 패턴이라고도 한다
디자인 패턴과는 달리 좀 더 넓은 범위에서 즉, 소프트웨어 자체가 좀 더 효율적으로 돌아갈 수 있도록 하는 구조를 제시한다고 생각하면 된다
우리가 잘 알고있는 MVC, 3-Tier, MSA, 등이 여기에 속한다
MVC, 마스터-슬레이브, MSA, DDD 등
이 글을 읽으면서 물음표를 띄우면서 봤을 수도 있다
예를 들면
왜 DDD가 개발 방법론이지? 소프트웨어 아키텍쳐가 아닌가?
객체지향이 개발 방법론 이었어?
...
해당 부분은 우리가 개발에만 초점을 두고 보았기 때문이다
프로젝트 전 과정을 보면 실제 코드 작성 이전에 반드시 선행되야 하는 단계들이 매우 많다
(요구사항을 분석한다던지 등)
이런 전 과정에서 객체지향적으로 생각하고 진행을 한다면, 그것이 객체지향 방법론이다
마찬가지로 도메인 중심으로 생각한다면, DDD 방법론인 것이다
그럼 결론이 무엇인고 하니,
요는 너무 편향된 생각을 하지 말자는 것!!
본인도 정리를 하면서 저런 질문이 떠올랐는데,
이번을 계기로 너무 한쪽으로만 편향되지 않고, 소프트웨어의 전 과정을 한번 생각해 보게 되었다