일관된 해싱의 정의
일관된 해싱은 분산 시스템에서 데이터를 여러 서버에 나눠 저장할 때, 서버의 개수가 변경되더라도 재배치되는 데이터의 양을 최소화하는 해싱 기법입니다. 일반적인 해싱 방식인 hash(key) % N은 서버 수(N)가 바뀌면 거의 모든 데이터의 위치가 뒤바뀌는 문제가 있습니다. 예를 들어 서버가 3대에서 4대로 늘어나면 나머지 연산의 결과가 대부분 달라져서, 캐시 서버라면 대부분의 캐시가 무효화되는 최악의 상황이 발생합니다. 일관된 해싱은 이 문제를 해결하기 위해 등장한 방식으로, 분산 캐시 시스템이나 데이터베이스 샤딩에서 널리 사용됩니다.
동작 원리: 해시 링(Hash Ring)
일관된 해싱의 핵심은 ‘해시 링’이라는 가상의 원형 공간입니다. 0부터 2^32-1 같은 큰 범위의 숫자를 원형으로 배치한다고 상상해보세요. 서버(노드)도 이 링 위에 해시값으로 위치를 매기고, 저장할 데이터도 동일한 해시 함수로 링 위의 한 지점에 매핑합니다. 데이터는 자신의 위치에서 시계 방향으로 이동하다가 처음 만나는 서버에 저장됩니다.
비유하자면, 원형 테이블에 여러 개의 의자(서버)가 놓여있고, 손님(데이터)이 자신의 번호표 위치에서 가장 가까운 시계방향 의자에 앉는 것과 같습니다. 만약 의자 하나가 사라지면 그 의자에 앉아있던 손님만 다음 의자로 이동하면 되고, 다른 손님들은 영향을 받지 않습니다. 즉, 서버가 추가되거나 제거되어도 영향을 받는 데이터는 해당 서버 주변의 일부에 국한되며, 전체 데이터의 극히 일부(이론적으로는 1/N 수준)만 재배치됩니다.
실제 구현에서는 서버 하나당 링 위에 여러 개의 가상 노드(virtual node)를 배치하는 경우가 많습니다. 이렇게 하면 서버 간 부하가 고르게 분산되고, 특정 서버에 데이터가 몰리는 현상을 줄일 수 있습니다.
실무에서 왜 사용하는가
일관된 해싱은 다음과 같은 상황에서 특히 유용합니다.
- Redis, Memcached 같은 분산 캐시 시스템: 서버 추가/제거 시 캐시 미스를 최소화
- Amazon DynamoDB, Apache Cassandra 등 분산 데이터베이스의 샤딩 전략
- 로드밸런서에서 특정 사용자의 요청을 항상 같은 서버로 보내는 세션 고정(sticky session)
결국 일관된 해싱의 본질은 ‘변화에 강한 분산 설계’입니다. 서버 증설이나 장애로 인한 노드 변경이 잦은 클라우드 환경에서, 전체 시스템에 미치는 영향을 국소화함으로써 안정성과 확장성을 동시에 확보할 수 있는 핵심 기술이라 할 수 있습니다.