clean-architecture-book-thumbnail

소프트웨어 아키텍처는 선을 긋는 기술이고, 저자는 이런 선을 경계(boundary)라고 부른다.

Table of Contents

두 가지 슬픈 이야기

  • 너무 이른 결정은 추후 문제가 발생할 수 있다.

FitNesse

Fitnesse는 저자가 아들(Micha)과 만든 사이트 이다.

  • 웹 서버를 직접 작성하기로 결정 했다.

    • 기본 뼈대만 갖춘 웹 서버는 단순한 단일 소프트웨어이기에 구현이 간단할 뿐만 아니라, 어떤 웹 프레임워크를 사용할지에 대한 결정을 훨씬 나중으로 연기할 수 있도록 해주었다.
  • 데이터베이스에 고민하지 말기로 결정했다. → 어떤 데이터베이스를 사용하던 상관없음

    • 모든 데이터 접근 영역과 데이터 저장소 영역 사이에 인터페이스를 추가하는 간단한 설계 방식을 사용했다.

경계선을 긋는 행위는 결정을 늦추고 연기하는 데 도움이 된다. → 시간 절약, 골치 안 썩임

좋은 아키텍처라면 반드시 해야 하는 일이다.

어떻게 선을 그을까? 그리고 언제 그을까?

관련이 있는 것과 없는 것 사이에 선을 긋는다.

  • GUI는 업무 규칙과는 관련이 없다.
  • 데이터베이스는 GUI와는 관려이 없다.
  • 데이터베이스는 업무 규칙과 관련이 없다.

입력과 출력은?

  • GUI는 시스템이 아니다.

    • 눈으로 동작하는 모습을 볼 수 있어야 하는게 아니다. → 입력과 출력은 중요하지 않다.
  • GUI와 BusinessRules 는 분리되어야 한다.

플러그인 아키텍처

소프트웨어 개발 기술의 역사는 플러그인을 손쉽게 생성하여, 확장 가능하며 유지보수가 쉬운 시스템 아키텍처를 확립할 수 있게 만드는 방법에 대한 이야기다.

데이터베이스를 쉽게 교체할 수 있는 건 아니다.

  • 하지만 플러그인 구조를 가정한 채 시작함으로써, 최소한 우리는 변경 작업을 현실성 있도록 만들 수 있다.

플러그인에 대한 논의

ReSharper와 비주얼 스튜디오(Visual Studio)의 의존성 관계를 설명한다.

  • ReSharper의 소스 코드는 비주얼 스튜디오의 소스코드에 의존한다.

    • ReSharper 팀은 비주얼 스튜디오 팀을 건드릴 수 없지만, 비주얼 스튜디오 팀은 ReSharper 팀을 무력화할 수 있다.
  • 이 관계는 비대칭적이며, 시스템에서 갖추고자 하는 관계에 해당한다.
  • 특정 모듈이 나머지 모듈에 영향받지 않기를 바란다.
  • 단일 책임 원칙은 어디에 경계를 그어야 할지를 알려준다.

결론

소프트웨어 아키텍처에서 경계선을 그리려면 먼저 시스템을 컴포넌트 단위로 분할해야 한다.

컴포넌트 사이의 화살표가 특정 방향(핵심 업무)을 향하도록 배치

의존성 역전 원칙과 안정된 추상화 원칙을 응용한 것임을 눈치챌 수 있어야 한다.

  • 의존성 화살표는 저수준 세부사항에서 고수준 추상화를 향하도록 배치 된다.

References

  • 모든 출처는 Clean Architecture 도서에 있습니다.