Clean-Architecutre #1부 - 아키텍처가 뭐야? 왜 중요한거야?
설계와 아키텍처 소개
01. 설계와 아키텍쳐란?
- 아키텍쳐 : 저수준의 세부사항과는 분리된 고수준의 무언가를 지칭
- 설계 : 저수준의 구조 또는 결정사항을 의미
저수준의 세부사항 + 고수준의 구조가 합쳐져 소프트웨어 전체 설계가 만들어진다.
좋은 소프트웨어 설계의 목표는 필요한 시스템을 만들고 유지보수의 비용이 최소화되는 것에 있다.
🌟 좋지 않은 설계의 징조
- 직원 수가 늘어나는 것에 비해 제품의 변경이 어려워진다.
- 코드 라인당 비용만 극적으로 증가하였다.
- 새로운 기능을 추가하는 데 많은 시간이 소요된다.
개발자가 늘고 일은 열심히 하지만, 코드 라인별 유지보수 비용이 증가한다. 이는 코드에 대한 생산성은 떨어지고 기능 추가, 변경에 대해 어려워진다. 곧 시장에 기민하게 대응할 수 없어 전혀 Soft
하지 않다.
좋은 설계와 TDD 등의 방법으로 코드를 깔끔하게 유지하면 생산성이 높아진다.
빨리 가는 유일한 방법은 제대로 가는 것이다.
02. 두 가지 가치에 대한 이야기
개발자는 소프트웨어에서 두가지 가치인 행위
와 구조
를 밸런스 있게 추구해야한다.
🌟 행위
- 프로그래머는 수익을 창출하거나 비용을 절약하도록 만들기 위해 고용된다.
- 이해관계자의 요구사항을 코드로 구현하고 버그를 수정하는 것이 프로그래머의 전부라고 생각하는 사람이 많다.
- 코드를 짜고 수정하는
행위
는 중요하지만,구조
를 고려하지 않으면 코드를 수정하는 것이 어려워진다.
🌟 구조
- 소프트웨어는
소프트
하기 때문에 변경이 쉬워야한다. - 변경이 쉬우려면
구조
가 중요하다. - 시스템 아키텍쳐는 시스템의 형태와 요구사항의 형태가 서로 맞지 않을 때 변경사항의 범위와 형태를 결정한다.
-> 소프트웨어의 좋은 구조의 가치를 높이면 변경이 쉬워지고, 변경이 쉬워지면 생산성이 높아진다. 기능의 동작과 더불어 중요하게 생각해야하는 가치이다.
🌟 아이젠하워 매트릭스
드와이트 D. 아이젠하워 미국 대통령이 고안한 업무 우선순위 매트릭스이다.
내겐 두 가지 유형의 문제가 있습니다. 하나는 긴급하며, 다른 하나는 중요합니다.
긴급한 문제는 중요하지 않으며, 중요한 문제는 절대 긴급하지 않습니다.
드와이트 D. 아이젠하워
- 긴급하고 중요한
- 긴급하지는 않지만 중요한
- 긴급하지만 중요하지 않은
- 긴급하지도 중요하지도 않은
업무에 있어서 중요한 두가지 가치로 우선순위를 매길 수 있다.
기능적 요구사항인 행위
의 가치는 긴급하고, 아키텍쳐인 구조
의 가치는 중요하다.
중요한 구조
의 가치가 상위 2개에 해당한다. 아키텍쳐의 중요성은 이해관계자가 파악하기 어렵기 때문에, 개발자가 이 사실을 이해하고 이를 위해 투쟁해야한다.
보통의 상황에서 3순위인 긴급한 개발상황에서 아키텍쳐의 중요성이 고려되지 않은 상황이 1순위로 오인하기 쉽다.
그러나 구조
의 중요성이 후순위가 되면 시스템 개발 비용이 더 많이 들고, 변경하기 어려워진다.