DB Read replica 구성 (AWS RDS) - depromeet/Took-BE GitHub Wiki

적용

구성 방법

  1. 기본 DB 인스턴스를 Master(Primary) 인스턴스로 사용
  2. Read Replica를 생성하여 읽기 전용 복제본 구성
    • RDS 콘솔에서 기존 DB 인스턴스 선택 후 "작업 > 읽기 전용 복제본 생성" 선택
    • 동일한 리전 또는 다른 리전에 생성 가능

장점

  1. 성능 향상
    • 읽기 작업을 replica로 분산하여 Master DB의 부하 감소
    • 읽기 중심 워크로드의 성능 개선
  2. 가용성 증가
    • Replica를 다른 가용영역에 배치하여 재해 복구 대비
    • Master 장애 시 Replica를 Master로 승격 가능
  3. 확장성
    • 최대 5개까지 Read Replica 생성 가능
    • 읽기 트래픽 증가에 따라 유연하게 확장 가능

비용

  1. 프리티어 제한
    • 프리티어는 단일 DB 인스턴스만 무료 제공
    • Read Replica 생성 시 추가 비용 발생
  2. 추가 비용 요소
    • Replica 인스턴스에 대한 추가 인스턴스 비용
    • Replica로의 데이터 복제를 위한 네트워크 전송 비용
    • 스토리지 비용 (Replica도 동일한 데이터 저장)

프리티어

  1. 초기 단계라면 단일 인스턴스로 시작
  2. 트래픽이 증가하여 성능 이슈가 발생할 때 Read Replica 도입 고려
  3. 비용 최적화를 위해 필요한 시간대에만 Replica 운영 검토

실제 구현 시 고려사항:

  1. 애플리케이션 코드에서 읽기/쓰기 작업 분리

    // 쓰기 작업 - 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();
    }
    
    
  2. 복제 지연(Replication Lag) 고려

    • Master와 Replica 간의 데이터 동기화 시간 고려 필요
    • 실시간성이 중요한 조회는 Master에서 수행
  3. 장애 처리 전략 수립

    • Replica 장애 시 Master로 폴백
    • Master 장애 시 Replica 승격 절차 준비

결론

  • 우선 단일 DB 인스턴스로 작업을 진행 (비용 고려)
  • 어느정도 개발이 완료되었을 때, 전체 팀 회의에서 비용적인 부분에 관환 논의 후 적용 결정
    • 분리 시, 비용 대비 어느정도 효율이 나올지 정리 필요