읽기 복제본과 연결 라우팅
PgBouncer 또는 지능형 드라이버로 읽기 전용 트래픽을 복제본에 라우팅하고 데이터 최신성 저하라는 절충을 이해해보세요.
읽기 복제본과 연결 라우팅은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
읽기 복제본은 왜 사용하나요?
읽기 작업이 많은 워크로드는 SELECT를 복제본으로 분산할 수 있습니다.
- 주 서버는 쓰기 작업 처리
- 복제본은 대부분의 읽기 작업 처리
- 샤딩 없이 수평적 읽기 확장
최종 일관성의 주의점
복제본은 주 서버보다 지연됩니다. 방금 주문한 사용자가 복제본에서는 아직 주문을 확인하지 못할 수 있습니다. 다음 방법 중 하나를 사용하십시오.
- 쓰기 직후의 읽기를 주 서버로 라우팅
- 복제본이 따라잡을 때까지 대기
- 쓰기 후 상태를 애플리케이션에 캐시
라우팅 전략
- 애플리케이션 수준 라우팅 — 애플리케이션 코드가 주 서버와 복제본 중 선택
- 드라이버 수준 라우팅 — JDBC, pgjdbc, pgxpool 풀이 주 서버와 복제본을 인식하도록 구성
- 프록시 수준 라우팅 — 읽기와 쓰기를 감지하는 pgpool, pgbouncer, HAProxy
애플리케이션 라우팅
역할별로 하나씩, 두 개의 연결 풀이 있습니다:
const primary = new Pool({ host: 'primary', ... });
const replica = new Pool({ host: 'replica', ... });
// reads go to replica:
await replica.query('SELECT ...');
// writes (and read-your-writes) go to primary:
await primary.query('INSERT ...');PgPool-II
SQL을 구문 분석하고 SELECT를 replica로, 쓰기를 primary로 라우팅하는 프록시입니다. 부하 분산과 연결 풀링을 지원합니다:
# pgpool.conf
backend_hostname0 = 'primary'
backend_hostname1 = 'replica1'
load_balance_mode = onHAProxy와 pg_isready 검사
HAProxy는 SQL을 이해하지 못하지만 포트 기준으로 라우팅할 수 있습니다. 쓰기용 프런트엔드 하나는 primary로, 다른 읽기용 프런트엔드는 상태 검사를 거쳐 replica로 라우팅합니다:
frontend writes
bind *:5432
default_backend primary_pool
frontend reads
bind *:5433
default_backend replicas_pool
balance roundrobinAWS RDS 엔드포인트
RDS는 단일 쓰기 엔드포인트와 모든 replica에 부하를 분산하는 읽기 엔드포인트를 제공합니다. 클라우드에서 가장 간단한 방식입니다.
복제 지연 고려 사항
지연을 추적하고 너무 뒤처진 replica로는 라우팅하지 않습니다:
-- On primary:
SELECT client_addr, replay_lag FROM pg_stat_replication;
-- HAProxy / pgpool can use a custom health check that fails if replay_lag > threshold.고정 세션 패턴
“자신이 쓴 내용을 바로 읽기”를 위해 쓰기 후 N초 동안 사용자의 세션을 primary에 고정합니다. 또는 쓰기에 LSN을 기록하고, 내용을 제공하기 전에 replica가 해당 LSN까지 재생할 때까지 기다립니다.
LSN 기반 대기
쓰기 후 LSN을 기록하고, replica에서 읽기 전에 replica가 해당 LSN까지 재생할 때까지 기다립니다:
-- After write on primary:
SELECT pg_current_wal_lsn(); -- save this
-- Before read on replica:
SELECT pg_last_wal_replay_lsn() >= $saved_lsn;
-- spin or wait until truereplica로서의 캐싱
경우에 따라 Redis / Memcache가 읽기 확장을 위한 “replica” 역할을 합니다. 자주 사용되는 키에서는 또 다른 PostgreSQL 인스턴스보다 훨씬 빠릅니다.
replica를 사용하지 말아야 할 때
워크로드가 쓰기 중심이라면 replica는 대부분 속도 향상 없이 비용만 추가합니다. primary에서 읽기가 이미 빠르다면 replica가 필요하지 않을 수도 있습니다.
재해 복구와 읽기 확장의 차이
HA 장애 조치를 위한 replica와 읽기 확장을 위한 replica는 서로 다른 문제입니다. 두 종류를 모두 사용하는 경우가 많습니다.
요약
읽기 replica는 읽기를 확장하지만 지연이 발생합니다.
- 앱 / 드라이버 / 프록시 라우팅
- 복제 지연 = 최종 일관성
- 자신이 쓴 내용을 읽기 위한 primary 고정 또는 LSN 대기
- 지연을 모니터링하고, 너무 뒤처지면 primary로 되돌리기
빠른 확인
사용자가 댓글을 게시한 직후 페이지를 새로 고칩니다. 페이지는 replica에서 읽기 때문에 댓글이 표시되지 않습니다. 문제는 무엇이며, 해결 방법 한 가지는 무엇입니까?
자주 묻는 질문
“읽기 복제본과 연결 라우팅” 강의는 무료인가요?
네 — “읽기 복제본과 연결 라우팅” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“읽기 복제본과 연결 라우팅”에서 뭘 배우나요?
PgBouncer 또는 지능형 드라이버로 읽기 전용 트래픽을 복제본에 라우팅하고 데이터 최신성 저하라는 절충을 이해해보세요. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“읽기 복제본과 연결 라우팅” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 스트리밍 복제와 WAL
- 샤딩을 위한 논리적 복제
- 장애 조치와 리더 선출(Patroni, Stolon)
- 읽기 복제본과 연결 라우팅