시스템 설계 인터뷰: Uber 설계하기

'Uber를 설계하라'는 지리공간 인덱싱, 실시간 위치 스트리밍, 매칭, 그리고 높은 쓰기 처리량을 한 번에 다루기 때문에 가장 흔한 시스템 설계 질문 중 하나입니다. 면접관은 실제 Uber 아키텍처를 원하는 것이 아니라, 당신이 문제의 범위를 정하고, 근거 있는 선택을 하고, 규모에 대해 소리 내어 추론하는 과정을 보고 싶어 합니다.

의도적인 순서로 진행하세요: 요구사항을 명확히 하고, 규모를 추정하고, 핵심 엔티티와 API를 스케치하고, 데이터와 매칭 경로를 설계한 다음, 병목 지점과 트레이드오프에 대해 이야기하세요. 아래 워크스루는 그 순서를 따르므로 정답만이 아니라 구조 자체를 연습할 수 있습니다.

1. 요구사항 명확히 하기

설계 전에 기능 요구사항과 비기능 요구사항을 분리하고 범위를 고정하세요. 승객은 차량을 요청하고 드라이버가 실시간으로 접근하는 모습을 보며, 드라이버는 온라인 상태가 되어 근처 요청을 받습니다. 시스템은 이들을 매칭하고 완료까지 여정을 추적합니다.

  • 기능 요구사항: 차량 요청, 근처 드라이버와 매칭, 실시간 여정 추적, 요금 계산, 여정 기록.
  • 비기능 요구사항: 저지연 매칭(수 초), 높은 가용성, 실시간 위치 업데이트, 드라이버가 정확히 한 명의 승객에게만 배정되는 일관성.
  • 범위 밖(명시적으로 말하기): 결제 처리 내부, 평점, 서지 요금 ML — 언급하고 뒤로 미루세요.

2. 규모 추정하기

대략적인 수치가 이후 선택의 근거가 됩니다. 일일 활성 드라이버 약 1,000만 명이 4초마다 위치 핑을 보낸다고 가정하면, 초당 약 250만 건의 위치 데이터 쓰기가 발생합니다. 이는 쓰기 중심 워크로드로, 단순한 관계형 테이블을 핫 패스로 쓰는 선택을 즉시 배제합니다.

3. 핵심 컴포넌트와 API

서비스와 요청 흐름을 스케치하세요. 매칭 경로를 영속적인 여정 저장소와 독립시켜 각자의 특성에 맞게 확장할 수 있도록 하세요.

  • 위치 서비스: 드라이버의 핑을 수집하고 현재 위치를 인메모리 지리공간 인덱스에 유지한다.
  • 매칭 서비스: 차량 요청이 오면 근처 온라인 드라이버를 조회해 한 명을 배정한다.
  • 여정 서비스: 여정의 생명주기(요청됨 → 매칭됨 → 진행 중 → 완료됨)를 영속적으로 기록한다.
  • 알림/스트리밍: 드라이버의 실시간 위치를 승객에게 전송한다(WebSocket/롱폴링).

4. 지리공간 매칭 — 문제의 핵심

면접관이 가장 듣고 싶어 하는 부분입니다. 원시 위도/경도를 저장하고 스캔하면 O(n)이 되므로 공간 인덱스가 필요합니다. 쿼드트리나 지오해싱을 설명하세요: 지도를 셀로 나누면 '이 지점 근처의 드라이버 찾기'가 전체 스캔이 아니라 몇 개의 셀만 조회하는 작업이 됩니다.

지오해싱은 하나의 지역을 짧은 문자열로 인코딩하며, 공유된 접두사가 공간적 근접성을 의미하게 만들어 '근처'를 접두사 질의로 바꿉니다. 드라이버의 현재 셀은 빠른 읽기와 빈번한 업데이트를 위해 인메모리 저장소(예: Redis)에 저장되며, 셀 크기는 정밀도와 질의 팬아웃 사이의 조정 가능한 트레이드오프입니다.

5. 확장성과 병목 지점

압력 지점과 이를 완화할 방법을 명시하세요. 초당 250만 건의 위치 쓰기 스트림이 가장 지배적인 지점입니다.

  • 위치 인덱스를 지리적으로 샤딩한다 — 한 도시의 드라이버와 승객은 같은 샤드에서 처리되어 매칭이 로컬에 머문다.
  • 인메모리 저장소와 비동기 영속 쓰기로 쓰기 급증을 흡수한다. 모든 핑이 영속 DB에 기록될 필요는 없다.
  • 원자적 배정(락 또는 조건부 업데이트)으로 한 드라이버-한 승객을 보장해 중복 배정을 방지한다.
  • 위치 수집과 다운스트림 소비자 사이에 메시지 큐(Kafka)를 사용해 스파이크를 분리한다.

6. 언급해야 할 트레이드오프

면접관이 높이 평가하는 긴장 관계를 짚으며 마무리하세요: 강한 일관성 대 최종 일관성(드라이버 배정은 강한 일관성이 필요하지만 위치 표시는 최종 일관성이면 충분), 인메모리 속도 대 내구성, 그리고 셀 크기의 정밀도 대 질의 팬아웃. 이를 명시적으로 말하는 것이 통과하는 답변과 뛰어난 답변의 차이를 만듭니다.

실시간 도움으로 Uber 시스템 설계 연습하기

Natively의 시스템 설계 인터뷰 어시스턴트는 실시간 라운드 중에도 당신이 구조를 잃지 않도록 다음에 다뤄야 할 차원을 제안하고 트레이드오프를 실시간으로 보여줍니다. 모든 것이 당신의 기기에서만 이루어집니다.

Put it on your own machine.

A live-conversation assistant that runs locally. Nothing leaves your machine.

macOS 12+ · Windows 10/11

© 2026 Natively AI Private Limited

Source-available under the Natively Personal Use Source License v1.0 · IP geolocation by DB-IP