시스템 디자인

안정 해시 심층 가이드: 넷플릭스가 1초 만에 전 세계 2억 명의 요청을 처리하는 비결

수많은 개발자들이 설명하다 떨어지는 이 개념, 단 3단계로 완벽하게 이해하기

2025.01.06 | 조회 1.39K |
2
|
데브필 DevPill의 프로필 이미지

데브필 DevPill

Top 1% 개발자로 거듭나는 성공 처방전

Introduction

매일 저녁 8시, 전 세계에서 동시에 2억 명이 넷플릭스를 켭니다. 수천 테라바이트의 영상 데이터가 순식간에 전송되죠. 카카오톡은 하루에 470억 건의 메시지를 처리합니다. 인스타그램에는 매초 1,000장이 넘는 사진이 업로드됩니다. 도대체 이런 어마어마한 규모의 데이터는 어떻게 처리되는 걸까요?

이 모든 마법 같은 일의 중심에는 '안정 해시(Consistent hashing)'라는 비밀 병기가 있습니다. 서버를 늘릴수록 오히려 성능이 떨어지는 일반적인 분산 시스템과 달리, 일관성 해시를 활용한 시스템은 규모가 커질수록 더욱 안정적으로 동작합니다. 넷플릭스, 아마존, 페이스북과 같은 해외 빅테크들이 이 기술을 핵심 인프라로 채택한 이유죠.

오늘은 이 놀라운 기술의 동작 원리를 살펴보려고 합니다. 해시 링이라는 독특한 구조부터 시작해서, 실제 대규모 시스템에서 어떻게 활용되는지까지. 복잡해 보이는 개념을 누구나 이해할 수 있도록 단계별로 설명해드리겠습니다. 여러분의 다음 프로젝트에서도 이 강력한 도구를 활용할 수 있도록 말이죠.


안정 해시(Consistent Hashing)의 동작 원리

안정 해시는 기술 면접에서 자주 다루어지는 주제입니다. 하지만 많은 지원자들이 이 개념을 설명하는 데 어려움을 겪는 것을 보아왔습니다. 오늘은 안정 해시의 작동 과정을 단계별로 살펴보면서, 이해하기 쉽고 설명하기 좋은 방식으로 알아보도록 하겠습니다.

 

안정 해시는 키를 노드 클러스터에 균일하게 분산시키는 기술입니다.

이 기술의 주요 목적은 클러스터에 노드를 추가하거나 제거할 때 재배치가 필요한 키의 수를 최소화하는 것입니다.

다음은 안정 해시의 동작 방식을 단계별로 설명한 것입니다:

1단계

먼저 키들을 해시 함수를 사용해 해시값으로 변환합니다.

이러한 키 값들의 출력 범위는 고정된 원형 공간 또는 링(ring)으로 취급됩니다. 예를 들어, 아래 다이어그램에서 K1, K2, K3, K15는 해시 링 상의 키 위치를 나타냅니다.

첨부 이미지

2단계

그 다음, 서버나 노드들도 IP 주소나 도메인 이름을 입력값으로 사용하여 해시합니다.

동일한 해시 함수를 사용하여 각 노드의 링 상의 위치를 결정합니다.

아래 다이어그램을 참고해 주세요:

첨부 이미지

3단계

마지막으로, 각 키에 대해 해당 키의 위치에서 시작하여 시계 방향으로 링을 탐색합니다. 노드를 발견하면 해당 노드에 키를 저장합니다.

첨부 이미지

 

안정 해시의 가상 노드(Virtual nodes)

가상 노드(Virtual nodes, 줄여서 "v-nodes")는 안정 해시에서 부하 분산과 불균형한 데이터 분포를 해결하기 위해 사용되는 기술입니다.

단일 물리 노드를 해시 링의 한 위치에 매핑하는 대신, 각 물리 노드를 여러 위치에 매핑하여 "가상 노드"를 생성합니다. 이러한 위치들은 서로 다른 입력값(예: NodeID-1, NodeID-2 등의 고유 식별자를 추가)으로 해시 함수를 여러 번 적용하여 결정됩니다.

예를 들어, 각 물리 노드가 3개의 가상 노드를 가진다고 가정해 보겠습니다. 해싱 후, 가상 노드들은 링 상에 다음과 같이 분포됩니다:

  • 노드 A: 가상 노드 A1, A2, A3
  • 노드 B: 가상 노드 B1, B2, B3
  • 노드 C: 가상 노드 C1, C2, C3

키(데이터)는 링에 해시된 후, 시계 방향으로 이동하면서 처음 만나는 가상 노드에 할당됩니다.

예를 들어:

  • 키 K1이 B2 근처에 위치한다면 노드 B에 할당됩니다.
  • 키 K2가 A3 근처에 위치한다면 노드 A에 할당됩니다.

링 상에 더 많은 위치(가상 노드)가 존재하기 때문에 데이터는 물리 노드들에 더 균등하게 분산됩니다. 특정 키가 링의 특정 영역에 불리하게 해시되더라도, 그 영향은 각 물리 노드가 가진 여러 가상 노드들로 인해 분산됩니다.

다만 단점으로는, 가상 노드가 시스템이 관리해야 할 메타데이터의 양을 증가시킨다는 점이 있습니다. 각 물리 노드를 여러 개의 항목이 표현해야 하기 때문입니다.

안정 해시의 장점

안정 해시는 다음과 같은 여러 장점을 가지고 있습니다:

확장성: 시스템에 노드를 추가하거나 제거할 때 전체 데이터를 재할당할 필요 없이 일부 데이터만 영향을 받습니다. 이는 동적으로 멤버십이 변하는 분산 시스템에 매우 적합합니다.

부하 분산: 가상 노드와 같은 기법을 활용하여(각 물리 노드에 여러 위치 할당) 서버 간에 더욱 균형 잡힌 데이터 분산을 보장합니다.

장애 대응: 노드에 장애가 발생하더라도 해당 노드의 키만 다른 노드로 재분배하면 됩니다. 시스템의 나머지 부분은 정상적으로 계속 작동합니다.

안정 해시의 단점

안정 해시에는 다음과 같은 주의해야 할 단점들도 있습니다:

가상 노드 없이는 불균형 발생: 가상 노드를 사용하지 않으면 키의 자연스러운 분포가 편향될 수 있어 노드 간 부하가 불균형해질 수 있습니다.

해시 함수 의존성: 해시 함수의 품질이 분포의 균형에 직접적인 영향을 미칩니다. 적절하지 않은 해시 함수를 선택하면 클러스터링이나 성능 저하가 발생할 수 있습니다.

활용 사례(Use cases)

안정 해시는 다양한 시스템에서 널리 활용되고 있습니다. 주요 활용 사례는 다음과 같습니다:

분산 데이터베이스: 노드 추가나 제거 시 최소한의 서비스 중단으로 균등한 데이터 분산을 보장합니다(예: Amazon DynamoDB).

캐싱 시스템: 캐시 서버 간 요청을 균형있게 분산하고 서버 구성 변경 후 캐시 미스를 최소화합니다(예: Memcached).

콘텐츠 전송 네트워크(CDN): 전 세계에 분산된 서버 간에 파일 저장 및 검색을 효율적으로 관리합니다.

👉 여러분은 안정 해시를 실무에서 사용해보신 적이 있으신가요? 각자의 경험을 댓글에 남겨주세요 :)


👥 더 나은 데브필을 만드는 데 의견을 보태주세요

Top 1% 개발자로 거듭나기 위한 처방전, DevPill 구독자 여러분 안녕하세요 :) 

저는 여러분들이 너무 궁금합니다. 

어떤 마음으로 뉴스레터를 구독해주시는지, 

어떤 환경에서 최고의 개발자가 되기 위해 고군분투하고 계신지, 

제가 드릴 수 있는 도움은 어떤 게 있을지. 

아래 설문조사에 참여해주시면 더 나은 콘텐츠를 제작할 수 있도록 힘쓰겠습니다. 설문에 참여해주시는 분들 전원 1개월 유료 멤버십 구독권을 선물드립니다. 유료 멤버십에서는 아래와 같은 혜택이 제공됩니다.

  • DevPill과의 1:1 온라인 커피챗
  • 멤버십 전용 슬랙 채널 참여권
    • 채용 정보 공유 / 스터디 그룹 형성 / 실시간 기술 질의응답
  • 이력서/포트폴리오 템플릿

 

설문 참여하고 유료 멤버십 혜택받기 →

첨부 이미지

 

 

다가올 뉴스레터가 궁금하신가요?

지금 구독해서 새로운 레터를 받아보세요

이번 뉴스레터 어떠셨나요?

데브필 DevPill 님에게 ☕️ 커피와 ✉️ 쪽지를 보내보세요!

댓글 2개

의견을 남겨주세요

확인
  • hojin.jang의 프로필 이미지

    hojin.jang

    0
    about 1 month 전

    이해하기 좋은 글입니다 감사합니다.

    ㄴ 답글 (1)

다른 뉴스레터

© 2025 데브필 DevPill

Top 1% 개발자로 거듭나는 성공 처방전

뉴스레터 문의dev.redpill@gmail.com

메일리 로고

자주 묻는 질문 서비스 소개서 오류 및 기능 관련 제보

서비스 이용 문의admin@team.maily.so

메일리 사업자 정보

메일리 (대표자: 이한결) | 사업자번호: 717-47-00705 | 서울 서초구 강남대로53길 8, 8층 11-7호

이용약관 | 개인정보처리방침 | 정기결제 이용약관 | 라이선스