공부
클린아키텍쳐 1부 정리
삶의안식처
2024. 5. 8. 09:54
1장. 설계와 아키텍쳐란?
1. 설계와 아키텍쳐의 차이
- 아무런 차이가 없다.
- 저수준의 세부사항과 고수준의 구조는 모두 전체 설계의 구성요소
- 개별로 존재하지 않고 고수준에서 저수준으로 향하는 의사결정의 연속성만이 있음
2. 목표
- 소프트웨어 아키텍쳐의 목표는 필요한 시스템 구축, 유지보수 최소화
- 고객의 요구를 만족시키는데 드는 비용을 최소화, 수명이 다할 때까지 낮게 유지
3. 무엇이 잘못되었나?
- 훌륭하고 잘 설계된 코드가 중요하다는 사실을 망각
- 당장 정리되지 않는 코드는 계속 정리되지 않고 생산성은 0으로 수렴
- 지저분한 코드를 작성 시 단기간엔 빠르게, 장기적으로 볼 때만 생산성이 낮아짐
- 빨리 가는 유일한 방법은 제대로 가는 것
- 이럴 때 처음부터 재설계하는 것이 해답이라고 착각
- 자신을 과신한다면 재설계하더라도 원래의 프로젝트와 똑같이 엉망으로 내몰린다
4. 결론
- 개발조직의 최고의 선택지는 소프트웨어 아키텍처의 품질을 심각하게 고민하기 시작하는 것
- 좋은 아키텍처가 무엇인지 이해해야함
2장 두가지 가치에 대한 이야기
1. 두가지 가치
- 행위 Behavior
- 요구사항을 만족하도록 코드를 작성
- 위반 시 디버거를 열고 문제를 고침
- 이 것이 전부라고 생각하는 프로그래머가 많음
- 구조 Structure
- 기계의 행위를 쉽게 변경하기 위해 소프트웨어가 등장
- 변경하기 쉬워야한다.
- 어려움은 변경되는 범위(scope)에 비례
- 변경사항의 형태(shape)에는 관련 없어야 함
- 개발 비용 증가 원인 변경사항의 범위와 형태의 차이
- 아키텍처는 형태에 독립적, 그럴수록 실용적
2. 더 높은 가치
- 완벽하게 동작하지만 수정이 불가능
- 요구사항이 변경될때 동작하지 않음
- 프로그램이 쓸모 없어짐
- 동작은 하지 않지만 변경이 쉬움
- 프로그램이 돌아가게 수정 가능
- 변경사항이 발생해도 동작하도록 유지보수 가능
- 유용한 프로그램
- 현실적으로 수정이 불가능한 시스템
3. 아이젠하워 매트릭스
- 4가지 유형
- 중요함, 긴급함
- 중요함, 긴급하지 않음
- 중요하지 않음, 긴급함
- 중요하지 않음, 긴급하지 않음
- 하지만 긴급한 문제는 중요하지 않으며, 중요한 문제는 절대 긴급하지 않다
- 긴급하지만 중요하지 않은 기능, 긴급하면서 중요한 기능을 구분 못함 -> 아키텍쳐 무시하고 기능 위주
- 이를 설득할 수 있는 사람이 개발팀을 이끌어야 하고 책임져야 한다
4. 아키텍쳐를 위해 투쟁
- 소프트웨어를 안전하게 보호해야 할 책임이 있다.
- 아키텍쳐가 후순위가 되면 시스템 개발하는 비용 증가
- 시스템 변경이 현실적으로 불가능해짐
- 이렇게 된 것은 개발팀이 투쟁하지 않았기 때문에 발생