DB Read replica 구성 (AWS RDS) - depromeet/Took-BE GitHub Wiki
적용
구성 방법
- 기본 DB 인스턴스를 Master(Primary) 인스턴스로 사용
- Read Replica를 생성하여 읽기 전용 복제본 구성
- RDS 콘솔에서 기존 DB 인스턴스 선택 후 "작업 > 읽기 전용 복제본 생성" 선택
- 동일한 리전 또는 다른 리전에 생성 가능
장점
- 성능 향상
- 읽기 작업을 replica로 분산하여 Master DB의 부하 감소
- 읽기 중심 워크로드의 성능 개선
- 가용성 증가
- Replica를 다른 가용영역에 배치하여 재해 복구 대비
- Master 장애 시 Replica를 Master로 승격 가능
- 확장성
- 최대 5개까지 Read Replica 생성 가능
- 읽기 트래픽 증가에 따라 유연하게 확장 가능
비용
- 프리티어 제한
- 프리티어는 단일 DB 인스턴스만 무료 제공
- Read Replica 생성 시 추가 비용 발생
- 추가 비용 요소
- Replica 인스턴스에 대한 추가 인스턴스 비용
- Replica로의 데이터 복제를 위한 네트워크 전송 비용
- 스토리지 비용 (Replica도 동일한 데이터 저장)
프리티어
- 초기 단계라면 단일 인스턴스로 시작
- 트래픽이 증가하여 성능 이슈가 발생할 때 Read Replica 도입 고려
- 비용 최적화를 위해 필요한 시간대에만 Replica 운영 검토
실제 구현 시 고려사항:
-
애플리케이션 코드에서 읽기/쓰기 작업 분리
// 쓰기 작업 - Master DB @Primary @ConfigurationProperties(prefix = "spring.datasource.master") public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } // 읽기 작업 - Replica DB @ConfigurationProperties(prefix = "spring.datasource.replica") public DataSource replicaDataSource() { return DataSourceBuilder.create().build(); }
-
복제 지연(Replication Lag) 고려
- Master와 Replica 간의 데이터 동기화 시간 고려 필요
- 실시간성이 중요한 조회는 Master에서 수행
-
장애 처리 전략 수립
- Replica 장애 시 Master로 폴백
- Master 장애 시 Replica 승격 절차 준비
결론
- 우선 단일 DB 인스턴스로 작업을 진행 (비용 고려)
- 어느정도 개발이 완료되었을 때, 전체 팀 회의에서 비용적인 부분에 관환 논의 후 적용 결정
- 분리 시, 비용 대비 어느정도 효율이 나올지 정리 필요