모든 백엔드 엔지니어가 알아야 할 분산 시스템 패턴
요약
분산 시스템 구축 시 발생하는 네트워크 불확실성과 장애를 관리하기 위한 핵심 패턴들을 소개합니다. 사가, 아웃박스, 서킷 브레이커 등 주요 패턴의 작동 원리와 목적을 설명합니다.
핵심 포인트
- Saga 패턴을 통한 분산 트랜잭션 및 보상 작업 관리
- Outbox 패턴으로 이중 쓰기 문제 해결 및 메시지 발행 보장
- Circuit Breaker와 Bulkhead를 이용한 장애 전파 방지 및 격리
- Leader Election을 통한 복제본 그룹의 조정 및 일관성 유지
- Sidecar 패턴을 활용한 횡단 관심사의 분리 및 관리
모든 백엔드 엔지니어가 알아야 할 분산 시스템 패턴
분산 시스템 (Distributed systems)을 구축하는 것은 어렵습니다. 단일 머신에서 작동하던 가정들이 규모가 커짐에 따라 무너지기 때문입니다. 네트워크는 신뢰할 수 없고, 시계는 부정확하며, 부분적 장애 (Partial failures)가 일반적입니다. 핵심 패턴을 배우는 것은 이러한 현실 속에서도 생존할 수 있는 시스템을 구축하는 데 도움이 됩니다.
사가 패턴 (Saga pattern)은 여러 서비스에 걸친 분산 트랜잭션 (Distributed transactions)을 관리합니다. 2단계 커밋 (Two-phase commit) 대신, 사가는 트랜잭션을 일련의 로컬 트랜잭션 (Local transactions)으로 나누고 롤백 (Rollback)을 위한 보상 작업 (Compensating actions)을 수행합니다. 만약 세 번째 단계가 실패하면, 사가는 첫 번째와 두 번째 단계에 대한 보상 작업을 실행합니다. 사가는 코레오그래피 (Choreographed) 방식이나 오케스트레이션 (Orchestrated) 방식으로 구현될 수 있습니다. 코레오그래피 사가는 결합도가 더 낮지만 추론하기가 더 어렵습니다. 오케스트레이션 사가는 디버깅하기는 더 쉽지만 중앙 집중식 조정 지점 (Central point of coordination)을 생성합니다.
아웃박스 패턴 (Outbox pattern)은 신뢰할 수 있는 메시지 발행을 보장합니다. 서비스가 데이터베이스 트랜잭션 (Database transaction)의 일부로 이벤트를 발행해야 할 때, 동일한 데이터베이스 트랜잭션 내의 아웃박스 테이블 (Outbox table)에 이벤트를 기록합니다. 별도의 프로세스가 아웃박스를 읽어 이벤트를 발행합니다. 이는 트랜잭션이 커밋 (Commit)되는 경우에만 이벤트가 발행되도록 보장하여, 이중 쓰기 문제 (Dual-write problem)를 제거합니다.
서킷 브레이커 패턴 (Circuit breaker pattern)은 연쇄 장애 (Cascading failures)를 방지합니다. 다운스트림 (Downstream) 서비스에 장애가 발생하기 시작하면, 서킷 브레이커가 작동(Trip)하여 이후의 호출은 호출을 시도하지 않고 즉시 실패 처리됩니다. 타임아웃 (Timeout) 후, 회로는 서비스가 복구되었는지 확인하기 위해 몇 개의 테스트 요청을 허용합니다. 이를 통해 장애가 발생한 서비스가 재시도 (Retries)에 의해 압도당하지 않고 복구할 시간을 가질 수 있습니다.
벌크헤드 패턴 (Bulkhead pattern)은 리소스를 분할하여 장애를 격리합니다. 각 서비스 또는 컴포넌트는 자신만의 스레드 풀 (Thread pool)과 커넥션 풀 (Connection pool)을 가집니다. 한 파티션의 장애가 다른 파티션의 리소스를 소모할 수 없습니다. 이는 노이지 네이버 (Noisy neighbor)가 전체 시스템을 다운시키는 것을 방지합니다.
리더 선출 (Leader election)은 복제본 (replicas) 그룹을 조정할 노드 하나를 선택합니다. Raft 및 Paxos와 같은 알고리즘은 어떤 시점에도 최대 하나의 리더만 존재하도록 보장합니다. 리더 선출은 단일 쓰기 권한자 (single writer) 또는 조정자 (coordinator)가 필요한 시스템에 필수적입니다.
사이드카 패턴 (Sidecar pattern)은 메인 서비스와 함께 별도의 컨테이너에 보조 기능을 배포합니다. 사이드카는 메인 애플리케이션 코드를 수정하지 않고도 로깅 (logging), 모니터링 (monitoring), 서비스 메시 (service mesh) 트래픽 관리와 같은 횡단 관심사 (cross-cutting concerns)를 처리합니다.
Rizwan Saleem | https://rizwansaleem.co
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기