본문 바로가기
개발

[Architecture] Architectural Style 이란?

by ▶ Carpe diem ◀ 2024. 3. 11.

Architectural Style 정의, Architectural Style 이 중요한 이유, 대표적인 Architectural Style 들에 대해 알아보고자 합니다.

 

 

목차

     

    Architectural Style 이란?

    Architectural Style 의 개념은 다양한 연구자들에 의해 발전되었지만, Mary Shaw와 David Garlan은 이 분야에서 중요한 역할을 했습니다.

    Mary Shaw와 David Garlan @ CMU
    Mary Shaw와 David Garlan @ CMU

     

    그들은 "Software Architecture: Perspectives on an Emerging Discipline"라는 책을 통해 다양한 Architectural Style 을 분류하고 설명함으로써, 소프트웨어 아키텍처라는 학문 분야의 기초를 마련했습니다.

    Software Architecture 책 표지
    Software Architecture 책 표지

     

    Architectural Style 정의

    Architectural Style 은 소프트웨어 시스템의 구조를 정의하는 기본적인 조직 스키마입니다. 이는 시스템의 구성 요소들, 그들 사이의 관계, 그리고 그들이 상호 작용하는 방법을 규정합니다. 각각의 구성 요소는 소프트웨어 아키텍처 설계에 있어서 중요한 역할을 하며, 시스템의 전반적인 구조와 작동 방식을 이해하는 데 필수적입니다.

    Architetural Style 을 결정하는 요소들
    Architetural Style 을 결정하는 요소들

     

    Element Types (요소 유형)
    계층화된 아키텍처에서 요소 유형은 주로 시스템을 구성하는 계층(Layers)입니다. 각 계층은 특정한 책임과 역할을 가진 구성 요소의 집합으로, 다른 계층과 명확히 구분됩니다.

    • 예시: 전형적인 웹 애플리케이션에서 볼 수 있는 계층으로는 프레젠테이션 계층(Presentation Layer), 비즈니스 로직 계층(Business Logic Layer), 데이터 액세스 계층(Data Access Layer) 등이 있습니다.

     

    Relationships Between Elements (요소 간의 관계)
    계층화된 아키텍처에서 요소 간의 관계는 계층 사이의 상호 작용을 설명합니다. 이 관계는 주로 계층 간의 데이터 흐름과 제어 흐름을 정의합니다.

    • 예시: 프레젠테이션 계층은 사용자 인터페이스와 직접 상호작용하고, 사용자의 입력을 비즈니스 로직 계층으로 전달합니다. 비즈니스 로직 계층은 이러한 요청을 처리하고 필요한 데이터 처리를 위해 데이터 액세스 계층에 요청을 보냅니다. 데이터 액세스 계층은 데이터베이스나 다른 영구 저장소와의 상호작용을 관리합니다.

     

    Constraints on the Topology and Behavior (토폴로지와 행동에 대한 제약 조건)
    계층화된 아키텍처에서 토폴로지와 행동에 대한 제약 조건은 계층 구조와 계층 간 상호작용의 규칙을 정의합니다. 이러한 제약 조건은 아키텍처의 일관성과 예측 가능성을 보장하는 데 중요합니다.

    • 예시: 한 가지 일반적인 제약 조건은 계층은 오직 바로 아래에 있는 계층에만 요청을 할 수 있다는 것입니다. 예를 들어, 프레젠테이션 계층은 데이터 액세스 계층을 직접 호출할 수 없으며, 비즈니스 로직 계층을 통해야 합니다. 또 다른 제약 조건은 모든 요청이 최상위 계층에서 시작되어야 하고, 최하위 계층으로 순차적으로 흘러가야 한다는 것입니다. 이런 제약 조건은 시스템의 구조적인 청결함과 재사용성을 증가시킵니다.

     

    Architectural Style 은 시스템의 설계 철학을 반영하며, 재사용 가능한 설계의 골격을 제공하여 개발 과정을 지침화하고, 시스템의 품질 속성(성능, 확장성, 유지보수성 등)을 지원합니다.

     

    Architectural Style과 Architectural Pattern은 다른 것인가?

    Architectural Style과 Architectural Pattern은 혼용되어 사용되지만, 그 의미와 적용 범위에 있어서 미묘한 차이가 있습니다.

     

    Architectural Style

    • 정의: Architectural Style 은 위에서 알아본 것과 같이 소프트웨어 시스템을 구성하는 데 사용되는 기본적인 구조적 조직 스키마입니다. 이는 시스템의 구성 요소들이 어떻게 배열되어 있는지, 그리고 그 구성 요소들이 어떻게 상호 작용하는지를 규정합니다.
    • 적용: Architectural Style 은 보다 일반적이고 추상적인 수준에서 시스템의 전체적인 구조적 스키마를 정의합니다. 이는 소프트웨어의 전반적인 설계 철학과 방향성을 제공하며, 다양한 종류의 시스템에 적용될 수 있는 넓은 범위를 가집니다.

     

    Architectural  Pattern

    • 정의: 아키텍처 패턴은 특정 문제를 해결하는 데 도움이 되는 재사용 가능한 솔루션입니다. 이는 아키텍처 스타일 내에서 더 구체적인 문제를 해결하기 위한 지침과 템플릿을 제공합니다.
    • 적용: 아키텍처 패턴은 특정 문제 영역이나 프로젝트 요구 사항에 맞춰진 솔루션을 제공합니다. 이는 특정 아키텍처 스타일 내에서 발생할 수 있는 구체적인 설계 과제를 해결하는 데 중점을 둡니다.

    차이점을 요약하면 다음과 같습니다.

    • 범위와 적용: 아키텍처 스타일은 보다 광범위하고 추상적인 수준에서 시스템을 설계하는 데 사용되는 반면, 아키텍처 패턴은 특정 설계 문제에 대한 구체적인 해결책을 제공합니다.
    • 설계 철학과 방향성: 아키텍처 스타일은 시스템의 기본 설계 철학과 방향성을 설정하는 반면, 아키텍처 패턴은 그 철학을 구현하는 구체적인 방법론과 지침을 제공합니다.
    • 재사용성: 아키텍처 패턴은 특정 문제 해결을 위한 재사용 가능한 솔루션을 제공하는 데 초점을 맞춘 반면, 아키텍처 스타일은 시스템의 전체 구조를 정의합니다.

     

     

    Architectural Style 이 중요한 이유

    Architectural Style 의 중요성은 다음 문장에서 잘 나타내고 있습니다.

    The important thing about an architectural style is that it encapsulates important decisions about the architectural elements and emphasizes important constraints on the elements and their relationships.

     

    • 중요한 설계 결정을 담고 있음: 어떤 아키텍처 스타일은 시스템을 구성하는 요소들 (레이어, 컴포넌트 등) 과 그들 간의 관계에 대한 기본적인 설계 방침을 제공합니다. 이러한 설계 방침은 시스템을 어떻게 구성하고 작동시킬지에 대한 중요한 결정을 담고 있습니다.
    • 요소들과 관계에 대한 중요한 제약 사항을 강조함: 아키텍처 스타일은 어떤 요소들이 서로 상호 작용할 수 있는지, 어떤 제약 사항이 있는지 등을 명확하게 규정합니다. 이를 통해 시스템의 설계와 구현의 일관성을 유지하고 문제를 예방할 수 있습니다.

    예를 들어, 레이어드 아키텍처 스타일은 시스템을 수평 레이어로 나누고 각 레이어는 특정 기능을 수행하며 위아래 레이어와만 통신하도록 제약합니다. 이러한 설계 방식은 코드의 이해 및 유지 보수를 용이하게 합니다. 따라서, 아키텍처 스타일은 시스템 설계를 위한 템플릿과 같습니다. 이 템플릿은 시스템을 구축하는 데 필요한 기본적인 설계 패턴과 제약 사항을 제공하여 개발자들이 시스템을 효율적이고 일관되게 구현할 수 있도록 돕습니다.

     

    위 문장은 아래 첨부된 논문(Foundations for the Study of Software Architecture)에서 언급되었습니다. 이 논문은 소프트웨어 아키텍처 연구의 기초를 마련한 핵심적인 작업 중 하나로, 관심 있으신 분들은 읽어보시면 좋을 것 같습니다.

    Foundations for the Study of Software Architecture.pdf
    1.24MB

     

     

    소프트웨어 Architectural Style 의 중요성을 정리해보면 다음과 같습니다.

    • 품질 속성 보장: Architectural Style 은 특정 품질 요구 사항을 충족시키는 데 도움이 됩니다. 예를 들어, 계층화된(Layered) 스타일은 유지보수성을 향상시키고, 이벤트 주도 아키텍처(Event-Driven Architecture)는 시스템의 응답성과 확장성을 증가시킵니다.
    • 재사용성과 일관성: 검증된 스키마를 사용함으로써, 개발자는 재사용 가능한 설계를 적용할 수 있으며, 이는 일관성 있는 시스템 아키텍처를 구축하는 데 도움이 됩니다.
    • 의사소통 향상: 공통의 언어를 사용함으로써 팀원들 간의 의사소통을 촉진하고, 아키텍처의 의도를 명확하게 전달할 수 있습니다.
    • 가이드라인 제공: Architectural Style 은 시스템 설계와 관련된 주요 결정들에 대한 가이드라인을 제공합니다. 이는 복잡한 설계 결정을 단순화하고, 효율적인 문제 해결을 가능하게 합니다.

     

     

    대표적인 Architectural Style들

    1995년에 David Garlan과 Mary Shaw는 소프트웨어 시스템의 구조를 설명하고 분석하는 데 사용할 수 있는 여러 가지 아키텍처 스타일을 정리하고 설명하였습니다. Garlan과 Shaw의 작업은 소프트웨어 아키텍처를 체계적으로 이해하고 연구하는 기초를 마련했으며, 다양한 아키텍처 스타일의 특성, 장점, 사용 사례를 제공함으로써 설계자들이 보다 정보에 기반한 결정을 내릴 수 있도록 도왔습니다.

     

    Architecture 스타일에는 다양한 종류가 있으며, 일부는 다음과 같습니다:

    • Layered (계층화된 스타일): 이 스타일은 시스템을 여러 계층으로 구분하며, 각 계층은 특정한 책임을 가집니다. 대표적으로 프레젠테이션 계층, 비즈니스 로직 계층, 데이터 액세스 계층 등이 있습니다.
      Layered Architecture
      Layered Architecture
    • Client-Server (클라이언트-서버 스타일): 이 스타일에서 클라이언트는 서비스를 요청하고, 서버는 이러한 요청에 응답하여 서비스를 제공합니다. 이 모델은 네트워크 기반 응용 프로그램에서 널리 사용됩니다.
      Client-Server Architecture
      Client-Server Architecture
    • Pipe-and-Filter (파이프-필터 스타일): 이 스타일은 데이터 스트림을 처리하기 위한 필터들의 연속으로 구성됩니다. 각 필터는 데이터에 특정 연산을 수행하며, 파이프는 필터들 사이의 데이터 흐름을 연결합니다.
      Pipe-and-Filter Architecture
      Pipe-and-Filter Architecture
    • Peer-to-Peer (P2P, 피어-투-피어 스타일): 이 스타일에서 각 노드는 클라이언트와 서버 역할을 모두 수행할 수 있습니다. P2P는 중앙 집중식 서버 없이 노드 간에 직접 통신합니다.

    Peer-to-Peer Architecture
    Peer-to-Peer Architecture

     

     

    Architectural Style 정의, Architectural Style 이 중요한 이유, 대표적인 Architectural Style 들에 대해 알아보았습니다. 시간이 되면 각 Architectural Style 의 장단점에 대해 하나씩 알아보겠습니다.