Shard Key

좋은 샤드 키는 데이터를 나누는 기준이 아니라 운영 비용을 정하는 기준이다

샤드 키를 잘 고르면 데이터가 고르게 퍼지고, 조회는 한 샤드에서 끝나며, 운영 중 키 변경 때문에 데이터를 다시 옮길 일도 줄어듭니다.

조건 1 샤드 수 활용

높은 카디널리티

값 종류가 많아야 여러 샤드에 데이터가 잘게 퍼집니다.

좋은 예 user_id처럼 값이 매우 많은 키
피해야 함 gender처럼 값이 적으면 일부 샤드만 쓰게 됩니다.
조건 2 핫스팟 방지

균등한 분포

특정 값 비중이 지나치게 크면 한 샤드에 쓰기와 조회가 몰립니다.

좋은 예 UUID, user_id는 비교적 고르게 퍼집니다.
피해야 함 국가 코드처럼 편중된 키는 일부 샤드를 과열시킵니다.
조건 3 단일 샤드 조회

쿼리 경로와 일치

자주 쓰는 조회 조건에 샤드 키가 포함돼야 라우터가 바로 목적지를 찾습니다.

좋은 예 WHERE user_id = ?처럼 바로 대상 샤드가 정해집니다.
피해야 함 조회 조건과 무관하면 크로스 샤드 집계가 늘어납니다.
조건 4 재배치 최소화

값의 불변성

운영 중 값이 바뀌지 않아야 이미 저장한 데이터를 다른 샤드로 옮기지 않습니다.

좋은 예 user_id는 생성 후 거의 바뀌지 않습니다.
피해야 함 email처럼 바뀔 수 있는 값은 샤드 이동을 부릅니다.
실무 판단: 좋은 샤드 키는 "값 이름이 그럴듯한지"보다 "데이터를 오래 고르게 퍼뜨리고, 조회를 짧게 만들고, 이동 비용을 막는지"로 평가합니다.