반디북
소프트웨어 아키텍처 101
Ch7
도은
  • 소프트웨어 아키텍처 세계에서는 전통적으로 아키텍처 특성의 범위를 시스템 레벨에 두는 것을 당연시했다.
  • 예를 들어 확장성을 논할 때에는 일반적으로 전체 시스템의 확장성을 가리키는 것
  • 개발 생태계가 변하면서 기존에 당연하게 여겼던 공식도 점점 퇴물로 전략하고 있다.
  • 아키텍터가 성능이 좋고 탄력적이 코드베이스를 설계하려고 아무리 노력해도 시스템이 그런 특성에 부합하지 않는 데이터베이스를 사용하면 애플리케이션이 성공할리가 없다.
  • 아키텍터는 운영 아키텍처 특성을 따져보고 아키텍처 특성에 영향을 미치는 코드베이스 외부의 컴포넌트를 잘 살펴봐야 한다.

7.1 커플링과 커네이선스

  • 두 컴포넌트 중 한쪽이 변경될 경우 다른 쪽도 변경해야 전체 시스템의 정합성이 맞는다면 이들은 커네이선스를 갖고 있는 것
    • 정적 코드 분석으로도 발견할 수 있는 정적 커네이선스와 런타임 동작과 관한 동적 커네이선스로 분류

7.2 아키텍처 퀀텀과 세분도

  • 아키텍처 퀀텀은 높은 기능 응집도와 동기적 커네이선스를 가진, 독립적으로 배포 가능한 아티팩트를 의미한다.
  • 아키텍처 퀀텀은 다른 파트와 독립적으로 작동되는 모든 필수 컴포넌트를 포함
  • 응집도는 컴포넌트 설계에 따라 구현된 코드가 얼마나 목적에 맞게 통합되어 있는지를 나타낸다.
  • 동기적 커네이선스는 아키텍처 퀀텀을 형성하는 애플리케이션 콘텍스트 내부 또는 분산 서비스 간의 동기 호출을 의미한다.
  • 어떤 서비스(호출부)는 많은 요청을 처리할 수 있을 만큼 확장성이 좋은데, 이 서비스가 호출하는 다른 서비스(피호출부)는 그만큼 빠르게 처리하지 못한다면, 요청이 지연되거나(타임아웃), 오류가 발생하는 등 신뢰성에 문제가 생길 수 있다.
  • 현대 시스템에서 아키텍트는 시스템 레벨보다는 퀀텀 레벨의 아키텍처 특성을 정의한다.
  • 중요한 운영 관심사에 대해 범위를 좁혀보면 중요한 아키텍처 문제를 조기에 발견하여 설계할 수 있다.