노트

데이터베이스 다중화

Database Replication

백엔드#db · 연결된 개념 8개

쉽게 말하면

DB 다중화는 반장 한 명만 노트에 필기하고 반 친구들은 그 복사본을 나눠 보는 구조예요. 보려는 사람이 많아도 나눠 볼 수 있고, 한 권을 잃어버려도 다른 사본이 남죠.

비유가 깨지는 곳 복사본은 보통 비동기로 조금 늦게 따라와서, 방금 쓴 값을 부 서버에서 바로 읽으면 옛 값이 보일 수 있어요. 주 서버가 죽어 부 서버를 승격할 때 아직 복제 안 된 데이터가 사라질 수도 있어요.

같은 데이터를 여러 DB 서버에 복제해 두는 것. 가장 흔한 형태는 원본을 가진 주(Primary) 서버가 쓰기를 받고, 사본을 받는 부(Replica) 서버들이 읽기를 나눠 맡는 구조다.

  • 대부분의 서비스는 읽기가 쓰기보다 훨씬 많아서 부 서버를 여러 대 둔다
  • 성능: 읽기 질의를 여러 부 서버에서 병렬로 처리한다
  • 안정성: 여러 장소에 사본이 있어 서버 하나가 망가져도 데이터가 남는다
  • 가용성: 부 서버가 죽으면 다른 부 서버나 주 서버가 읽기를 받고, 주 서버가 죽으면 부 서버 하나를 새 주 서버로 승격(Failover)한다

주의할 점

  • 복제는 보통 비동기라 부 서버가 조금 늦게 따라온다(복제 지연, Replication Lag). 방금 쓴 값을 바로 부 서버에서 읽으면 옛 값이 보일 수 있다. 쓰기 직후 읽기는 주 서버로 보내는 식의 대응이 필요하다(최종 일관성)
  • 승격 과정에서 아직 복제되지 않은 데이터가 유실될 수 있다
  • 읽기 전용 복제본을 애플리케이션에서 어떻게 나눠 쓰는지는 읽기 전용 복제본에, 변경 로그를 다른 시스템으로 흘려보내는 방식은 CDC (변경 데이터 캡처)에 있다

쓰기 자체를 나눠야 할 만큼 커지면 샤딩으로 넘어간다. 전체 흐름은 사용자 수에 따른 규모 확장.

출처: 『가상 면접 사례로 배우는 대규모 시스템 설계 기초』 알렉스 쉬 (원서 System Design Interview – An Insider's Guide) 1장

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 저장소 역할 분담 (DB·캐시·큐·검색)

    서버 애플리케이션 옆에는 거의 늘 관계형 DB, 인메모리 캐시, 메시지 브로커(message broker), 검색 엔진이 붙는다. 하나로 다 하지 않는 이유는 데이터의 성격(영구성·속도·전달·검색)마다 잘하는 도구가 다르기 때문이다.

  • DB 인덱스와 트레이드오프

    DB 인덱스는 특정 컬럼 값으로 행을 빨리 찾도록 테이블 옆에 따로 유지하는 보조 자료구조(auxiliary data structure)다. 관계형 DB의 기본 인덱스는 정렬된 균형 트리(B-tree 계열)라서, 전체를 훑지 않고 트리를 따라 내려가 원하는 행에 닿는다.

  • 데이터 무결성

    데이터 무결성(data integrity)은 저장된 데이터가 정확하고 일관되며 믿을 수 있는 상태로 유지되는 것이다. 재고가 100개로 보이는데 실제로 50개라면 무결성이 깨진 것이다. 관계형 DB는 이를 제약 조건(constraint)으로 강제한다.

  • 로컬 퍼스트 아키텍처

    클라이언트 기기의 로컬 데이터를 진실의 원천(Source of Truth)으로 삼고, 서버는 동기화와 백업을 맡는 설계 방식. 전통적인 "서버가 원천, 클라이언트는 요청해서 그린다" 구조를 뒤집어 로컬 DB → UI 렌더링 → 백그라운드 동기화 순서로 흐른다.

  • 읽기 캐시 전략

    값비싼 연산 결과나 자주 읽는 데이터를 DB보다 빠른 메모리 저장소에 두고, 읽을 때 캐시를 먼저 보는 전략. 응답 속도를 높이고 DB 부하를 줄이며, 캐시 계층만 따로 확장할 수도 있다.

보기 옵션