소개
클린아키텍처: 소프트웨어 구조와 설계의 원칙 책을 읽고 정리하며 소감을 적는 포스트입니다.
두 가지 가치에 대한 이야기
모든 소프트웨어 시스템은 이해관계자에게 서로 다른 두 가지 가치를 제공하는데, 행위(behavior)와 구조(structure)가 바르 그것이다.
행위
소프트웨어의 첫 번째 가치는 바로 행위(behavior)다. 프로그래머를 고용하는 이유는 이해관계자를 위해 기계가 수익을 창출하거나 비용을 절약하도록 만들기 위해서다.
이를 위해 프로그래머는 이해관계자가 기능 명세서나 요구사항 문서를 구체화 할 수 있도록 돕는다.
많은 개발자들이 기계를 구현하고 버그를 수정하는 일이 자신의 직업이라고 믿지만 틀렸다.
아키텍처
소프트웨어의 두 번째 가치는 소프트웨어(software)
와 관련 있다.
부드러운(soft)
와 제품(ware)
의 합성어로 소프트웨어를 만든 이유는 기계의 행위를 쉽게 변경할 수 있도록 하기 위해서다.
소프트웨어가 본연의 목적을 추구하려면 변경이 쉬워야 한다.
이해관계자가 기능에 대해 생각을 바꾸면 변경사항을 간단하고 쉽게 적용 할 수 있어야 한다.
새로운 요구사항이 발생할 때마다 바로 이전의 변경사항을 적용하는 것보다 조금 더 힘들어지는데, 시스테므이 형태와 요구사항의 형태가 서로 맞지 않기 때문이다.
아키텍처가 특정 형태를 다른 형태보다 선호 할수록, 새로운 기능을 이 구조에 맞추는게 더 힘들어 진다.
따라서 아키텍처는 형태에 독립적이어야 하고, 그럴수록 더 실용적이어야 한다.
더 높은 가치
기능인가 아니면 아키텍처인가?
소프트웨어 시스템이 동작하게 만드는게 더 중요한가? 아니면 소프트웨어 시스템을 좀 더 쉽게 변경 할 수 있도록 만드는게 중요한가?
대다수가 동작하는게 더 중요하다고 생각 할 것이다.
이에 반박한다면, 동작은 하지 않지만 변경이 쉬운 프로그램을 내게 준다면 동작하도록 만들 수 있고, 유지보수도 할 수 있다.
하지만 수정이 불가능한 시스템은 존재하기 마련인데, 변경에 드는 비용이 변경으로 창출되는 수익을 초과하는 경우가 있다.
아이젠하워 매트릭스
드와이트 D. 아이젠하워(Dwight D. Eisenhower) 미국 대통령이 고안한 중요성과 긴급성에 관한 아이젠하워 매트릭스를 살펴보자
아이젠하워 매트릭스
- 긴급하고 중요한
- 긴급하지 않지만 중요한
- 긴급하지만 중요하지 않은
- 긴급하지도 중요하지도 않은
소프트웽어의 첫 번째 가치인 행위는 긴급하지만 매번 높은 중요도를 가지는 것은 아니다.
소프트웨어의 두 번째 가치인 아키텍처는 중요하지만 즉각적인 긴급성을 필요로 하는 경우는 절대 없다.
아키텍처, 즉 중요한 일은 이 항목의 가장 높은 두 순위를 차지하는 반면, 행위는 첫번 째와 세번째에 위치한다.
개발자의 흔한 실수는 3번째 항목을 1번째로 격장시켜 버리는 일이다.
아키텍처를 위해 투쟁하라
효율적인 소프트웨어 개발자는 뻔뻔함을 무릅쓰고 다른 이해관계자들과 동등하게 논쟁한다.
소프트웨어 개발자인 당신도 이해관계자임을 명심해야 한다.
소프트웨어 아키텍트는 시스템이 제공하는 특성이나 기능보다는 시스템의 구조에 더 중점을 둔다. 아키텍트는 이러한 특성과 기능을 개발하기 쉽고, 간편하게 수정할 수 있으며, 확장하기 쉬운 아키텍처를 만들어야 한다.