ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 18장 - 경계 해부학
    클린 코드(Clean Code)/클린 아키텍처요약 2023. 1. 1. 00:01
    728x90

    개요

    시스템 아키텍처는 일련의 소프트웨어 컴포넌트와 그 컴포넌트들을 분리하는 경계에 의해 정의됩니다.

    이번 장에서는 이런 경계의 다양한 형태를 알아보려고 합니다.

     

    경계 횡단하기

    '경계를 횡단한다'함은 단순히 경계 한쪽에 있는 기능에서 반대쪽 기능을 호출하여 데이터를 전달하는 일에 불과합니다.

    경계는 이러한 변경이 전파되는 것을 막는 방화벽을 구축하고 관리하는 수단으로써 존재합니다.

     

    두려운 단일체

    모놀리틱은 배포 관점에서 경계가 드러나지 않습니다. (하나의 거대한 파일이므로)

    이에 모놀리틱은 다형성에 의존하여 내부 의존성을 관리합니다.

     

    저수준 클라이언트와 고수준 서비스

     

     

    고수준 클라이언트와 저수준 서비스

    의존성 역전을 활용하여 컴파일 의존성과는 반대가 됩니다.

     

    정적 링크된 모노리틱 구조의 실행 파일이라도 이처럼 규칙적인 방식으로 구조를 분리하면 프로젝트를 개발, 테스트, 배포하는 작업에 큰 도움이 됩니다.

     

    배포형 컴포넌트

    아키텍처의 경계가 물리적으로 드러날 수도 있습니다.

    그중 가장 단순한 형태는 동적 링크 라이브러리입니다. (ex. jar파일)

    일반적으로 배포 과정에서만 차이가 날뿐, 단일체와 동일하게 모든 함수가 동일한 프로세서와 주소 공간에 위치합니다.

     

    이런 경우에도 경계를 가로지르는 통신은 매우 빈번하게 발생합니다.

     

    로컬 프로세스

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

    각각 독립된 주소 공간에서 실행됩니다.

    종종 공유 메모리 파티션을 사용하기도 하지만, 일반적으로는 메모리 보호를 통해 프로세스들이 메모리를 공유하지 못하게 합니다.

     

    대게 소켓, 메일박스, 메시지 큐와 같이 운영체제에서 제공하는 통신 기능을 이용하려 서로 통신합니다.

     

    이때는 경계를 지나는 통신에 운영체제 호출, 데이터 마샬링 및 언마샬링, 프로세스 간 문맥 교환 등이 있으며 이들은 제법 비싼 작업에 속합니다.

     

    따라서 통신이 너무 빈번하기 이뤄지지 않도록 신중하게 제한해야 합니다.

     

    마샬링이란?

    한 객체의 메모리에서 표현방식을 저장 또는 전송에 적합한 다른 데이터 형식으로 변환하는 과정입니다.

     

    서비스

    물리적인 형태를 띠는 가장 강력한 경계는 서비스입니다.

    서로 통신하는 두 서비스는 물리적으로 동일한 프로세스, 멀티코어에서 동작할 수 있고 아닐 수도 있습니다.

    서비스들은 모든 통신이 네트워크를 통해 이뤄진다고 가정합니다.

     

    따라서 지연에 따른 문제를 고수준에서 처리할 수 있어야 합니다.

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

     

    고수준의 서비스의 소스 코드에는 저수준 서비스를 특정 짓는 어떤 물리적인 정보도 포함해서는 안됩니다.

     

    결론

    대다수의 시스템은 한 가지 이상의 경계 전략을 사용합니다.

    실제로 서비스는 상호작용하는 일련의 로컬 프로세스 퍼사드에 불과할 때가 많습니다.

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

    '클린 코드(Clean Code) > 클린 아키텍처요약' 카테고리의 다른 글

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

    댓글

Designed by Tistory.