Day 52 · 4/5
🌿 중급 DB

데이터베이스 읽기/쓰기 분리

쉽게 이해하기

도서관에서 책을 빌리는 창구와 반납하는 창구를 분리하는 것과 같습니다. 대출은 1층, 반납은 2층에서 처리하면 줄이 덜 밀리고 처리 속도가 빨라집니다. 데이터베이스도 읽기와 쓰기를 분리하면 각각의 성능이 향상됩니다.

핵심 정리

읽기 작업과 쓰기 작업을 서로 다른 데이터베이스 서버로 분리해서 성능을 높이는 방법입니다.

자세히 알아보기

데이터베이스 읽기/쓰기 분리는 Master-Replica 구조로 구현됩니다. Master 서버는 쓰기(INSERT, UPDATE, DELETE)를 처리하고, Replica(읽기 전용 복제본) 서버는 읽기(SELECT)를 담당합니다. Master의 데이터는 자동으로 Replica에 복제되어 동기화됩니다. 이 방식은 읽기 작업이 압도적으로 많은 서비스에서 효과적입니다. SNS, 뉴스 사이트, 쇼핑몰 같은 곳에서는 글 쓰기보다 조회가 훨씬 많기 때문에, Replica를 여러 개 두고 읽기 요청을 분산시킵니다. 실무에서는 ORM이나 데이터베이스 라우터가 자동으로 쿼리를 분류합니다. 예를 들어 Django ORM에서는 using('default') / using('replica')로 구분하고, Prisma에서는 읽기 전용 레플리카 URL을 별도로 설정할 수 있습니다. 주의할 점은 복제 지연(Replication Lag)입니다. Master에 쓴 데이터가 Replica에 반영되기까지 약간의 시간이 걸려서, 방금 작성한 글이 바로 보이지 않을 수 있습니다. 이럴 때는 쓰기 직후의 읽기는 Master에서 하도록 처리합니다. 읽기/쓰기 분리는 트래픽이 많은 서비스에서 필수적인 확장 전략입니다.