SW 아키텍처 스타일과 품질 속성에 맞춘 구조 선택
SW 아키텍처 스타일의 역할과 저장소, MVC, 클라이언트/서버, 파이프 앤 필터 구조의 특성 및 선택 기준을 정리합니다.
2026-08-14 · 최초 발행 2026-04-17
시스템의 골격이 품질 속성을 결정한다
소프트웨어 아키텍처 스타일은 반복되는 설계 문제를 다루기 위해 구성 요소와 상호작용 방식을 구조화한 패턴이다. 기능 구현 이전에 시스템의 큰 골격을 정하며, 확장성·유지보수성·성능 같은 비기능 요구사항을 만족시키는 기반이 된다.
개별 시스템의 세부 요구를 반영하기 전, 어떤 단위로 시스템을 나누고 어떤 방식으로 연결할지를 정하는 것이 아키텍처 스타일의 역할이다. 단순한 구조도가 아니라 다음의 규칙과 경계를 함께 포함한다.
- 아키텍처 구성 요소: 컴포넌트와 모듈처럼 시스템을 이루는 물리적 또는 논리적 단위
- 관계와 구성 방식: 각 구성 요소의 연결 및 배치 규칙
- 요소의 의미와 한계: 역할의 경계와 제약 사항
- 상호작용 메커니즘: 데이터 전달 방식과 제어 흐름을 담당하는 커넥터
데이터 공유 방식에 집중하는 저장소 구조
저장소 구조(Data Repository Style)는 여러 서브시스템이 중앙 저장소의 대규모 데이터를 공유하고 변경하는 방식이다. 데이터 중심의 복잡한 연산이 필요한 시스템에 맞는다.
데이터를 한곳에서 관리하므로 무결성 관리가 쉽고, 서브시스템끼리 직접 통신하지 않아도 데이터를 공유할 수 있다. 새로운 서브시스템을 추가하기에도 유리하며 데이터 통합 관리도 효율적이다.
반대로 중앙 저장소의 성능 저하는 전체 시스템 병목으로 이어질 수 있다. 저장소 스키마를 바꾸면 이를 사용하는 모든 서브시스템이 영향을 받는다는 점도 고려해야 한다.
화면과 로직을 분리하는 MVC
MVC(Model-View-Controller)는 사용자 인터페이스, 비즈니스 로직, 데이터 처리를 분리해 각각을 독립적으로 개발하고 유지보수하도록 하는 모델이다.
Model은 시스템 데이터와 핵심 로직을 맡는다. View는 사용자에게 보여 주는 인터페이스를 관리하며, Controller는 사용자 입력을 받아 Model을 갱신하거나 View를 제어한다. UI 변화가 잦은 웹 서비스나 애플리케이션에서는 이 분리가 변경 범위를 제한하는 데 도움이 된다.
요청과 제공을 나누는 클라이언트/서버 구조
클라이언트/서버 구조(Client-Server Style)는 서비스를 요청하는 클라이언트와 서비스를 제공하는 서버로 구성되는 네트워크 기반 구조다. 양쪽은 서로 다른 하드웨어에서 실행될 수 있고, 네트워크 프로토콜을 통해 통신한다.
서버 자원을 집중적으로 관리할 수 있으며, 다수의 클라이언트가 동시에 서비스에 접근하는 구조를 만들 수 있다. 대규모 동시 접속이 중요한 상황에서는 이와 같은 분산 구조가 필요하다.
처리 단계를 연결하는 파이프 앤 필터
Data Flow 구조, 즉 Pipe and Filter는 한 서브시스템이 입력을 처리한 결과를 다음 서브시스템으로 넘기고, 그 과정이 연속되는 형태다. 컴파일러나 이미지 프로세싱 파이프라인이 대표적인 예다.
Filter는 데이터를 가공하는 처리 단위이며, Pipe는 필터 사이에서 데이터를 전달하는 통로다. 데이터 흐름이 빈번하거나 대용량 처리가 필요할 때 유리할 수 있지만, 각 단계에서 발생하는 오버헤드는 함께 검토해야 한다.
품질 속성에서 출발하는 스타일 선택
아키텍처 스타일은 이름이나 유행보다 시스템이 해결해야 하는 문제에 따라 골라야 한다. 데이터 흐름과 처리량이 핵심이면 파이프 앤 필터의 단계별 처리 특성을 검토하고, UI 변경이 빈번하면 MVC로 화면과 로직의 결합을 낮추는 방식을 고려할 수 있다.
신뢰성은 저장소 구조에서 특히 중요하다. 중앙 저장소의 가용성은 시스템 전체의 생존과 연결되므로, 고가용성(HA) 구성과 데이터 백업 전략을 아키텍처에 포함해야 한다.
초기 설계에 드는 비용만으로 구조를 판단하기는 어렵다. 시스템의 목적과 핵심 문제를 먼저 명확히 한 뒤, 운영과 유지보수 단계까지 감당할 수 있는 스타일을 선택하는 일이 아키텍처 설계의 핵심이다.
Sources
- Garlan, D., & Shaw, M. (1993). An Introduction to Software Architecture.
- Bass, L., Clements, P., & Kazman, R. (2012). Software Architecture in Practice.
- IEEE 1471-2000, Recommended Practice for Architectural Description of Software-Intensive Systems.