설계와 아키텍처에는 어떤 차이가 있는가?

아키텍처 : 저수준의 세부사황과는 분리된 고수준의 무언가를 가리킬 때 흔히 사용되는 용어

설계 : 저수준의 구조 또는 결정사항 등을 의미할 때 사용

하지만 아키텍트가 실제로 하는 일을 살펴보면 이러한 구분은 무의미하다.

예시)

새로운 집을 설계하는 아키텍트가 있다고 가정하자. 이 집은 아키텍처를 가지고 있는가? 당연히 있다. 그렇다면 그 집의 아키텍처는 무엇인가? 아마 집의 형태, 외관, 입면도, 공간이나 방의 배치 등이 여기에 포함된다. 하지만 아키텍트가 만든 도면을 살펴보면 무수히 많은 저수준의 세부사항도 확인할 수 있다.

콘센트, 전등 스위치, 전등이 모두 어디에 위치하는지를 도면에서 알 수 있다. 보일러는 어디에 놓이고, 온수기와 배출 펌픠의 크기와 위치는 어떻게 되는지 역시 볼 수 있다. 벽, 지붕 그리고 기초 공사가 어떻게 진행될지도 상세히 확인할 수 있다.

다시 말해, 모든 고수준의 결정사항을 지탱하는 모든 세부사항을 자세하게 확인할 수 있다. 이러한 저수준의 세부사항과 고수준의 결정사항은 집의 전체 설계의 구성요소가 된다.

소프트 웨어 설계도 마찬가지다. 저수준의 세부사항과 고수준의 구조는 모두 소프트웨어 전체 설계의 구성요소다. 이 둘은 단절 없이 이어진 직물과 같으며, 이를 통해 대상 시스템의 구조를 정의한다. 개별로는 존재할 수 없고, 실제로 이 둘을 구분 짓는 경계는 뚜렷하지 않다. 고수준에서 저수준으로 향하는 의사결정의 연속성만이 있을 뿐이다.

목표

이러한 의사결정의 목표는?

좋은 소프트웨어 설계의 목표?

엉망친창의 코드는 생산성을 0을 향해 수렴하게 만든다.

‘지저분한 코드를 작성하면 단기간에는 빠르게 갈 수 있고, 장기적으로 볼 때만 생산성이 낮아진다’는 잘못된 견해이다.

TDD를 적용하면 10% 상승