2023년 11월 28일 작성

Clean Architecture - 경계 횡단하기

Architecture에서 경계를 가로질러 통신하는 일은 필수적이기 때문에, 경계 횡단에 대한 부분도 잘 설계해야 합니다.

Architecture 경계를 가로질러 통신하기

  • 경계 횡단은 한 쪽에 있는 기능에서 반대편 기능을 호출하여 data를 전달하는 일입니다.
    • 이때, 적절한 위치에서 경계를 횡단하게 하려면 source code 의존성을 관리해야 합니다.
    • module 하나가 변경되면 이에 의존하는 다른 module도 변경하거나 다시 배포해야 할 수도 있기 때문입니다.

정방향 경계 횡단

  • 가장 단순한 형태의 경계 횡단이며, 저수준 client가 고수준 service를 호출합니다.
    • runtime 의존성과 compile time 의존성은 모두 저수준에서 고수준으로 같은 방향을 향합니다.
    • 제어 흐름도 경계를 횡단할 때 저수준에서 고수준으로 흐릅니다.
classDiagram
Client --> Service : ---- Boundary ----
Client --> Data : ---- Boundary ----
Service --> Data
<<DS>> Data
class Service {
    function()
}

역방향 경계 횡단

  • 제어 흐름과 반대 방향으로 의존성을 역전하는 경우이며, 고수준 client가 저수준 service를 호출합니다.
    • runtime 의존성은 compile time 의존성과는 반대가 됩니다.
  • 정적 link된 monolitic 구조의 실행 file이라도 이렇게 규칙적인 방식으로 구조를 분리하면 장점이 많습니다.
    • team들은 서로의 영역에 침범하지 않은 채, 자신만의 component를 독립적으로 작업할 수 있습니다.
    • 고수준 component는 저수준 세부 사항으로부터 독립적으로 유지됩니다.
classDiagram
Client --> Service
Client --> Data
Service <-- ServiceImpl : ---- Boundary ----
Data <|-- ServiceImpl : ---- Boundary ----
<<DS>> Data
class Service {
    <<interface>>
    function()
}
class ServiceImpl {
    function()
}

Reference

  • Clean Architecture (도서) - Robert C. Martin

목차