소프트웨어 설계와 아키텍처의 차이
소프트웨어 설계와 아키텍처 둘 사이에 차이는 없다.
- 아키텍처는 저수준 세부사항과는 분리된 고수준의 무언가를 가리킬 때 사용된다.
- 설계는 저수준의 구조 또는 결정사항 등을 의미할 때가 많다.
- 고수준의 구조와 결정사항 및 구조와 저수준의 세부사항 모두 전체 설계의 구성요소로 이를 통해 대상 시스템의 구조를 정의한다.
소프트웨어 설계와 아키텍처의 목표
소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 데 있다.
- 설계 품질의 척도는 고개의 요구를 만족시키는 데 드는 비용으로 볼 수 있다.
- 낮은 유지 비용 발생하도록 설계하는 것이 좋은 설계다.
# 사례 연구
엔지니어링 직원수가 증가한다면 생산성이 정말 높아지는 것인지, 아래 그래프를 통해 확인을 해보자. 그림 1과 그림 2를 비교해 보면 제품 출시별 엔지니어링 직원 수가 증가하는 것이 제품의 생산성의 증가로 볼 수는 없다. (제품의 생산성은 코드의 라인 수를 기준으로 측정)
엔지니어링 직원이 증가함에 따라 제품의 생산성이 좋아져야 하나
- 엔지니어링 직원 수가 많다고 생산성이 높아지는가?
- 아래 사례로 본다면 엔지니어 수 증가가 생산성에 좋은 영향력이 있다고 볼 수는 없다.
엔지니어 수 ⬆️ ≠ 소프트웨어 제품 생산성 ⬆️


이 사례로 본다면 코드 한 라인당 비용은 아래와 같이 변한다. 이 추세로 간다면 사업 모델의 수익을 엄청나게 고갈시키며 성장을 멈추게 하거나 망하게한다.

그렇다면 생산성이 현저하게 변화되는 요인은 무엇일까?
생산성이 저하되는 요인
- 급하게 시스템을 만든다.
- 결과물 총량을 순전히 프로그래머 수만으로 결정
- 코드와 설계의 구조를 보단 개발 완료에 집중한다.
아래 그림 4에서는 출시별 생산성이 점차 떨어져 0에 수렴하게 된다. 이러한 상황이 된다면 개발자는 잔업, 헌신과 노력에도 불구하고 더 이상 진척이 없는 상황을 마주하게 된다. 개발자의 노력은 기능 개발보다는 엉망이 된 상황에 대처하는 데 소모하기 시작한다. 경영자의 시각(그림 5)에서 본다면 같은 기간에 제품 출시별 월 인건비가 상승하는 것을 보게 될 것이다.


무엇이 잘못되었나?
이러한 문제가 생기는 이유는 개발자가 깔끔한 코드를 멀리하고 빠른 제품 출시를 위한 개발을 하는 것에 있다.
개발자는 흔히 “코드는 나중에 정리하면 돼. 당장은 시장에 출시하는 게 먼저야!” 라는 흔해 빠진 거짓말에 속는다. 그리고 시장의 압박으로 인해 출시를 먼저하기 위한 개발을 하게 된다. 이러한 시장 출시가 먼저라는 생각을 하는 이유는 바로 뒤에 여러 무리의 경쟁자가 뒤쫓고 있고, 경쟁자보다 앞서 가려면 가능한 한 빠르게 달려하기 때문이다.
개발자가 코드 정리를 미루는 이유는 다음에 만들어야 할 새로운 기능이 기다리고 있고, 계속 끊임 없이 추가되기 때문이다. 이러한 상황으로 인해 결국 정리되지 않은 코드들은 쌓이게 되고, 코드는 엉망진창이 되어 생산성은 0에 수렴하게 된다.
제이스 고먼의 실험을 통해 코드를 깔끔하게 유지하는 것과 빠르게 제품출시만을 위한 개발한 것의 작업 기간을 비교를 통해 깔끔한 코드를 유지하는 것의 중요성을 알 수 있다. 제이스 고먼은 TDD를 적용해 깔끔하게 개발한 코드와 그렇지 않은 코드의 작업 기간을 비교해 보았다. 처음 3일은 TDD를 적용하고 그 다음 3일은 그냥 개발을 진행했다. 제이스 고먼은 실험을 통해 코드를 깔끔하게 유지하기 위해 TDD 개발을 한 기간이 사용하지 않은 기간의 작업 시간이 10% 더 빠르게 작업이 완성되었다.

결론
개발자는 생산성이 저하되고 비용이 증가되지 않도록 처음부터 제대로 된 설계로 시스템을 설계해야할 의무가 있다. 빠른 출시를 위한 코드를 작성하는 것보다 중요한 것은 처음부터 비용은 최소화하고 생산성은 최대화할 수 있는 설계와 아키텍처를 가진 시스템을 만드는 것이다. 이러한 시스템 아키텍처가 지닌 속성을 알고 있어야 한다.
이 책은 훌륭하고 깔끔한 아키텍처와 설계가 무엇인지 설명하고, 이를 통해 소프트웨어 개발자가 장기간에 걸쳐 수익을 찰출 할 수 있게 하고자 한다.
'클린 아키텍처' 카테고리의 다른 글
[개발서적] 클린 아키텍처 06 - 함수형 프로그래밍 (0) | 2024.12.18 |
---|---|
[개발서적] 클린 아키텍처 05 - 객체 지향 프로그래밍 (Object-Orented) (1) | 2024.12.13 |
[개발서적] 클린 아키텍처 04 - 구조적 프로그래밍 (0) | 2024.12.12 |
[개발서적] 클린 아키텍처 03 - 패러다임의 개요 (0) | 2024.12.12 |
[개발서적] 클린 아키텍처 02 - 두 가지 가치에 대한 이야기 (1) | 2024.12.12 |