분산 시스템에서 데이터를 효율적으로 분배하고, 서버 추가나 제거 시 데이터 이동을 최소화하는 해싱 기법인 일관된 해싱에 대해 알아보겠습니다. 이를 쉽게 설명하기 위해 피자 배달을 비유로 사용해 보겠습니다.
생각해보세요, 피자 가게에서 여러 배달원이 있습니다. 각각의 배달원이 특정 지역의 주문을 담당합니다. 새로운 배달원이 추가되거나 기존 배달원이 일을 그만둘 때, 각 배달원이 담당하는 지역이 크게 바뀌지 않는 것이 중요합니다. 이렇게 하면 배달 업무를 더 효율적으로 관리할 수 있습니다.
원형 모양의 숫자 범위를 생각해봅시다. 이 범위는 0부터 100까지입니다(실제론 0부터 2^32-1까지).
각 서버(또는 배달원)는 이 원형 범위의 특정 위치에 배치됩니다. 예를 들어, 서버 A는 10에, 서버 B는 50에, 서버 C는 80에 배치됩니다.
각 데이터 항목(예: 사용자 정보, 이미지 파일 등)도 해싱을 통해 이 원형 범위 내의 특정 위치에 배치됩니다. 예를 들어, 데이터 X는 30에, 데이터 Y는 70에 배치됩니다.
데이터를 담당할 서버는 해싱 링을 시계방향으로 돌며 첫 번째로 만나는 서버가 됩니다. 예를 들어, 데이터 X(30)는 서버 B(50)에, 데이터 Y(70)는 서버 C(80)에 저장됩니다.
서버 추가: 새로운 서버 D가 60에 추가된다고 가정해봅시다. 기존 데이터 중 60보다 작고, 가장 가까운 서버인 C에 저장된 데이터만 D로 이동하면 됩니다. 즉, 데이터 Y(70)만 D로 이동합니다. 다른 데이터는 이동할 필요가 없습니다.
서버 제거: 서버 B가 제거된다고 가정해봅시다. B가 담당하던 데이터는 B 다음에 위치한 서버 C로 이동됩니다. 이 경우, 데이터 X(30)가 C로 이동됩니다.

효율적인 데이터 분배: 데이터가 서버에 고르게 분배됩니다.
확장성: 서버를 추가하거나 제거할 때 이동해야 하는 데이터의 양이 최소화됩니다. 이는 시스템이 더 쉽게 확장될 수 있음을 의미합니다.
높은 가용성: 일부 서버에 장애가 발생해도 데이터가 다른 서버에 분산되어 있기 때문에 시스템이 계속 작동할 수 있습니다.
일관된 해싱은 데이터가 분산된 환경에서 서버 간에 균등하게 분배되고, 서버 추가나 제거 시 데이터 이동을 최소화하는 데 중요한 역할을 합니다. 이를 통해 시스템의 확장성과 가용성을 높일 수 있습니다.