Post

경계 해부학

18. 경계 해부학

경계 횡단하기

런타임에 경계를 횡단한다.

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

두려운 단일체

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

배포 관점에서 볼 때 단일체는 경계가 드러나지 않는다.

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

가장 단순한 형태의 경계 횡단은 저수준 클라이언트에서 고수준 서비스로 향하는 함수 호출

모노리틱 구조의 실행 파일이라도 규칙적인 방식으로 구조를 분리하면 프로젝트를 개발, 테스트, 배포하는 작업에 큰 도움이 됨

단일체를 배포하는 일은 일반적으로 컴파일과 정적 링크 작업을 수반하므로, 대체로 이러한 시스템에서 컴포넌트는 소스 코드 형태로 전달된다.

배포형 컴포넌트

아키텍처의 경계가 물리적으로 드러날 수도 있는데 그중 가장 단순한 형태는 동적 링크 라이브러리다. (ex. jar파일, DLL …)

컴포넌트를 이 형태로 배포하면 따로 컴파일하지 않고 곧바로 사용가능

배포 과정에서만 차이가 날 뿐, 배포 수준의 컴포넌트는 단일체와 동일하다.

모든 함수가 동일한 프로세서와 주소 공간에 위치하며, 컴포넌트를 분리하거나 컴포넌트 간 의존성을 관리하는 전략도 단일체와 동일하다.

스레드

단일체와 배포형 컴포넌트는 모두 스레드를 활용할 수 있다.

로컬 프로세스

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

각 로컬 프로세스는 정적으로 링크된 단일체이거나 동적으로 링크된 여러개의 컴포넌트로 구성될 수 있다.

비싼 작업이 많으므로 신중하게 제한해야 한다.

서비스

서비스는 자신의 물리적 위치에 구애받지 않는다.

서비스 경계를 지나는 통신은 함수 호출에 비해 매우 느리다 -> 지연(latency)에 따른 문제를 고수준에서 처리할 수 있어야 함

저수준 서비스는 반드시 고수준 서비스에 플러그인 되어야 한다.

결론

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

참조

  1. 클린 아키텍처(Clean Architecture)
This post is licensed under CC BY 4.0 by the author.