경계 Boundary
- 소프트 웨어 아키텍처는 경계 Boundary 를 긋는 기술이다.
- 소프트웨어 요소를 서로 분리하고, 경계 한편에 있는 요소가 반대편에 있는 요소를 알지 못하도록 막는다.
- 프로젝트 초기 또는 매우 나중에 생길 수 있다.
결합 coupling
- 경계와 반대되는 기술
- 인적자원 효율을 떨어뜨리는 요인
- 유스케이스와 관련없는 프레임워크, DB, 웹서버, 라이브러리 등 너무 일찍 내려진 결정에 따른 결합
좋은 아키텍처는 이러한 결정이 부수적이며, 결정을 나중에 내려도 큰 영향이 없어야한다.
어떻게 선을 그을까? 언제 그을까?
1 GUI와 업무 규칙은 선이 있어야한다. O
2 데이터베이스와 GUI도 선이 있어야한다. O
3 데이터베이스와 업무규칙도 선이 있어야한다 O
-> ??? 데이터베이스가 업무 규칙이랑 관련이 없다는데에 이해하지 못할 수 있다. But, 데이터베이스는 업무규칙이 간접적으로 사용할 수 있는 도구이므로 선이 있어야한다
인터페이스 뒤로 숨은 데이터베이스 & 경계선
- DatabaseAccess의 화살표를 보면 바깥으로 나간다 == DatabaseAccess가 존재한다는 사실을 알고있는 클래스는 없다.
- 관련성 낮은 컴포넌트가 관련성 높은 컴포넌트에 의존한다.
위의 예제의 결론
1 데이터베이스는 오라클, mysql 등으로 구현할 수 있으며 업무규칙에 영향을 주지 않는다.
2 데이터베이스에 대한 결정은 나중에하고, 먼저 업무 규칙을 작성하고 테스트하라
플러그인
: 특수 처리, 추가 기능 및 추가 기능을 생성하기 위해 핵심 시스템을 향상 또는 확장하기위한 사용자 정의 코드를 포함하는 독립 실행 형 독립 구성 요소
플러그인 아키텍처
플러그인 아키텍처는 1 코어 시스템과 2 플러그인 모듈로 구성된다.
최종 결론
- 소프트웨어 아키텍처에서 경계선을 그리려면 먼저 시스템을 컴포넌트 단위로 분할해야 한다.
- 일부 컴포넌트는 핵심 업무 규칙, 나머지 컴포넌트는 플러그인에 해당한다.
- 컴포넌트 사이의 화살표가 핵심 업무를 향하도록 배치한다. (저수준 -> 고수준)
경계선 분할은 의존성 역전 원칙 (DIP) , 안정된 추상화 원칙 (SAP)와 관련이 있다.
* DIP: 변하기 쉬운 클래스에 의존하지 않고, 추상적인 클래스에 의존해야한다.
* SAP: 의존성은 추상화 방향으로 향해야 한다.
경계는 소스코드 모듈 하나가 의존하는 다른 소스 코드를 바꿔햐하는것을 막아내는 방화벽을 구축하고 관리하는 수단으로써 존재한다.
저수준 클라이언트에서 고수준 서비스를 호출할 때
- 제어흐름은 왼쪽에서 오른쪽으로 경계를 횡단한다.
- 의존성도 왼쪽에서 오른쪽으로 경계를 횡단한다. (저수준 -> 고수준)
- 경계에서 호출되는쪽에 Data 정의가 위치한다.
고수준 클라이언트에서 저수준 서비스를 호출할 때 (DIP)
- 제어흐름은 왼쪽에서 오른쪽으로 경계를 횡단한다.
- But 의존성은 제어흐름과 반대로 경계를 횡단한다. (저수준 -> 고수준)
- 호출하는 쪽에 Data 정의가 위치한다.
정적 링크된 모노리티(단일체) 구조의 실행 파일이라도 이처럼 규칙적인 방식으로 구조를 분리하면 프로젝트를 개발, 테스트, 배포하는 작업에 큰 도움이 된다.
배포형 컴포넌트와 모놀리티(단일체)는 동일하다.
스레드
: 실행계획과 순서를 체계화하는 방법
모든 스레드가 단 하나의 컴포넌트에 포함될 수도 있고, 많은 컴포넌트에 걸쳐 분산될 수 있다.
모놀리티(단일체와) 배포형 컴포넌트는 모두 스레드를 활용할 수 있다.
로컬 프로세스 경계
: 훨씬 강한 물리적 형태를 띠는 아키텍처 경계
서비스 경계
: 물리적 형태를 띠는 가장 강력한 아키텍처 경계
로컬프로세스와 서비스의 특징
- 주로 명령행이나 시스템 호출을 통해 생성된다
- 함수호출에 비해 매우 느리므로 빈번한 통신을 줄여야 한다.
- 지연에 따른 문제를 고수준에서 처리할 수 있어야 한다.
- 저수준 서비스는 반드시 고수준 서비스에 '플러그인'되어야 한다.
- 고수준 서비스의 소스 코드에는 저수준 서비스를 특정짓는 정보 ex) URI 도 포함해서는 안된다.
대다수의 시스템은 한가지 이상의 경계 전략을 사용한다
한 시스템 안에서도 통신이 빈번한 로컬 경계와 지연을 중요하게 고려해는 경계가 혼합되어 있다.
'클린아키텍처' 카테고리의 다른 글
[클린아키텍처] 21장 소리치는 아키텍처, 22장 클린 아키텍처 (0) | 2022.03.12 |
---|---|
[클린아키텍처] 19장 정책과 수준, 20장 업무 규칙 (0) | 2022.03.11 |
[클린아키텍처] 15장 아키텍처란?, 16장 독립성 (0) | 2022.03.06 |
[클린아키텍처] 12장~14장 컴포넌트 원칙 (0) | 2022.03.06 |
[클린아키텍처] 7장~11장 설계원칙 - SOLID 원칙 (0) | 2022.02.27 |
댓글