Clean-Architecutre #1부 - 아키텍처가 뭐야? 왜 중요한거야?

Clean-Architecutre #1부 - 아키텍처가 뭐야? 왜 중요한거야?

설계와 아키텍처 소개

01. 설계와 아키텍쳐란?

  • 아키텍쳐 : 저수준의 세부사항과는 분리된 고수준의 무언가를 지칭
  • 설계 : 저수준의 구조 또는 결정사항을 의미

저수준의 세부사항 + 고수준의 구조가 합쳐져 소프트웨어 전체 설계가 만들어진다.

좋은 소프트웨어 설계의 목표는 필요한 시스템을 만들고 유지보수의 비용이 최소화되는 것에 있다.

🌟 좋지 않은 설계의 징조

  • 직원 수가 늘어나는 것에 비해 제품의 변경이 어려워진다.
  • 코드 라인당 비용만 극적으로 증가하였다.
  • 새로운 기능을 추가하는 데 많은 시간이 소요된다.

개발자가 늘고 일은 열심히 하지만, 코드 라인별 유지보수 비용이 증가한다. 이는 코드에 대한 생산성은 떨어지고 기능 추가, 변경에 대해 어려워진다. 곧 시장에 기민하게 대응할 수 없어 전혀 Soft 하지 않다.

좋은 설계와 TDD 등의 방법으로 코드를 깔끔하게 유지하면 생산성이 높아진다.
빨리 가는 유일한 방법은 제대로 가는 것이다.


02. 두 가지 가치에 대한 이야기

개발자는 소프트웨어에서 두가지 가치인 행위구조를 밸런스 있게 추구해야한다.

🌟 행위

  • 프로그래머는 수익을 창출하거나 비용을 절약하도록 만들기 위해 고용된다.
  • 이해관계자의 요구사항을 코드로 구현하고 버그를 수정하는 것이 프로그래머의 전부라고 생각하는 사람이 많다.
  • 코드를 짜고 수정하는 행위는 중요하지만, 구조를 고려하지 않으면 코드를 수정하는 것이 어려워진다.

🌟 구조

  • 소프트웨어는 소프트 하기 때문에 변경이 쉬워야한다.
  • 변경이 쉬우려면 구조가 중요하다.
  • 시스템 아키텍쳐는 시스템의 형태와 요구사항의 형태가 서로 맞지 않을 때 변경사항의 범위와 형태를 결정한다.

-> 소프트웨어의 좋은 구조의 가치를 높이면 변경이 쉬워지고, 변경이 쉬워지면 생산성이 높아진다. 기능의 동작과 더불어 중요하게 생각해야하는 가치이다.

🌟 아이젠하워 매트릭스

드와이트 D. 아이젠하워 미국 대통령이 고안한 업무 우선순위 매트릭스이다.

내겐 두 가지 유형의 문제가 있습니다. 하나는 긴급하며, 다른 하나는 중요합니다.
긴급한 문제는 중요하지 않으며, 중요한 문제는 절대 긴급하지 않습니다.
드와이트 D. 아이젠하워

  1. 긴급하고 중요한
  2. 긴급하지는 않지만 중요한
  3. 긴급하지만 중요하지 않은
  4. 긴급하지도 중요하지도 않은

업무에 있어서 중요한 두가지 가치로 우선순위를 매길 수 있다.
기능적 요구사항인 행위의 가치는 긴급하고, 아키텍쳐인 구조의 가치는 중요하다.
중요한 구조의 가치가 상위 2개에 해당한다. 아키텍쳐의 중요성은 이해관계자가 파악하기 어렵기 때문에, 개발자가 이 사실을 이해하고 이를 위해 투쟁해야한다.
보통의 상황에서 3순위인 긴급한 개발상황에서 아키텍쳐의 중요성이 고려되지 않은 상황이 1순위로 오인하기 쉽다.
그러나 구조의 중요성이 후순위가 되면 시스템 개발 비용이 더 많이 들고, 변경하기 어려워진다.