[책] 클린아키텍처: 아키텍처

문돌이 개발자·2025년 1월 22일

선택사항 열어두기

소프트웨어를 부드럽게 유지하는 방법은 중요치 않은 세부사항에 대해 열어두는 것이다.

이 장의 내용과 예시는 디테일에 의존하지 않아야 한다는 것이다. 그리고 이를 통해서 장치 독립성을 이뤄야 한다는 것.
입출력은 입출력 그 자체로 두고 어떤 입출력장치를 사용할지는 궁금해하지 않는 것이 좋다. 세부사항에 의존하게 되면 유지보수하는데 큰 비용이 들게 된다.

유스케이스

  • 시스템의 아키텍처는 시스템의 의도를 지원해야 한다.
  • 시스템의 행위와 관련하여 아키텍처가 큰 영향을 끼칠 수는 없지만, 행위를 명확히 하고 외부로 드러내어 의도를 아키텍처 수준에서 알아볼 수 있게 만들 수 있다.

운영

  • 운영관점에서 아키텍처는 더 실질적인 역할을 맡는다.
  • 작업을 원활하게 할 수 있는 구조화를 수행해야 한다.

개발

많은 팀으로 구성되며 관심사가 다양한 조직에서 시스템을 개발할 경우 각 팀이 독립적으로 행동하기 편한 아키텍처를 확보하여 서로 방해하지 않도록 해야 한다.

콘웨이의 법칙

  • 시스템을 설계하는 조직이라면 어디든지 그 조직의 의사소통 구조와 동일한 구조의 설계를 만들어 낼 것이다.

배포

즉각적인 배포가 목표

계층 결합 분리

UI의 변경은 업무 규칙과는 상관이 없다. 따라서 유스케이스 내에서 두 부분은 분리해야 한다.

유스케이스 결합 분리

유스케이스에서 사용하는 로직이 다른 유스케이스의 로직과 겹치지 않게 해야 한다.
로직 변경이 다른 유스케이스에 영향을 끼칠 수 있기 때문

수준별 분리 모드

소스 수준 분리 모드

  • 모노리틱 구조
  • 모든 컴포넌트가 같은 주소 공간에서 실행

배포 수준 분리 모드

  • jar, DLL, 공유 라이브러리와 같이 배포 가능한 단위로 분할

서비스 수준 분리 모드

  • 네트워크 패킷을 통해서만 통신하도록 만들 수 있음

유스케이스의 로직 분리 과정에서 재사용성에 대해서 한번 생각해봐야할 것 같다. 정말 해당 유스케이스에서만 사용되는 로직인지 아니면 공통된 로직을 따르는지..

profile
까먹고 다시 보려고 남기는 기록

0개의 댓글