SiliconValley_survivor

SiliconValley_survivor

Design Apple Wallet, Venmo

애플 월렛에서 가장 중요한 데이터는 현재 잔액이 아닙니다. 잔액이 만들어진 모든 사건의 순서입니다.

SiliconValley_survivor's avatar
SiliconValley_survivor
Apr 28, 2026
∙ Paid

Apple Wallet, Venmo 과 같은 디지털 지갑 시스템을 설계하는 문제를 다룹니다. 디지털 지갑은 사용자가 은행 카드나 은행 계좌에서 돈을 충전한 뒤, 그 잔액을 온라인 결제나 다른 사용자에게 송금하는 데 사용하는 서비스입니다. 예를 들어 PayPal 같은 결제 플랫폼에서는 사용자가 자기 지갑에 돈을 보관하고, 같은 플랫폼 안의 다른 사용자 지갑으로 돈을 바로 보낼 수 있습니다.

사용자는 은행 카드에서 디지털 지갑으로 돈을 충전합니다. 이후 전자상거래 사이트에서 물건을 살 때, 카드 결제가 아니라 지갑 잔액으로 결제할 수 있습니다.


지갑 간 송금

디지털 지갑의 기능은 단순히 결제만이 아닙니다. 같은 결제 플랫폼 안에서는 한 사용자의 지갑에서 다른 사용자의 지갑으로 직접 돈을 보낼 수 있습니다. 은행 간 송금보다 보통 더 빠르고, 같은 플랫폼 내부 송금이라 추가 수수료가 없거나 낮은 경우가 많습니다.

여기서 이제부터 다루게 될 설계 문제는 바로 이 지갑 간 잔액 이동을 지원하는 디지털 지갑 시스템을 설계하는 것입니다.


Understanding Problem - 문제 이해와 설계 범위 확정

인터뷰에서는 먼저 요구사항을 명확히 해야 합니다. 여기서는 지갑의 모든 기능을 다루는 것이 아니라, 두 디지털 지갑 사이의 잔액 송금 기능만 설계 대상으로 둡니다.

Non-Functional/Functional Requirements - 기능적 요구사항 및 비기능적 요구사항

- 두 디지털 지갑 사이의 잔액 전송을 지원해야 한다.
- 초당 1,000,000건의 전송 요청을 처리해야 한다.
- 신뢰성은 최소 99.99% 수준이어야 한다.
- 트랜잭션을 지원해야 한다.
- 재현 가능성, 즉 과거 상태를 처음부터 다시 재구성할 수 있어야 한다.
- 외환 환전은 범위 밖이다.

여기서 중요한 포인트는 정확성입니다. 돈을 다루는 시스템에서는 “대충 맞는다”가 허용되지 않습니다. 한쪽 계정에서 돈이 빠졌으면 반드시 다른 쪽 계정에 들어가야 하고, 중간에 서버가 죽거나 네트워크 장애가 나더라도 돈이 사라지거나 두 번 지급되면 안 됩니다.

또 하나 중요한 요구사항은 재현 가능성입니다. 은행 명세서와 내부 기록을 비교하면 차이는 발견할 수 있지만, 왜 차이가 생겼는지는 알기 어렵습니다. 그래서 시스템은 처음부터 모든 기록을 다시 재생해서 과거 잔액을 복원할 수 있어야 합니다.

Estimation - 사용자 추정

TPS는 Transactions Per Second, 즉 초당 처리 가능한 트랜잭션 수입니다.

요구사항은 1,000,000 TPS입니다. 만약 일반적인 데이터베이스 노드 하나가 초당 1,000 TPS를 처리할 수 있다고 가정하면, 단순 계산으로는 1,000개의 데이터베이스 노드가 필요합니다.

하지만 송금 하나는 실제로 두 개의 작업을 포함합니다.

1. 보내는 계정에서 돈 차감
2. 받는 계정에 돈 추가

따라서 1,000,000건의 송금을 처리하려면 실제로는 최대 2,000,000개의 업데이트 연산을 처리해야 합니다. 노드 하나가 1,000 TPS를 처리한다면 2,000개의 노드가 필요합니다.

노드당 TPS와 필요한 노드 수

This post is for paid subscribers

Already a paid subscriber? Sign in
© 2026 실리콘밸리_생존자 · Privacy ∙ Terms ∙ Collection notice
Start your SubstackGet the app
Substack is the home for great culture