소프트웨어 설계에 있어서, 공통된 문제들에 대한 표준적 해결책을 ‘패턴’이라고 합니다. 이러한 패턴의 종류에는 2가지가 있습니다. 디자인 패턴과 아키텍처 패턴입니다.
디자인 패턴은 코드 레벨에서 반복되는 문제의 해결에 집중합니다. 시스템에서 사용하는 클래스, 메서드 간의 관계와 같이 미시적인 수준의 문제를 말합니다. 반면, 아키텍처 패턴은 시스템 레벨에서 반복되는 문제의 해결에 집중합니다. 모듈 간의 관계, 계층화, 비지니스 문제와 같은 거시적인 수준의 문제를 말합니다.
정리하면, 디자인 패턴은 코드 레벨의 미시적 문제 해결에 집중하는 반면 아키텍처 패턴 시스템 레벨의 거시적인 문제 해결에 집중합니다.
패턴은 특정 문제에 대한 표준화된 해결책입니다. 패턴을 제대로 이해하고 적용하기 위해서는 두 가지 측면을 주의 깊게 살펴봐야 합니다.
1970년대 이전 컴퓨터는 오직 CLI를 통해 제어 되었습니다. 하지만, 이는 매우 높은 진입 장벽을 발생 시켰습니다. 컴퓨터의 대중화를 위해 유저에게 친화적인 GUI가 등장했습니다. GUI 기반의 소프트웨어 디자인을 위해 1979년 Trygve Reenskaug라는 노르웨이 컴퓨터 과학자가 이를 MVC로 공식화 되었습니다.
MVC는 관심사의 분리를 목적으로 설계되었습니다. 이를 통해 소프트웨어를 Model, View, Controller로 나누어 각 요소의 역할을 명확히 정의했습니다.
전통적인 MVC는 세 가지 디자인 패턴을 통해 복잡한 애플리케이션 구조를 효율적으로 관리합니다. Composite 패턴으로 여러 View를 계층적으로 조합하고, Strategy 패턴을 통해 View에서 발생하는 사용자 액션의 처리 전략을 Controller에 위임하며, Observer 패턴으로 Model의 상태 변화를 View가 실시간으로 감지하고 즉각 반영합니다.