✅ 패턴 설명 템플릿
항목 설명
Name (이름) | 패턴의 명칭. 간결하고 핵심 개념을 잘 드러내야 함. |
Context (맥락) | 이 패턴이 적용되는 일반적인 시스템 환경 또는 상황. |
Problem (문제) | 패턴이 해결하고자 하는 근본적인 문제나 어려움. 시스템 관점에서 어떤 제약이나 한계가 존재하는지 설명. |
Forces (제약 요인) | 문제 해결을 어렵게 만드는 상충되는 요구사항이나 시스템 제약. 예: 지연 시간 vs 일관성 |
Solution (해결책) | 문제를 해결하기 위한 일반적인 설계 방식 또는 전략. 구성 요소와 흐름 등을 포함. |
Structure (구조) | 구성 요소 간의 관계를 나타내는 다이어그램 (예: Mermaid, UML 등). |
Resulting Context (결과 맥락) | 패턴 적용 이후의 시스템 특성. 해결된 점과 새롭게 생긴 트레이드오프를 함께 기술. |
Example (사례) | 실제 시스템에서 이 패턴이 사용된 사례를 간략히 설명. |
Related Patterns (관련 패턴) | 함께 사용되거나 대안으로 적용될 수 있는 패턴들. |
✅ 예시: Follower Reads 패턴
Name
Follower Reads
Context
- 시스템이 리더-팔로워 복제 구조를 사용하고 있음.
- 전체 요청 중 읽기 요청이 대부분을 차지함.
- 클라이언트가 여러 리전(데이터센터)에 분산되어 있음.
Problem
- 모든 읽기 요청이 리더로 집중되면서 과부하 발생.
- 클라이언트가 리더와 멀리 떨어져 있을 경우 응답 지연이 심화됨.
- 시스템의 전체 처리량이 제한되고 병목이 발생함.
Forces
- 일관성(Consistency): 최신 데이터를 읽고자 하는 요구가 있음.
- 지연 시간(Latency): 빠른 응답이 필요함.
- 가용성(Availability): 리더 장애 시에도 읽기가 가능해야 함.
Solution
- 읽기 요청을 리더뿐만 아니라 팔로워에서도 처리 가능하게 함.
- 클라이언트는 지리적으로 가까운 팔로워 또는 네트워크 지연이 가장 낮은 노드를 선택함.
- 읽기 일관성을 위해 버전 정보(예: 하이브리드 클럭, 타임스탬프 등)를 요청에 포함하여 특정 버전 이상의 값만 읽도록 제한함.
- 팔로워가 해당 버전 도달 전이면 대기하거나 타임아웃 후 리더 또는 다른 팔로워로 재시도함.
Structure
graph TD
Client -->|쓰기 요청| Leader
Client -->|읽기 요청| Follower1
Client -->|읽기 요청| Follower2
Leader --> Follower1
Leader --> Follower2
Resulting Context
- 리더의 부하가 줄고 쓰기 성능이 향상됨.
- 읽기 요청의 지연 시간이 개선됨.
- 복제 지연으로 인해 오래된 데이터가 읽힐 가능성 존재.
- 읽기 일관성을 보장하기 위한 추가 구현 필요.
Example
- MongoDB: operationTime과 maxStalenessSeconds를 통해 원인 기반 일관성 제공.
- CockroachDB: closed timestamps 기반 Follower Reads 지원.
- Neo4j: Bookmark를 기반으로 팔로워에서 일관된 읽기 수행.
- Apache Kafka: 팔로워 브로커에서 읽기 가능. 최신 오프셋 없을 시 오류를 반환하고 재시도 유도.
Related Patterns
- Leader and Followers
- Causal Consistency
- Read Repair
- Hybrid Clock