[Clean Architecture] 16장 독립성

soohee·2022년 5월 11일
0

클린아키텍처

목록 보기
15/15

한 줄 요약 : 좋은 아키텍트는 시스템의 유스케이스 / 운영 / 개발 / 배포를 지원해야한다. 또한 뛰어난 아키텍트라면 이러한 변경을 예측하여 큰 무리 없이 반영할 수 있도록 만들어야 한다

유스케이스

행위를 명확히 하고 외부로 드러내며, 시스템의 의도를 아키텍처 수준에서 알아볼 수 있게 만드는 것이다.

운영

컴포넌트를 적절히 독립시켜 유지하고, 서로의 통신방식을 제한하지 않도록 해서, 요구사항이 바뀌더라도 스레드, 프로세스, 서비스로 구성된 기술 스펙트럼 사이를 전환하는 일이 훨씬 쉬어질 것이다.

개발

여러 팀이 개발한다면, 각 팀이 독립적으로 개발하기 편한 아키텍처가 만들어져야 한다.

따라서, 잘 격리되어 독립적으로 개발가능한 컴포넌트 단위로 시스템을 분할해야한다.

배포

배포는 용이해야한다. 메인 컴포넌트는 시스템을 하나로 묶고, 각 컴포넌트들이 올바르게 구동하고 통합하고 관리되어야 한다.

선택사항 열어놓기

세부사항등 여러 선택에 대한 결정을 미루고, 선택사항을 열어두어 쉽게 변경이 가능하도록 해야한다.

계층 결합 분리

다른 이유로 변경되는 것들을 분리하고, 동일한 이유로 변경되는 것들을 묶는다.

유스케이스 결합 분리

유스케이스는 UI의 일부, 애플리케이션 특화 업무 규칙이 일부, 애플리케이션 독립적 업무 규칙의 일부, 그리고 데이터베이스 기능의 일부를 사용한다.

따라서, 시스템을 수평적 계층으로 분할하면서 동시에 해당 계층을 가로지르는 얇은 수직적인 유스케이스로 시스템 분할 할 수 있다.

결합 분리 모드

유스케이스를 위해 수행하는 결합 분리는 운영에도 도움된다.

실제 서비스에 기반한 아키텍처를 서비스 지향 아키텍처 (SOA)라고 부른다.

개발 독립성

컴포넌트가 완전히 분리되면 개발 팀도 분리되어 편히 개발할 수 있다.

배포 독립성

유스케이스와 계층의 결합이 분리되면 배포 측면에서도 고도의 유연성이 생긴다.

따라서, 운영 중인 시스템에서도 계층과 유스케이스를 교체할 수 있게 된다.

중복

  • 진짜 중복 : 제거하거나 줄여야하는 중복
  • 우발적 중복 : 서로 다른 속도와 다른 이유로 변경되는 것들, 진짜 중복이 아니다.

결합 분리 모드2

계층과 유스케이스의 결합을 분리하는 방법은 다양하다. 소스 코드 수준에서 분리, 바이너리 코드(배포)수준에서, 그리고 실행 단위(서비스) 수준에서도 분리할 수 있다.

  • 소스 수준 분리 모드: 소스 코드 모듈 사이의 의존성을 제어할 수 있다.
    • 모든 컴포넌트가 같은 주소 공간에서 실행되고, 서로 통신할 때 간단한 함수 호출을 사용한다.
    • 이러한 구조를 흔히 모노리틱 구조라고 부른다.
  • 배포 수준 분리 모드: 배포 가능한 단위(라이브러리, jar 파일, DDL 등)들 사이의 의존성을 제어할 수 있다.
  • 서비스 수준 분리 모드: 의존하는 수준을 데이터 구조 단위까지 낮출 수 있다.
    • 순전히 네트워크 패킷을 통해서만 통신하도록 만들 수 있다.
    • 완전히 독립적이다.(서비스, 마이크로 서비스)

좋은 아키텍처는 결합 분리모드를 선택사항으로 남겨둔다.

즉 , 모노리틱 구조에서 시작해서 마이크로서비스 수준까지 올라와도 원래 형태로 돌아갈 수 있어야 좋은 아키텍처라 할 수 있다.

결론

시스템 결합 분리 모드는 시간이 지나면서 바뀌기 쉽기 때문에, 선택사항으로 남겨둬야한다.

profile
🐻‍❄️

0개의 댓글