경계 해부학

Gooreum·2021년 11월 5일
0

클린아키텍처

목록 보기
18/33
  • 시스템 아키텍처는 소프트웨어 컴포넌트와 그 컴포넌트를 분리하는 경계에 의해 정의된다.
  • 경계는 다양한 형태로 나타난다.
  • 경계 형태 얘기를 하는데,, 결국 뭘 말하고자 하는지 잘 이해가 안됨.

1.경계 횡단하기

  • 런타임에 경계를 횡단한다는 의미는 한쪽 경게에서 다른쪽으로 데이터를 넘기는 것을 말한다.
  • 소스코드 의존성관리를 통에 적절한 위치에 경계횡단 가능.

2.단일체(소스 수준 분리 모드)

  • 함수와 데이터가 단일 프로세서에서 같은 주소 공간을 공유하며 그저 나름의 규칙에 따라 분리되어 있을 뿐이다.
  • 아키텍처 경계 중에서 가장 단순하며 가장 흔한 형태로써 물리적으로 엄격하게 구분되지 않는 형태이다.
  • 배포 관점에서 단일체는 경계가 드러나지 않지만 실제로 경계가 존재하지 않거나, 경계 자체가 무의미하다는 것은 아니다.
    • 정적으로 링크된 단일 실행파일을 만들더라도 그안에 포함된 다양한 컴포넌트를 개발하고 바이너리로만드는 과정을 독립적으로 수행하기 때문.
  • 정적 링크된 모노리틱 구조의 실행 파일이라도 규칙적인 방식으로 구조를 분리하면 프로젝트를 개발, 테스트, 배포하는 작업에 도움이 된다.

2.배포형 컴포넌트(배포 수준 결합 분리 모드)

  • 동적링크 라이브러리(ex: jar) - 배포시 컴파일 할 필요 없으며, 바이너리와 같이 배포 가능한 형태로 전달된다.
  • 배포수준 컴포넌트(ex: war) - 단순히 배포 가능 한 단위를 좀 더 편리한 형태로 묶은것이다.
  • 결국 위의 둘은 배포 과정에서만 차이 날 뿐, 동일하다.
    • 모든 함수가 동일한 프로세서, 주소 공간에 위치하기 때문이다.
    • 컴포넌트 분리, 의존성 관리하는 적략 동일하기 때문이다.

3.스레드

  • 스레드는 아키텍처 경계도 아니며 배포 단위도 아니다.
  • 스레드는 실행 계획과 순서를 체계화하는 방법에 가깝다.
  • 모든 스레드가 단 하나의 컴포넌트에 포함될 수도 있고, 많은 컴포넌트에 걸쳐 분산될 수도 있다.
  • 그래서 스레드가 가지는 의미가 뭔지 잘 모르겠음..

4.로컬 프로세스

  • 정적으로 링크된 단일체 또는 동적으로 링크된 여러 컴포넌트로 구성된 프로세스를 말한다.
  • 소켓, 메일박스, 메시지 큐와 같이 운영체제에서 제공하는 통신 기능을 이용하여 서로 통신한다.
  • 프로세스 관점에서 로컬프로세스는 컴포넌트 간 의존성을 동적 다형성(의존성역전)을 통해 관리하는 저수준 컴포넌트로 구성됨.
  • 로컬프로세스 간 분리 전략도 단일체나 바이너리 컴포넌트의 경우와 동일함.
  • 즉, 저수준의 프로세스가 고수준 프로세스의 플러그인이 되도록 만드는 것이 아키텍처 관점에서 목표임.

5.서비스

  • 가장 강력하게 물리적인 형태를 띠는 경계이다.
  • 서비스는 프로세스로, 일반적으로 명령행 또는 그와 동등한 시스템 호출을 통해 구동된다.
  • 서비스간 통신은 네트워크를 통해 이뤄진다.
  • 로컬 프로세스와 마찬가지로 저수준 서비스는 반드시 고수준 서비스에 '플러그인'되어야 한다.
profile
하루하루 꾸준히

0개의 댓글