클린아키텍쳐-독립성

독립성

좋은 아키텍처는 다음을 지원해야 된다.

  • 시스템의 유즈케이스
  • 시스템의 운영
  • 시스템의 개발
  • 시스템의 배포

유즈케이스

시스템의 아키텍처는 시스템의 의도를 지원해야 한다는 뜻이다.

운영

운영 관점에서는 덜 실질적이며 덜 피상적인 업무를 맡는다.

개발

시스템을 설계하는 조직이라면 어ㅣ뜬지 그 조직의 의사소통 구조와 동일한 구조의 설계를 만들어 낼 것이다. - 콘웨이의 법칙

배포

아키텍처의 배포 용이성의 목표는 즉각적인 배포이다.

선택사항 열어놓기

좋은 아키텍처는 컴포넌트 구조와 관련된 이 관심사들 사이에서 균형을 맞추고, 각관심사 모두를 만족시킨다.

계층 결합 분리

아키텍트는 단일 책임 원칙과 공통 폐쇄 원칙을 적용하여, 그 의도의 맥락에 따라서 다른이유로 변경되는것을 분리하고
동일한 이유로 변경되는것을 묶는다.

유즈케이스 결합 분리

서로 다른 이유로 변경되는것은 유즈케이스가 있다.

수직적으로도 분리 할수 있고 수평적으로도 분리 할수 있다.

결합 분리 모드

SOA 나 MSA 를 보듯이 우리는 떄떄로 컴포넌트를 서비스 수준까지도 분리해야 한다.

개발 독립성

컴포넌트가 완전히 분리되면 팀사이의 간섭은 줄어든다.

배포 독립성

실제로 결합을 제대로 분리 했다면 운영중인 시스템에서도 계층과 유즈케이스를 교체 할수 있다.

중복

진짜 중복과 우발적 중복을 잘 구분해야 한다.

결합 분리 모드

계층 과 유스케이스 결합을 분리하는 방법

  • 소스 수준의 분리 모드 : 소스 코드 모듈 사이의 의존성 제어할 수 있다.(예 루비 Gem)
  • 배포 수준 분리 모드 : jar파일 dll 공유 라이브러리와 같이 배포 가능한 단위들 사이의 의존성을 제어할수 있다.
  • 서비스 수준 분리 모드 : 의존하는 수준의 데이터 구조 단위까지 낮출수 있고 순전히 네트워크 패킷을 통해서 통신하도록 만들수 있다.(MSA)

참조