시스템 설계, 기술 면접 대비

안정 해시 설계 면접 퀴즈

규칙에서 서버 수를 빼면 이동량이 1퍼센트가 된다

분산 캐시 클러스터 하나를 요구사항부터 끝까지 설계합니다. 서버 100대, 키 10억 개, 조회 초당 50만, 구성 변경 주당 3~4번, 적중률 95퍼센트 유지라는 제약 아래에서 재배치 비용, 나머지 연산의 한계, 해시 링, 가상 노드, 담당 찾기, 링 공유, 뜨거운 키, 사본 판단을 다룹니다.

로그인 없이 풀어보기
16개 문제, 무료

이 설계에 주어진 요구사항

문제는 모두 이 하나의 요구사항 안에서 풉니다.

안정 해시 설계

분산 캐시 클러스터

여러 대의 캐시 서버에 키를 나눠 담습니다. 서버 구성이 자주 바뀌는 것이 이 설계의 조건입니다.

이번에 만드는 기능

  • 키를 어느 서버가 담당할지 정하기
  • 서버가 늘거나 빠질 때 담당을 다시 정하기
  • 사양이 다른 서버에 담당 양을 다르게 주기
  • 모든 클라이언트가 같은 담당 규칙을 보게 하기

범위 밖

  • 캐시 값의 만료 정책
  • 캐시와 원본 데이터의 정합성
  • 서버 장애 감지 자체
  • 여러 지역에 나눠 배치하기

지켜야 하는 수치

캐시 서버
100대
10억 개
조회
초당 50만
구성 변경
주당 3~4번 (증설, 교체, 장애)
적중률
95퍼센트 이상 유지
서버 사양
최대 2배 차이
조회 편중
일부 키가 다른 키보다 수백 배 자주 읽힌다
담당 서버 계산
요청당 0.1ms 이내

전제로 주어진 것

  • 구성이 그대로인 동안 같은 키는 늘 같은 서버로 간다
  • 서버 한 대가 늘거나 빠질 때 담당이 바뀌는 키는 최소여야 한다
  • 조회가 몰리는 키가 있어도 한 서버가 먼저 한계에 닿으면 안 된다
  • 캐시이므로 담당이 바뀐 값은 다시 채워도 된다
  • 어느 서버가 빠졌다는 사실은 주어진 것으로 본다

학습할 핵심 개념

요구사항 정리와 재배치 비용
나머지 연산의 한계
해시 링과 이동량
가상 노드와 고르기
담당 지점을 찾는 방법
모두가 같은 링을 보게 하기
뜨거운 키와 조회 쏠림
사본을 둘지 정하기

핵심 개념 미리보기

안정 해시 설계 면접에서 꼭 나오는 개념을 미리 확인하세요

요구사항 정리와 재배치 비용

핵심

안정 해시는 제품이 아니라 기법입니다. 그래서 어떤 상황에서 그 기법이 필요한지부터 고정합니다. 이 토픽은 아래 하나의 요구사항을 끝까지 풉니다.

항목
대상분산 캐시 클러스터
캐시 서버100대
10억 개
조회초당 50만
구성 변경주당 3~4번 (증설, 교체, 장애)
적중률95퍼센트 이상 유지
서버 사양최대 2배 차이
조회 편중일부 키가 수백 배 자주 읽힌다
담당 서버 계산0.1ms 이내

기능 요구사항과 범위 밖

구분내용
이번에 만든다키의 담당 서버 정하기, 서버가 늘거나 빠질 때 담당 다시 정하기, 사양이 다른 서버에 담당 양 다르게 주기, 모든 클라이언트가 같은 담당 표 보기
범위 밖캐시 값의 만료 정책, 캐시와 원본의 정합성, 장애 감지 자체, 여러 지역 배치

장애 감지를 범위 밖으로 둔 것이 중요합니다. "어느 서버가 죽었다" 는 주어진 입력으로 보고, 그 뒤에 담당을 어떻게 다시 정할지만 다룹니다. 감지까지 끌어오면 이야기가 흩어집니다.

왜 이동량이 첫 제약인가

적중률이 떨어지면 원본으로 가는 요청이 몇 배로 늘어난다 조회는 늘 초당 50만이다. 원본으로 가는 것만 달라진다 적중률 95퍼센트 2.5만 적중률 50퍼센트 25만 담당이 전부 바뀐 직후 50만 캐시가 비면 원본이 조회를 그대로 받는다. 20배다 원본이 그 부하를 못 받으면 캐시를 채울 수도 없다 그래서 재배치량이 이 설계의 첫 제약이다

캐시는 담당이 바뀌면 그 키를 새 서버에서 찾게 되고, 새 서버에는 값이 없습니다. 그러면 원본으로 갑니다.

평소: 조회 50만 x 미스 5퍼센트 = 원본 요청 2.5만
담당이 전부 바뀐 직후: 원본 요청 50만

20배입니다. 원본이 그 부하를 못 받으면 캐시를 채울 수도 없어서 회복이 더 늦어집니다. 그래서 이 설계에서 가장 먼저 재는 것은 처리량이 아니라 서버 한 대가 늘거나 빠질 때 담당이 바뀌는 키의 비율입니다.

구성 변경은 사건이 아니라 상시 조건이다

주당 3~4번 이라는 숫자가 이것을 말합니다. 서버 100대 규모에서 증설과 교체와 장애를 합치면 구성 변경은 늘 일어나는 일입니다.

한 번의 이사라면 새벽에 조용히 옮기고 끝낼 수 있습니다. 매주 일어나는 일이라면 이동 비용을 구조로 낮춰야 합니다. 운영 절차로 감당할 수 있는 종류가 아닙니다.

담당 계산은 요청 경로에 있다

조회 초당 50만 이므로 담당 서버를 찾는 계산이 초당 50만 번 실행됩니다. 예산 0.1ms 는 여기에 붙습니다.

방식요청당 비용
계산으로 정한다연산 몇 번
어딘가에 물어본다왕복 한 번. 예산을 넘긴다

그래서 담당은 물어보지 않고 계산으로 알아야 합니다. 이 제약이 뒤의 설계를 크게 좁힙니다.

캐시라서 다른 점

캐시는 값을 잃어도 됩니다. 담당이 바뀐 키의 값을 새 서버로 옮기지 않고 버려도 됩니다. 다시 채우면 되니까요.

성격담당이 바뀌면
캐시버리고 다시 채운다. 미스가 늘 뿐이다
영구 저장소실제로 옮겨야 한다. 옮기는 동안 두 곳을 봐야 한다

같은 기법을 쓰지만 대가의 종류가 다릅니다. 이 요구사항은 캐시이므로 이동량이 곧 미스로 환산되고, 저장소라면 이동량이 곧 이관 작업량이 됩니다.

면접에서 이렇게 나옵니다
  • Q.분산 캐시에서 담당 서버를 정하는 요구사항을 어떻게 정리하시겠습니까
  • Q.담당이 바뀌는 것이 왜 비싼가요
  • Q.담당 서버를 조회 서비스에 물어보면 안 되나요

나머지 연산의 한계

핵심

앞 단계에서 이동량이 첫 제약이고, 담당은 물어보지 않고 계산으로 알아야 한다고 정했습니다. 계산으로 담당을 정하는 가장 단순한 방법부터 봅니다.

서버 수로 나눈 나머지

담당 서버 번호 = 해시(키) % 서버 수

좋은 점이 많습니다. 계산이 연산 두 번이라 0.1ms 예산에 여유가 크고, 해시가 고르면 분포도 고르며, 구현이 한 줄이고 들고 있을 상태가 서버 수 하나뿐입니다.

서버 수가 바뀌면 규칙 자체가 바뀐다

나머지 연산으로 담당을 정하면 서버 수가 바뀔 때 거의 모든 키의 담당이 바뀐다 3대일 때 4대로 늘리면 012 345 678 9 0 1 2 0 1 2 0 1 2 0 0 1 2 3 0 1 2 3 0 1 보라색 셋만 제자리다. 나머지는 담당이 바뀐다 담당이 값의 크기에 따라 규칙 없이 재배열된다 서버가 많아질수록 제자리는 줄어든다 100대에서 101대로 늘리면 약 1퍼센트만 남는다 한 대를 더했는데 10억 개 중 9억 9천만 개가 이사한다

문제는 나누는 수가 규칙의 일부라는 것입니다. 서버 수가 바뀌면 모든 키의 계산 결과가 함께 바뀝니다. 값이 조금 밀리는 것이 아니라 규칙 없이 재배열됩니다.

서버 수한 대 늘릴 때 제자리에 남는 키
3에서 4약 4분의 1
10에서 11약 11분의 1
100대 에서 101대약 1퍼센트

서버가 많아질수록 나빠집니다. 규모를 키우려고 서버를 늘리는데 늘릴수록 늘리기가 어려워지는 구조입니다.

요구사항과 대조하면 탈락한다

앞 단계에서 계산한 숫자를 그대로 씁니다. 담당이 99퍼센트 바뀌면 적중률이 거의 0으로 떨어지고 원본 요청이 20배가 됩니다. 적중률 95퍼센트 이상 유지라는 요구사항을 정면으로 어깁니다.

그리고 이 일이 주당 3~4번 일어납니다. 한 번이면 새벽에 감당할 수 있지만 매주라면 구조를 바꿔야 합니다.

그래도 이 방법이 맞는 경우

나머지 연산을 나쁜 방법으로 외우면 안 됩니다. 서버 수가 고정이거나, 담당이 바뀌어도 잃을 것이 없으면 이보다 단순하고 값싼 방법이 없습니다.

상황나머지 연산이
서버 수가 고정. 늘릴 계획이 없다충분하다. 더 정교한 방법은 과설계다
상태가 없는 계산을 나눠 준다충분하다. 담당이 바뀌어도 잃을 것이 없다
담긴 데이터가 있고 구성이 바뀐다무너진다. 이 요구사항이 그렇다

무엇을 담고 있는지가 판단을 가릅니다. 담당이 바뀔 때 잃는 것이 없다면 나머지 연산으로 충분합니다.

서버 수를 넉넉하게 잡아 두면 되지 않나

미리 1,000으로 나눠 두고 서버 100대가 각각 10개 조각을 맡는 방법이 있습니다. 조각 수는 고정이므로 나머지 규칙은 그대로이고, 서버가 늘면 조각의 담당만 옮깁니다.

이 방법은 실제로 쓰입니다. 다만 조각과 서버의 매핑 표를 누군가 관리하고 모두에게 알려야 하고, 처음 정한 조각 수가 상한이 됩니다. 조각 수를 늘리는 순간 다시 같은 문제로 돌아갑니다.

다음 단계에서 매핑 표 없이 같은 효과를 얻는 방법을 봅니다.

면접에서 이렇게 나옵니다
  • Q.해시 값을 서버 수로 나눈 나머지로 담당을 정하면 무엇이 문제인가요
  • Q.나머지 연산은 언제 써도 되나요
  • Q.조각을 미리 많이 만들어 두는 방법은 어떤가요

해시 링과 이동량

핵심

앞 단계에서 나머지 연산이 무너진 이유는 하나였습니다. 나누는 수가 규칙의 일부라서 서버 수가 바뀌면 모든 계산 결과가 함께 바뀌는 것입니다.

그러면 규칙에서 서버 수를 빼면 됩니다.

키와 서버를 같은 공간에 놓는다

해시 링에서 새 서버가 들어오면 바로 앞 구간만 새 서버로 넘어간다 서버 1 새 서버 서버 2 서버 3 서버 4 담당을 정하는 규칙 키를 서버와 같은 공간에 놓는다 키에서 시계 방향 첫 서버가 담당 서버가 늘면 링의 한 지점에 들어간다 그 앞 구간만 넘어간다 다른 경계는 건드리지 않는다 100대에서 101대면 약 1퍼센트 나머지 연산은 99퍼센트였다

해시 값의 범위를 끝과 시작이 이어진 하나의 원으로 봅니다. 키도 서버도 같은 해시 함수로 그 원 위의 한 점이 됩니다. 그리고 규칙은 이렇습니다.

키의 담당 = 그 키에서 시계 방향으로 처음 만나는 서버

이 규칙에 서버 수가 들어 있지 않습니다. 서버가 몇 대든 계산 방법이 같습니다.

서버가 늘 때 이동량

새 서버는 원 위의 한 점으로 들어옵니다. 그 지점 때문에 경계가 하나 생기고, 바로 앞 구간의 키들만 담당이 바뀝니다. 원래 그 키들을 맡던 다음 서버에서 새 서버로 넘어갑니다.

상황담당이 바뀌는 키
나머지 연산에서 한 대 추가약 99퍼센트
링에서 한 대 추가약 1퍼센트

다른 경계는 건드리지 않는 것이 핵심입니다. 서버 100대 중 한 대를 더하면 새 서버가 가져가는 몫만 움직이므로 평균적으로 전체의 100분의 1입니다.

요구사항과 대조한다

앞에서 계산한 방식을 그대로 씁니다. 이동한 키가 1퍼센트면 그 키에 대한 조회만 미스가 되므로,

평소 미스: 조회 50만 x 5퍼센트 = 2.5만
추가 미스: 조회 50만 x 1퍼센트 = 0.5만
합계 3만. 평소의 1.2배

99퍼센트 이동일 때 20배였던 것이 1.2배가 됩니다. 적중률 95퍼센트 유지라는 요구사항 안에 들어옵니다.

서버가 빠질 때

그 서버의 점이 원에서 사라지고, 그 서버가 맡던 구간은 시계 방향 다음 서버로 합쳐집니다. 이동량은 그 서버가 갖고 있던 몫이므로 이번에도 전체의 100분의 1 수준입니다.

다만 그 몫이 한 서버에 전부 갑니다. 빠진 서버의 부하를 다음 한 대가 다 받는 것이라, 이미 바쁜 서버였다면 연달아 무너질 수 있습니다. 이 문제는 다음 단계에서 함께 해결됩니다.

무엇을 얻고 무엇을 잃었나

항목나머지 연산
담당 계산연산 두 번정렬된 목록에서 찾기
들고 있을 상태서버 수 하나서버 목록과 각자의 위치
한 대 추가 시 이동약 99퍼센트약 1퍼센트

공짜가 아닙니다. 서버 목록과 위치를 모든 클라이언트가 들고 있어야 하고, 그 목록이 서로 다르면 같은 키가 다른 서버로 갑니다. 담당 계산도 나눗셈 하나보다는 무겁습니다. 이 두 대가는 뒤에서 각각 다룹니다.

면접에서 이렇게 나옵니다
  • Q.해시 링으로 담당을 정하는 규칙을 설명해 주세요
  • Q.링에서 서버를 한 대 추가하면 얼마나 이동하나요
  • Q.서버가 빠질 때는 어떻게 되나요

더 많은 개념과 문제는 가입 후 이용할 수 있어요

먼저 5문제 맛보기

안정 해시 설계 면접 빈출 질문

실제 면접에서 자주 나오는 질문들입니다

Q.

분산 캐시에서 담당 서버를 정하는 요구사항을 어떻게 정리하시겠습니까

요구사항 정리와 재배치 비용 개념 정리 보기
Q.

담당이 바뀌는 것이 왜 비싼가요

요구사항 정리와 재배치 비용 개념 정리 보기
Q.

담당 서버를 조회 서비스에 물어보면 안 되나요

요구사항 정리와 재배치 비용 개념 정리 보기
Q.

캐시가 아니라 영구 저장소라면 무엇이 달라지나요

요구사항 정리와 재배치 비용 개념 정리 보기
Q.

해시 값을 서버 수로 나눈 나머지로 담당을 정하면 무엇이 문제인가요

나머지 연산의 한계 개념 정리 보기
Q.

나머지 연산은 언제 써도 되나요

나머지 연산의 한계 개념 정리 보기
Q.

조각을 미리 많이 만들어 두는 방법은 어떤가요

나머지 연산의 한계 개념 정리 보기
Q.

담당이 99퍼센트 바뀌면 실제로 어떤 일이 생기나요

나머지 연산의 한계 개념 정리 보기

이런 점이 좋아요

이동량을 첫 제약으로 세우는 감각

개수 편차와 조회 편차를 구분하는 눈

요구사항이 충족되면 더 하지 않는 판단

지금 바로 시작하세요

무료로 안정 해시 설계 퀴즈를 풀고, AI 오답 분석으로 실력을 키우세요.