클린아키텍쳐-경계 해부학

경계 해부학

경계 횡단하기

런타임에 경계를 횡단한다.
적절한 위치에서 경계를 횡단하게 하는 비결은 소스코드 의존성 관리에 있다.

두려운 단일체

아키텍처 경계 중에서 가장 단순하며 가장 흔한 형태는 물리적으로 엄격하게 구분되지 않는 형태다.

이 형태에선 함수와 데이터가 단일 프로세서에서 같은 주소 공간을 공유하며 그저 나름대로 규칙에 따라 분리되어 있을 뿐이다.

배포관점에선 소위 단일체(monotith)라고 불리는 단일실행 파일에 지나지 않는다.

이러한 아키텍처는 거의 모든 경우에 특정한 동적 다형성에 의존하여 내부 의존성을 관리한다.

배포형 컴포넌트

아키텍처의 경계가 물리적으로 드러날 수도 있는데 그중 가장 단순한 형태는 동적 링크 라이브러리다.
이는 배포수준의 결합분리 모드

배포 과정만 틀릴뿐이지 배포 수준의 컴포넌트는 단일체와 동일하다.

스레드

스레드는 아키텍쳐 경계도 아니며 배포단위도 아니다.

로컬 프로세스

훨씬 강한 물리적 형태를 띠는 아키텍처 경계로는 로컬 프로세스가 있다.

로컬 프로세스는 주로 명령행이나 그와 유사한 시스템 호출을 통해 생성된다.
호컬 프로세스 간 분리 전략은 단일체나 바이너리 컴포넌트의 경우와 동일하다.

저수준의 프로세스가 고수준의 프로세스의 플러그인 되도록 만드는 것이 아키텍처 관점의 목표이다.

로컬 프로세스 경계를 지나는 통신에는 운영체제 호출, 데이터 마샬링 및 언마샬링, 프로세스 간 문맥 쿄환 등이 있으며,
이들은 제법 비싼 작업에 속한다. 따라서 통신이 너무 빈번하게 이뤄지지 않도록 신충하게 제한해야 한다.

서비스

물리적인 형태를 띠는 가장 강력한 경계는 바로 서비스다.
통신 지연에 따른 문제를 고수준에서 처리할 수 있어야 한다.

결론

단일체를 제외한 대다수의 시스템은 한 가지 이상의 경계 전략을 사용한다.

대체로 한 시스템 안에서도 통신이 빈번한 로컬 경계와 지연을 중요하게 고려해야 하는 경계가 혼합 되어 있음을 의미한다.

참조