시스템 디자인

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

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

2025.01.06 | 조회 2.52K |
2
|

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
    1년 이상 전

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

    ㄴ 답글 (1)

다른 뉴스레터

쿠버네티스는 어떻게 동작할까요?

내 컨테이너가 마법처럼 돌아가는 이유, 쿠버네티스의 비밀 내부 구조 완전 해부. Introduction "배포했는데 왜 안 돼요?" "스케일링이 제대로 안 되네요." "이 파드는 왜 자꾸 죽는 거죠?" 쿠버네티스를 처음 접한 개발자들의 흔한 탄식입니다. 하지만

2025.04.29·시스템 디자인·조회 1.73K

메시지 큐? 이제 Kafka로 끝내세요

복잡한 분산 시스템 아키텍처가 단숨에 이해되는 Kafka 완전 정복. Introduction 매일 수백만 건의 메시지가 오가는 현대의 분산 시스템에서, 안정적인 메시지 처리는 선택이 아닌 필수가 되었습니다. Netflix는 하루 평균 1조 건 이상의

2025.01.16·시스템 디자인·조회 2.12K

서비스가 느리다고요? 레이턴시 최적화의 모든 것

0.1초의 지연이 매출 1%를 떨어뜨립니다. 당신의 서비스는 안전한가요?. Introduction "왜 이렇게 느린 거예요?" 사용자들의 이런 불만이 익숙하신가요? 아마존은 페이지 로딩이 0.1초만 지연되어도 매출이 1% 감소한다는 충격적인 연구 결과를

2025.01.13·시스템 디자인·조회 4.9K

서비스가 커질수록 API는 왜 점점 더 못생겨질까요? - BFF 패턴으로 풀어보는 진화하는 API 설계

프론트엔드도, 백엔드도 만족시키는 우아한 API 설계 패턴의 비밀. Introduction "모바일용 API를 따로 만들어야 할까요?" "웹용 API는 또 어떻게 하죠?" "파트너사 연동은요?" 대규모 서비스를 운영하다 보면 어김없이 마주치게 되는

2024.10.24·시스템 디자인·조회 2.51K

잘못된 캐싱 전략이 당신의 서비스를 망치고 있습니다

캐싱을 활용한 확실한 성능 개선 비법 대공개. Introduction 모 스타트업의 채용 공고를 보면 이런 문구가 있습니다. "우리는 초당 100만 건의 트랜잭션을 처리합니다." 멋진 말이죠? 하지만 실제로 이런 처리량을 달성

2024.10.28·시스템 디자인·조회 3.13K

매출 100억 달러를 만드는 Shopify 결제 시스템의 10가지 비밀

매출 100억 달러의 비결은 바로 결제 시스템의 안정성에 있습니다. Introduction 여러분, 결제 시스템이 단 1초만 멈춰도 어떤 일이 벌어질지 상상해보셨나요? 고객의 불만부터 시작해 막대한 매출 손실, 브랜드 이미지 실추까지... 그야말로

2024.10.11·시스템 디자인·조회 2.77K·댓글 2
© 2026 데브필 DevPill

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

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

메일리 로고

도움말 자주 묻는 질문 오류 및 기능 관련 제보

서비스 이용 문의admin@team.maily.so 채팅으로 문의하기

메일리 사업자 정보

메일리 (대표자: 이한결) | 사업자번호: 717-47-00705 | 서울특별시 송파구 위례광장로 199, 5층 501-8호

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