𝗦𝗵𝗮𝗿𝗱𝗶𝗻𝗴 𝗜𝗻 𝗔 𝗡𝘂𝘁𝘀𝗵𝗲𝗹𝗹 (샤딩 한눈에 보기)

샤딩은 대규모 데이터베이스를 샤드(shard)라고 불리는 더 작은 조각으로 분할하는 것입니다. 하나의 거대한 데이터베이스를 사용하는 대신, 데이터를 여러 서버에 분산하여 저장합니다.

이 방법을 통해 다음과 같은 이점을 얻을 수 있습니다:

  • 더 많은 데이터 처리
  • 더 많은 요청 처리
  • 단일 머신의 부하 감소
  • 수평적 확장(Scale horizontally) 가능

데이터를 올바른 샤드로 라우팅하는 방법을 결정해야 합니다. 주요 전략은 다음과 같습니다:

  1. 범위 기반 샤딩 (Range Based Sharding) 값의 범위를 기준으로 데이터를 나눕니다. 예시:
  • 샤드 1: 사용자 1 ~ 3000
  • 샤드 2: 사용자 3001 ~ 6000
  • 샤드 3: 사용자 6001 ~ 10000
  1. 해시 기반 샤딩 (Hash Based Sharding) 수학적 함수를 사용하여 샤드를 선택합니다. 예시: 사용자 ID에 나머지 연산자(modulo operator)를 사용합니다. 결과가 0이면 데이터는 샤드 1로, 결과가 1이면 샤드 2로 이동합니다. 이를 통해 데이터를 균등하게 분산할 수 있습니다.

  2. 디렉토리 기반 샤딩 (Directory Based Sharding) 조회 테이블(lookup table)을 사용하여 올바른 샤드를 찾습니다. 예시: 알림 시스템이 디렉토리에서 "YouTube"와 같은 앱 이름을 조회합니다. 디렉토리는 시스템에 "샤드 1"을 사용하도록 알려줍니다. 이는 파일 시스템의 폴더와 유사하게 작동합니다.

  3. 지리적 샤딩 (Geographical Sharding) 위치를 기반으로 데이터를 저장합니다. 예시:

  • 인도 사용자는 인도 샤드로 이동합니다.
  • 미국 사용자는 미국 샤드로 이동합니다.
  • 유럽 사용자는 유럽 샤드로 이동합니다.
  1. 동적 샤딩 (Dynamic Sharding) 범위나 해시를 하드코딩하지 않습니다. 애플리케이션이 런타임에 구성 테이블(configuration table)을 확인합니다. 코드를 변경하지 않고도 새로운 샤드를 추가할 수 있습니다.

  2. 하이브리드 샤딩 (Hybrid Sharding) 더 나은 결과를 얻기 위해 여러 방법을 결합합니다. 일반적인 패턴은 '디렉토리 기반 + 해시 기반'입니다. 먼저 디렉토리를 사용하여 그룹을 찾은 다음, 해시를 사용하여 해당 그룹 내의 특정 샤드를 찾습니다. 이를 통해 유연성과 균형을 모두 잡을 수 있습니다.

Source: https://dev.to/code_with_aravind/sharding-in-a-nutshell-5f6b