패턴이라는 용어를 자주 접했습니다. 파사드 패턴, pub-sub 패턴 등 땡땡-패턴이라고 많이 보았습니다. 도대체 패턴이 무엇이길래 이렇게 패턴 패턴 용어가 생겼을까요. 패턴에 대해서 정리해 보려고 합니다.
패턴이란?
패턴은 문제를 해결할 수 있는 방법이라고 생각합니다. 과거에 문제를 해결한 사람들이 비슷한 문제를 해결하기 위해서 하나의 패턴을 만들었고 우리는 이렇게 만들어진 패턴을 이용해서 유사한 문제를 해결합니다. 건축에서 사용되던 패턴을 소프트웨어에도 적용해 보자고 해서 GoF(Gang of Four) 멤버들은 23개의 디자인 패턴을 추출했습니다. 이 패턴들을 배우다 보면 '과연 이것들이 쓰일까?'라는 의문이 듭니다. 하나만 분명하게 쓰인다면 쉽게 관찰할 수 있겠지만, 실제로는 여러 개의 패턴들이 뭉쳐서 사용되기 때문에 어떤 패턴들이 사용되는지 찾기 힘듭니다. 그러나 분명히 여러 디자인 패턴들이 사용되고 있습니다.
패턴 소개
패턴을 다룬 서적을 소개하겠습니다. POSA (pattern oriented software architecture)라는 책이 있습니다. POSA 1권에서는 아키텍처 패턴에 대해서 다룹니다. POSA 2권에서는 대용량 네트워크, 분산 객체를 위한 패턴을 다룹니다. POSA 3권에서는 자원 관리를 위한 패턴을 다룹니다.
POSA 1권에서 소개된 패턴들에 대해서 간단하게 정리해보겠습니다.
Layer 패턴
키워드 : 의존성 관리
- 인접하는 레이어만 접근할 수 있도록 제한
- 한 개의 레이어가 변경되어도 그 영향은 상위 레이어만 발생
- 가장 상위 레이어를 통해서 입력이 들어가고 단계별로 호출
장점
- 계층이 분리되어 있으므로 소프트웨어 유지 관리에 용이
- 담당자는 자기 레이어와 인접하는 레이어의 인터페이만 숙지하면 됨
단점
- 과도한 계층 통과로 성능 저하 발생
- 불필요한 코드 발생
Pipe-Filter 패턴
키워드 : 유연한 pipe-filter 조립
- 각 필터(레이어)를 거치면서 데이터를 삽입, 변경, 조작해서 원하는 형태로 데이터를 변경
장점
- 필터를 넣고 뺄 수 있어서 동적으로 원하는 형태의 데이터를 변경 및 추출 가능
- 병렬 처리 가능
단점
- 가장 느린 필터로 인해서 전체 성능이 저하될 수 있음
- 필터간에 데이터 변환 오버헤드 비용이 증가할 수 있음
Broker 패턴
키워드 : 이질적인 환경간에 통신
- 이질적인 클라이언트 또는 서버 환경에서 통신을 할 떄 사용
- Broker에서 우선 순위 조절 및 복잡도를 흡수하기 때문에 가능
장점
- 서로 다른 언어, 플랫폼이라도 통신 가능
- 모든 메시지를 broker를 통해 주고 받으니 모니터링 가능
단점
- IDL (Interface Description Language) 숙지 필요
- 이질적인 환경간의 통신을 고려하기 때문에 데이터 마샬링(데이터 변환 과정) 및 언마샬링 고려
Master-Slave 패턴
키워드 : 역할 분리
- Master는 제어권과 우선순위를 조절하여 Slave에게 일을 분배
- 복잡한 일을 sub-task로 나누어 분배
- DB 복제에서는 Master(쓰기 전용)-Slave(읽기 전용)으로 사용
장점
- Slave를 교체하거나 확장이 가능 (탄력적인 부하에 대응)
- 효율성 향상
단점
- Master과 Slave간에 종속성이 강함
- Master가 죽을 경우에 대비해야 함
Client-Dispatcher 패턴
키워드 : 쉬운 프로토콜 변경
- 프로토콜의 추가/삭제/변경을 쉽게 할 수 있음
장점
- 프로토콜에 추가/삭제 시 코드 변경 없이 확장 가능한 패턴
- 모든 서버에서 사용 가능
- Reactor/Rroactor/Con-Acc 패턴으로 진화
Forward-Receiver (P2P) 패턴
키워드 : 1:1 통신
- 하나의 서버에 의존하지 않고 Peer간에 통신으로 원하는 목적 달성 (데이터 전송, 부하 분산)
장점
- 효율적인 IPC (Inter Process Communication), RPC (Remote Process Communication)이 가능
- 복잡한 IPC 메커니즘을 Forwarder와 Receiver로 은닉화
단점
- 컴포넌트의 유연한 재설정이 어려움 (Dispatcher 패턴에서는 Dispatcher가 일괄적으로 제어가 가능하지만, FP 패턴은 정책을 바꾸기 위해 많은 시간이 걸림)
Publisher-Subscriber 패턴
키워드 : 관심사를 구독
- 관심있는 주제(Topic, Publisher)가 있으면 구독자(Subscriber)로 등록
장점
- 계속 polling해서 묻는 것보다 의존관계를 역전시킴으로써 트래픽 감소
단점
- 다양한 주제를 다루거나 서브셋을 다룰 때에 비효율적 이슈가 발생 (Event Channel 패턴으로 진화)
Event Channer 패턴
키워드 : 관심사를 구독
- 관심있는 주제(Topic, Publisher)가 있으면 구독자(Subscriber)로 등록
- Pub-Sub의 진화형
Model-View-Controller 패턴
키워드 : 의존성 분리
- 유저 이벤트, 비지니스 로직, 데이터 관리를 분리해서 관리
'IT > Others' 카테고리의 다른 글
Reactor 패턴과 Proactor 패턴 (0) | 2023.05.06 |
---|---|
디자인 패턴 소개 (POSA 2) (0) | 2023.03.19 |
객체 지향 상속의 종류 : Subclassing 과 Subtyping (0) | 2022.11.26 |
싱글톤 패턴 (0) | 2022.08.27 |
전략 패턴 (0) | 2022.08.13 |