6.1 분해

다양한 기준에도 불구하고 대형 시스템 개발의 주요 과제는 시스템의 복잡성을 줄이는 것 입니다 . 복잡성을 줄이기 위해 부품으로 나누는 것 외에는 아직 발명되지 않았습니다.

때로는 단순함을 위해 이것을 "분할 정복"의 원칙이라고 부르지만 소프트웨어 설계자의 관점에서 우리는 계층 적 분해 에 대해 이야기하고 있습니다 .

복잡한 시스템은 소수의 단순한 하위 시스템으로 구축되어야 하며, 각 하위 시스템은 더 작은 부분으로 구성되며, 가장 작은 부분이 직접 이해하고 생성할 수 있을 만큼 단순해질 때까지 계속됩니다.

분해

좋은 소식은 이 솔루션이 유일하게 알려졌을 뿐만 아니라 보편적이라는 것입니다. 복잡성을 줄이는 것 외에도 중요한 부분을 복제하여 시스템 유연성 , 우수한 확장성 및 탄력성을 동시에 제공합니다.

따라서 프로그램의 아키텍처를 구축하고 구조를 생성한다는 것은 프로그램을 하위 시스템, 서비스, 계층, 하위 루틴 및 기능 모듈로 분해하고 서로 및 외부 세계와의 상호 작용을 구성하는 것을 의미합니다.

여기서 가장 중요한 것은 하위 시스템이 더 독립적일수록 다른 모든 부분에 대해 걱정하지 않고 특정 시점에 개별적으로 각 하위 시스템의 개발에 집중하는 것이 더 안전하다는 것입니다.

6.2 모듈식 아키텍처의 이점

계층적 분해 원칙을 사용하면 수천 개의 코드 클래스에서 혼돈을 제거할 수 있습니다. 코드가 패키지(패키지)와 하위 패키지로 나뉜다는 것을 기억하십니까? 이것은 계층적 분해에 대한 표현 중 하나입니다.

프로그램은 여러 클래스에서 잘 정의되고 간단한 규칙에 따라 서로 상호 작용하는 일련의 라이브러리 및 모듈로 바뀝니다. 이를 통해 복잡성을 제어할 수 있으며 일반적으로 좋은 아키텍처의 개념과 관련된 모든 이점을 얻을 수 있는 기회를 제공합니다.

다음은 가장 기본적인 것입니다.

  • 확장성 - 새 모듈을 추가하여 시스템을 확장하고 성능을 높이는 기능입니다.
  • 유지 보수성 - 하나의 모듈을 변경해도 다른 모듈을 변경할 필요가 없습니다.
  • 모듈의 교환성 (Swappability) - 모듈을 다른 모듈로 쉽게 교체할 수 있습니다.
  • 유닛 테스팅 – 유닛은 다른 모든 유닛에서 분리되어 테스트/수리될 수 있습니다 .
  • 재사용성 - 모듈을 다른 프로그램 및 다른 환경에서 재사용할 수 있습니다.
  • 유지 관리 - 모듈로 나누어진 프로그램이 이해하고 유지 관리하기 쉽습니다.

복잡한 문제를 단순한 파편으로 쪼개는 것이 모든 설계 기법의 목표라고 할 수 있습니다 . 그리고 대부분의 경우 "아키텍처"라는 용어는 이러한 분할의 결과와 "일단 채택되면 변경하기 어려운 일부 설계 결정"을 의미합니다 (Martin Fowler "엔터프라이즈 소프트웨어 애플리케이션의 아키텍처").

따라서 어떤 형태로든 대부분의 정의는 다음과 같이 요약됩니다.

" 아키텍처는 시스템의 주요 구성 요소와 이들이 상호 작용하는 방식을 식별합니다. 또한 근본적인 것으로 해석되고 미래에 변경되지 않는 결정 의 선택이기도 합니다 ."

" 아키텍처는 시스템의 조직으로, 구성 요소에 구현되어 있으며 서로 간의 관계 및 환경과의 관계입니다. 시스템은 특정 기능을 수행하기 위해 결합된 구성 요소 집합입니다. "

따라서 좋은 아키텍처는 무엇보다도 모듈식/블록 아키텍처입니다 . 좋은 아키텍처를 얻으려면 시스템을 적절하게 분해하는 방법을 알아야 합니다. 즉, 어떤 분해가 "올바른" 것으로 간주되고 이를 수행하는 것이 가장 좋은지 이해해야 합니다.