테마
아키텍처 패턴
아키텍처 패턴(architecture pattern)은 시스템 전체를 어떤 덩어리로 나누고 그 덩어리들이 어떻게 소통할지 정한 검증된 틀이다. 클래스 몇 개의 관계를 다루는 디자인 패턴(design pattern)보다 한 단계 큰 그림이다. 처음부터 구조를 고민하지 않고 알려진 틀을 고르면 설계 시간이 줄고, 팀원이 구조를 금방 이해한다. 시험은 패턴 설명이나 대표 적용 예를 주고 패턴 이름을 쓰게 한다. 특히 파이프-필터 패턴(pipe-filter pattern)이 자주 나온다.
흐름과 계층으로 나누는 패턴
파이프-필터 패턴(pipe-filter pattern) 은 데이터 스트림(stream)을 처리하는 단계를 필터로 캡슐화(encapsulation)하고, 필터와 필터 사이를 파이프로 이어 데이터를 넘기는 구조다. 앞 필터의 결과가 파이프를 타고 다음 필터의 입력이 된다. 필터마다 한 가지 변환만 하므로 필터를 바꾸거나 순서를 재배치하기 쉽다. 데이터 변환·버퍼링·동기화에 주로 쓰고, 대표 예가 cat log | grep ERR | sort처럼 명령을 잇는 UNIX 셸(shell)이다.
다이어그램 로딩…
레이어 패턴(layered pattern) 은 시스템을 계층으로 쌓고, 각 계층은 바로 아래 계층의 서비스만 쓰고 바로 위 계층에만 서비스를 준다. 화면·업무 로직·데이터 접근으로 나누는 3계층 구조, OSI(Open Systems Interconnection, 개방형 시스템 상호 연결) 7계층이 예다. 한 계층을 갈아 끼워도 이웃 계층만 맞추면 된다.
역할을 나눠 협력하는 패턴
| 패턴 | 구조 | 대표 예 |
|---|---|---|
| 클라이언트-서버(client-server) | 하나의 서버가 여러 클라이언트의 요청에 응답 | 웹, 이메일 |
| 마스터-슬레이브(master-slave) | 마스터가 일을 나눠 슬레이브에 맡기고 결과를 모음 | 병렬 컴퓨팅, 장애 허용 시스템 |
| 브로커(broker) | 중개자가 요청에 맞는 서비스 컴포넌트(component)를 찾아 연결 | 분산 환경 시스템 |
| 피어 투 피어(peer-to-peer) | 각 피어가 클라이언트도 서버도 됨 | 파일 공유 네트워크 |
| 이벤트 버스(event-bus) | 채널에 이벤트를 발행하면 구독한 리스너가 처리 | 알림 서비스 |
| 블랙보드(blackboard) | 모든 컴포넌트가 공유 저장소에 접근해 중간 결과를 조금씩 더해 답을 완성함 | 음성 인식, 신호 해석 |
| 인터프리터(interpreter) | 전용 언어로 쓴 명령을 해석해 실행 | 번역기, 질의 언어 |
이 목록은 시험에서 쓰는 묶음이다. 가를란(David Garlan)과 쇼(Mary Shaw)의 1994년 아키텍처 스타일 정리에서는 이벤트 버스에 해당하는 것을 이벤트 기반 암묵적 호출(implicit invocation)이라 부르고, 블랙보드는 공유 저장소 스타일의 한 형태로, 인터프리터는 소프트웨어로 가상 기계를 만드는 별도 스타일로 다룬다. 시험은 인터프리터 패턴을 "기호마다 클래스를 둔다"는 말로 설명하기도 하는데, 이 표현은 같은 이름의 GoF(Gang of Four, 4인방) 행위 패턴(behavioral pattern)을 설명할 때 쓰는 말이다.
마스터-슬레이브는 요즘 기술 문서에서 프라이머리-레플리카(primary-replica)·리더-팔로워(leader-follower) 같은 이름으로 바꿔 부르는 경우가 많다. 시험 표기는 마스터-슬레이브다.
클라이언트-서버와 피어 투 피어는 "서버가 따로 있느냐"로 가른다. 브로커와 이벤트 버스는 둘 다 중간에 무언가를 두지만, 브로커는 요청을 알맞은 서비스에 이어 주는 중개자이고 이벤트 버스는 발행(publish)과 구독(subscribe) 으로 받는 쪽을 모른 채 뿌린다는 점이 다르다.
MVC 패턴
MVC(Model-View-Controller, 모델-뷰-컨트롤러) 패턴은 대화형 애플리케이션을 세 부분으로 나눈다. 모델은 데이터와 핵심 기능을, 뷰는 사용자에게 보여 주는 화면을, 컨트롤러는 사용자 입력을 받아 모델과 뷰를 조정하는 일을 맡는다. 화면과 데이터를 분리하므로 같은 데이터를 여러 화면으로 보여 주거나, 화면만 바꾸기 쉽다. 웹 프레임워크(framework) 대부분이 이 구조를 쓴다.
시험 포인트
- "데이터 스트림 단계를 필터로 캡슐화하고 파이프로 전달, 예: UNIX 셸" → 파이프-필터 패턴.
- "마스터가 슬레이브의 처리 결과를 돌려받음, 병렬 컴퓨팅" → 마스터-슬레이브 패턴.
- "요청에 맞는 컴포넌트와 사용자를 중개, 분산 환경" → 브로커 패턴.
- "피어가 클라이언트도 서버도 됨, 파일 공유" → 피어 투 피어 패턴.
- "채널 발행·구독, 알림 서비스" → 이벤트 버스 패턴. "공유 데이터 저장소, 음성 인식" → 블랙보드 패턴.
- 모델·뷰·컨트롤러 셋의 역할을 각각 한 줄로 쓸 수 있게 한다.
