2023년 11월 2일 작성

Clean Architecture - 정책과 세부 사항

software system은 추상화 수준에 따라서 정책과 세부 사항으로 분리할 수 있습니다.

정책과 세부 사항

  • 모든 software system은 정책(policy)과 세부 사항(detail)으로 분해할 수 있습니다.

  • architect의 목표는 system에서 정책을 가장 핵심적인 요소로 식별하고, 세부 사항은 정책에 무관하게 만드는 system을 구축하는 것입니다.

    • 세부 사항을 정책으로부터 신중하게 가려내고, 정책이 세부 사항과 결합되지 않도록 분리해야 합니다.
    • 이를 통해 정책은 세부 사항에 관한 어떠한 지식도 갖지 못하며, 어떤 경우에도 세부 사항에 의존하지 않게 됩니다.

정책 수준 (Policy Level)

  • 수준은 입출력까지의 거리를 의미합니다.

  • 모든 source code 의존성이 고수준 정책을 향한다면, 변경의 영향도를 줄일 수 있습니다.

    • system의 최저 수준에서 중요하지 않지만 긴급한 변경이 발생하더라도, 보다 높은 위치의 중요한 수준에 미치는 영향이 거의 없게 됩니다.
고수준 정책 저수준 정책
입력과 출력 모두로부터 멀리 위치한 정책입니다. 입력과 출력을 다루는 정책입니다.
고수준 정책은 저수준 정책에 비해 덜 빈번하게 변경되고, 보다 중요한 이유로 변경되는 경향이 있습니다. 저수준 정책은 더 빈번하게 변경되며, 보다 긴급성을 요구하며, 덜 중요한 이유로 변경되는 경향이 있습니다.

Architecture와 Design의 정책 수준

Architecture Design
고수준의 것들을 가리킵니다. 저수준의 구조 또는 결정 사항 등을 의미합니다.
입출력과 거리가 먼 Business 영역(Domain 객체, Usecase 등)입니다. 입출력과 가까운 Infra 영역(HTTP, DB, Cache 등)입니다.
  • 고수준에서 저수준으로 향하는 의사 결정의 연속성만이 있을 뿐, 본질적으로 architecture와 design에는 차이가 없습니다.
    • 저수준의 세부 사항(design)과 고수준의 구조(architecture)는 모두 전체 설계의 구성 요소입니다.
    • 세부 사항과 구조는 개별로 존재할 수 없으며, 단절 없이 이어져 system의 구조를 정의합니다.

Reference


목차