클린 아키텍처 도서 요약 내용입니다.
1장 설계와 아키텍처란
설계와 아키텍처에는 어떤 차이가 있는가?
우선 첫째로 주장하고 싶은 바는 둘 사이에는 차이가 없다는 점이다. 아무런 차이가 없다.
'아키텍처'는 저수준의 세부사항과는 분리된 고수준의 무언가를 가리킬 때 흔히 사용되는 반면, '설계'는 저수준의 구조 또는 결정사항 등을 의미할 때가 많다.
집을 지을 때도 형태, 외관, 입면도, 공간이나 방배치가 콘센트, 전등 스위치, 전등 등 모두 어디에 위치하는지를 도메인에서 알 수 있다.
소프트웨어 설계도 마찬가지다. 저수준의 세부사항과 고수준의 구조는 모두 소프트웨어 전체 설계의 구성요소다. 개별로는 존재할 수 없고, 실제로 이 둘을 구분 짓는 경계는 뚜렷하지 않다.
목표는?
좋은 소프트웨어의 목표는?
소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는 데 있다.
설계 품질을 재는 척도는 고객의 요구를 만족시키는 데 드는 비용을 재는 척도와 다름없다. 이 비용이 낮을 뿐만 아니라 시스템의 수명이 다할 때까지 낮게 유지할 수 있다면 좋은 설계라고 말할 수 있다. 새로운 기능을 출시할 때마다 비용이 증가한다면 나쁜설계다. 좋은 설계란 이처럼 단순명료하다.
사례 연구
이 추세로는 오래 갈 수 없다. 지금 당장의 수익이 중요치 않다.
엉망진창이 되어 가는 신호
개발자의 생산성은 거의 100%에서 시작했지만, 출시할 때마다 하락한다. 네번째 출시에 다다르면 확실히 생산성은 거의 바닥을 치고 결국에는 0으로 수렴한다.
개발자 입장에서 보자면 이러한 현상은 지독한 절망감을 안겨주는데, 모두가 열심히 일하고 있기 때문이다. 전력을 기울이지 않는 개발자는 없다.
개발자의 노력은 기능 개발 보다는 엉망이 된 상황에 대처하는데 소모되기 시작한다.
경영자의 시각
첫번째 출시에서는 매월 수십만 달러의 인건비, 여덟 번째 출시는 월 2천만 달러가 되고, 계속 증가하는 추세다.
무엇이 잘못되었나?
- "느려도 꾸준하면 이긴다."
- "발 빠른 자가 경주에 이기는 것도 아니며, 힘센 자가 싸움에서 이기는 것도 아니다."
- "급할수록 돌아가라"
현대의 개발자는 뼈 빠지게 일을 하지만 그들의 뇌는 잠에 취해있다. 훌륭하고 깔끔하게 잘 설계된 코드가 중요하다는 사실을 알고 있는 바로 그 뇌가 잠자고 있다.
개발자는 "코드는 나중에 정리하면 돼. 당장은 시장에 출시하는 게 먼저야!" 라는 흔해 빠진 거짓말에 속는다.
이전에 작성한 코드로 돌아가 정리하는 일이 일어나지 않는데, 바로 다음에 만들어야 할 새로운 기능이 기다리고 있기 때문이다. 결국 엉망진창이 되고 생산성은 0을 향해 수렴하기 시작한다.
엉망진창인 코드가 서서히 쌓이면 개발자 생산성은 차츰 낮아지고, 코드가 엉망이 되는 추세는 절대 멈추거나 수그러들지 않는다.
소프트웨어 개발의 단순한 진리
빨리 가는 유일한 방법은 제대로 가는 것이다.
개발자는 처음부터 다시 시작하여 전체 시스템을 재설계 하는 것이 해답이라고 생각할지도 모른다. 하지만 이 생각 또한 토끼의 말과 다름없다.
결론
소프트웨어 아키텍처를 심각하게 고려할 수 있으려면 좋은 소프트웨어 아키텍처가 무엇인지 이해해야 한다. 비용은 최소화하고 생산성은 최대화 할 수 있는 설계와 아키텍처를 가진 시스템을 만들려면, 이러한 결과로 이끌어 줄 시스템 아키텍처가 지닌 속성을 알고 있어야 한다.