5부. 아키텍처1

[클린아키텍처] 5. 아키텍처


15장. 아키텍처란?

개요

소프트웨어 시스템의 아키텍처란 시스템을 구축했던 사람들이 만들어낸 시스템의 형태

모양은 시스템을 컴포넌트로 분할하는 방법, 분할된 컴포넌트를 배치하는 방법, 컴포넌트가 서로 의사소통하는 방식에 따라 정해짐

형태는 아키텍처 안에 담긴 소프트웨어 시스템이 쉽게 개발, 배포 운영 유지보수되도록 만들어짐

아키텍터의 주된 목적은 시스템의 생명 주기를 지원하는 것

쉽게 이해하고, 쉽게 개발하고, 쉽게 유지보수가하고, 쉽게 배포하게 해줌

선택사항 열어 두기

소프트웨어를 부드럽게 유지하려면 선택사항을 가능한 한 많이, 가능한 한 오래 열어 두어야 한다

이 선택사항이런 중요치 않은 세부사항이다

세부사항은 중요한 정책과 소통할 때는 필요하지만 , 정책의 행위에는 영향을 끼치지 않는 데이터베이스, 서버, 프레임워크 같은 것들이다

좋은 아키텍트는 정책을 핵심 요소로 식별하고 세부사항은 정책에 무관하게 만드는 시스템을 구축하는 것이다

예를 들면 좋은 아키텍트라면 데이터베이스가 어떤 데이터베이스에 관련 없이 잘 동작해야 한다

이렇게 선택사항에 대한 결정을 오래 미룰 수 있다면 더 많은 정책들이 생기고 제대로 된 선택을 할 수 있다

16장. 독립성

개요

좋은 아키텍처가 지원해야 하는 것

  • 시스템의 유스케이스

  • 시스템의 운영

  • 시스템의 개발

  • 시스템의 배포

유스케이스

최우선 관심사

시스템의 아키텍처는 시스템의 의도를 지원해야 함

시스템이 장바구니 애플리케이션이면 아키텍처는 장바구니와 관련된 유스케이스를 지원해야 함

행위를 명확히 하고 외부로 드러내어 시스템이 지닌 의도를 아키텍처 수준에서 알아볼 수 있게 만듦

최상위 수준에서 알아볼 수 있어 개발자는 찾아 헤매지 않아도 됨

운영

아키텍처는 요구와 관련된 유스케이스에 걸맞는 처리량과 응답시간을 보장해야 함

이러한 운영 작업을 허용할 수 있는 형태로 아키텍처를 구조화하여 지원해야 함

그 방법은 선택사항으로 두고 열어두자

개발

콘웨이의 법칙

시스템을 설계하는 조직이라면 어디든지 그 조직의 의사소통 구조와 동일한 구조의 설계를 만들어 낼 것이다

격리되어 독립적으로 개발 가능한 컴포넌트 단위로 시스템을 분할

배포

시스템이 빌드된 후 즉각적인 배포를 목표로 함

이를 위해 시스템을 컴포넌트 단위로 분할해 격리

결합 분리

계층 결합 분리

모든 유스케이스를 지원하고 싶지만, 모든 유스케이스를 알 순 없다

아키텍트는 단일 책임 원칙과 공통 폐쇄 원칙을 적용해 다른 이유로 변경되는 것들은 분리하고 같은 이유로 변경되는 것들은 묶는다

유스케이스 결합 분리

유스케이스 그자체도 서로 다른 이유로 변경될 수 있다

계층으로 분할하면서 동시에 유스케이스도 분리한다

개발 독립성, 배포 독립성

분리가 잘 되어 있다면 서로 간의 영향도 줄어든다

분리가 잘 되어 있다면 운영 중이더라도 계층이나 유스케이스를 교체할 수 있고 추가하기도 쉽다

중복

일반적으로 중복은 나쁘지만 중복 중에서 각자 다른 경로로 발전한다면 중복되는 것이 맞다

결합 분리 모드

계층과 유스케이스를 분리하는 방법은 다양하다

  • 소스 코드 수준에서 분리

  • 배포 수준에서 분리

  • 서비스 수준에서 분리

어떤 방법이 좋을까

시스템 상황에 맞는 분리 방법을 선택사항으로 남겨 두어 가장 적합한 분리 방법을 선택해도 무리 없이 사용할 수 있는 것이 좋다

Last updated