Skip to content

Depromeet Core DB Optimization 솔루션 비교 분석 #194

@BlackBean99

Description

@BlackBean99

Describe

아래와 같은 근거로 AWS RDS의 운영을 종료하고 TiDB Cloud 로 이관한다.

요구사항

  • 운영, 개발 디비 2개 이상을 제공해야 한다.
  • 단 한푼도 DB 운영에 돈을 쓰고 싶지 않다.
  • Response time gap(Max response time - min response time) ≤ 200ms
  • MySQL 8.0 호환 가능
  • Solution Migration 예상 작업 소요 1일 이내
  • 작업 심사가 까다롭지 않았으면 좋겠다.
  • 장기간 미사용시(활동종료 ~ 디프만 코어 신규 모집 후 개발 시작 : 약 3개월) 데이터가 유지되어야 한다.

서버리스 DB 벤치마크

평가 항목 TiDB Cloud Serverless CockroachDB Serverless Supabase Neon
핵심 엔진 MySQL 5.7 / 8.0 호환 PostgreSQL 호환 PostgreSQL 15+ PostgreSQL 15+
무료 스토리지 25 GiB (행 5GiB + 열 5GiB + @) 10 GiB 500 MB 500 MB
컴퓨팅 한도 월 5,000만 Request Units (RU) 월 5,000만 Request Units (RU) 공유 CPU (2 vCPU Burst) 공유 CPU (0.25 - 2 CU)
최적 리전 도쿄 (AWS ap-northeast-1) 서울 (AWS ap-northeast-2) 서울 (AWS ap-northeast-2) 싱가포르 (AWS ap-southeast-1)
가입/심사 난이도 카드 등록 불필요 카드 등록 불필요 카드 등록 불필요 카드 등록 불필요
Java 호환성 기존 MySQL 드라이버 사용 가능 PostgreSQL 드라이버로 교체 필요 Connection Pooler 모드 필수 Connection Pooler 모드 필수
운영 리스크 쿼리 없을 시 일시 정지 (Cold Start 존재) 완전 자동 스케일링 (Cold Start 미미함) 1주일 미사용 시 프로젝트 정지 5분 미사용 시 일시 정지
NCP 연동 지연시간 ~30ms - 40ms <10ms <10ms ~90ms

도입시 예상 운영 문제

  1. Serverless cold start

잦은 TPS 가 발생하지 않기 때문에 간헐적인 접속에도 최소한의 Connection 을 유지

hikari:
  # 서버리스 환경 필수 튜닝
  minimum-idle: 1           # 최소 1개의 연결을 유지하여 Cold Start 빈도 감소
  maximum-pool-size: 10     # 무료 티어의 연결 수 제한(보통 50-100개)을 고려하여 보수적으로 설정
  max-lifetime: 600000      # 10분. DB의 유휴 타임아웃보다 짧게 설정하여 좀비 커넥션 방지
  idle-timeout: 300000      # 5분. 불필요한 연결을 정리
  keepalive-time: 60000     # 1분. 주기적인 Ping으로 연결이 끊기지 않도록 생존 신호 전송
  connection-timeout: 30000 # 30초. 연결 획득 대기 시간
  validation-timeout: 5000  # 5초. 연결 유효성 검사 시간

  1. VPC 외부 자원과 연결시 보안 문제

SSL 강제: JDBC URL에 sslMode=VERIFY_IDENTITY

TiDB 콘솔에서 NCP LB IP allow, deny all

Solution Migration Plan

현재 AWS를 쓰고 있으니, snapshot dump, streaming 방법들이 있다.

TiDB에서는 import from S3를 제공하기 때문에 이를 활용하도록 한다.

  1. RDB Read replica snapshot / dump mydumper 예시 (로컬 저장 후 S3 업로드)
mydumper -h <RDS_ENDPOINT> -u <USER> -p <PASSWORD> -o./backup --rows 100000 --threads 4
aws s3 cp./backup s3://my-bucket/backup --recursive
  1. TiDB 클라우드 내부망(AWS 백본)을 통해 S3 데이터를 고속으로 흡입(Ingest)

precaution : IAM 에 외부 제한된 설정이 있는지 검토 요청

TiDB 클라우드 내부망(AWS 백본)을 통해 S3 데이터를 고속으로 흡입(Ingest)

  1. NCP 임시 Cloud - TiDB connection test

k6 로 100건 정도 health check packet (SELECT 1) test

  • 정상일 경우 아래 절차 수행
  • 비정상이거나 유실이 자주 발생하면 추가 분석 예정
  1. RDS 종료

AWS RDS Terminate 비용 차단 최소화

차선책 불응 사유

  1. Supabase

서울 리전을 지원하지만 Database Solution 사용하는데 아래와 같은 한계가 있다.

  • 500 MB 스토리지 제한, 이를 초과할 경우 데이터베이스가 Read-only 전환, 유료 플랜($25/월)으로 강제 전환
  • 일주일 휴면 정책: free project는 1주일 동안 API 요청 없으면 Pause 강제전환. → refresh 시도하려면 대시보드에서 수동으로 전환해야 함.
    • Depromeet core의 write 빈도를 고려해봤을 때 부적절
  1. CockroachDB

용량 및 트래픽은 감당할 정도로 좋지만

우리는 JooQ, JPA에서 Driver를 PostgreSQL migration 할 시간 없음.

  1. Neon

NCP 서울 리전에서 싱가포르까지의 지연 시간은 약 90ms ~ 100ms : 도쿄리전보다 2.5배 느림.

  1. AWS

AWS EC2, EBS 서비스로 DB Process를 올려 사용하는 것은 운영 비용 월 최소 5만원 추가 발생 예정.

  • AWS RDS는 비용 감당 안됨.

Tasks

이서현, 정준원, 이한음 3인 전원 동의시 milestone 설정 예정.

ETC

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions