18장 경계해부학

 

들어가며

 

시스템 아키텍처는 소프트웨어 컴포넌트와 그 컴포넌트를 분리하는 경계에 의해 정의됨.

경계는 다양한 형태로 나타남.

 

 

 

경계 횡단하기

 

런타임에 경계를 횡단함.

→ 한쪽경계에서 다른쪽으로 데이터를 넘김.

소스코드 의존성관리를 통에 적절한 위치에 경계횡단 가능.

 

 

 

두려운 단일체

 

배포관점에서 볼 때 소스수준 분리모드 즉, 단일체(monolith)는 경계가 드러나지 않는다.

그러나 경계가 존재하지않거나 경계자체가 무의미하지않음.!

→ 정적으로 링크된 단일 실행파일을 만들더라도 그안에 포함된 다양한 컴포넌트를 개발하고 바이너리로만드는 과정을 독립적으로 수행하기 때문.

 

가장 단순한 형태의 경계횡단 → 저수준 클라이언트에서 고수준 서비스의 함수를 호출.

 

 

왼쪽에서 오른쪽으로 경계를 횡단함.

 

만약 고수준 클라이언트가 저수준 서비스를 호출해야 한다면 의존성을 역전시킴.

 

 

모두 오른쪽에서 왼쪽으로 경계를 횡단함.

고수준은 저수준(세부사항)으로 부터 독립적으로 유지시켜야 함.

 

 

 

배포형 컴포넌트

 

동적링크 라이브러리(ex: jar) - 배포시 컴파일 X, 바이너리와같이 배포가능한형태로 전달됨.

배포수준 컴포넌트(ex: war) - 단순히 배포 가능 한 단위를 좀 더 편리한 형태로 묶은것.

위의 둘은 배포 과정에서만 차이 날 뿐, 동일함.

→ 모든 함수가 동일한 프로세서, 주소 공간에 위치하기 때문.

→ 컴포넌트 분리, 의존성 관리하는 적략 동일하기 때문.

 

 

 

스레드

 

단일체와 배포형 컴포넌트는 모두 스레드를 활용가능.

그러나 스레드는 아키텍처 경계나 배포 단위가 아님.

→ 단순히 실행 계획 순서를 체계화 하는 방법임.

 

 

 

로컬 프로세스

 

정적으로 링크된 단일체 또는 동적으로 링크된 여러 컴포넌트로 구성된 프로세스를 말함.

프로세스 관점에서 로컬프로세스는 컴포넌트 간 의존성을 동적 다형성(의존성역전)을 통해 관리하는 저수준 컴포넌트로 구성됨.

로컬프로세스 간 분리 전략도 단일체나 바이너리 컴포넌트의 경우와 동일함.

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

 

 

 

서비스

 

프로세스를 서비스 관점에서 볼 때 서비스도 마찬가지로 로컬프로세스와 똑같이 저수준 서비스는 고수준 서비스에 ‘플러그인’ 되어야 함.

'📚 Book > Clean Architecture' 카테고리의 다른 글

20장 업무 규칙  (0) 2020.02.22
19장 정책과 수준  (0) 2020.02.22
17장 경계 : 선긋기  (0) 2020.02.22
16장 독립성  (0) 2020.02.22
15장 아키텍처란?  (0) 2020.02.22