🎯 3줄 요약

<aside> 🌐 English version → One Click Spawns a Phone Number, and That Call Rings in Discord

</aside>

🎨 그림 1 — 히어로: 딸깍 전화번호 생성에서 디스코드 통화까지의 여정


이 글은 누구를 위한 글인가

이 글은 보이스콜(전화 상담)을 다루는 개발자, 그리고 "우리도 전화 상담을 붙이고 싶은데 어디서부터 손대야 하지?" 고민하는 비즈니스 담당자를 위한 것이다. 우리가 파는 상품 이야기는 잠시 접어두고, .NET 진영에서 **Akka.NET 액터 모델**과 Vonage Voice API로 전화번호 생성 → 통화 수신 → 상담사 연결 → 게임 음성채팅 1위 Discord까지 이어지는 여정의 기술적 이슈를 코드 레벨로 파고든다.

핵심 주장은 하나다. 전화(telephony)와 액터 모델은 남남이 아니라, 원래 한 몸에서 태어났다. 그 뿌리를 먼저 짚고, 실제 구현 코드로 내려간다.


Part 1. 왜 하필 액터 모델인가 — 텔레콤의 유전자

액터 모델은 유행어가 아니다. 1973년 Carl Hewitt·Peter Bishop·Richard Steiger가 IJCAI에서 발표한 「A Universal Modular Actor Formalism for Artificial Intelligence」에서 시작됐다. 규칙은 세 줄로 끝난다.

이 모델이 실제로 세상을 바꾼 무대가 바로 전화였다. Erlang은 1986년 에릭슨(Ericsson)에서 전화 교환기를 위해 태어났다. Joe Armstrong이 이끈 이 언어의 프로세스 모델은 액터 패러다임 그 자체였고, 여기서 그 유명한 "Let it crash" 철학이 나온다.

모든 실패를 방어 코드로 막으려 하지 마라. 고장 난 프로세스는 그냥 죽게 두고, 수퍼바이저(supervisor)가 알아서 깨끗한 상태로 재시작하게 하라. 그러면 실패의 폭발 반경(blast radius)이 통화 한 건 안에 갇힌다.

에릭슨의 Erlang 기반 교환기 AXD301은 극단적으로 높은 가용성을 기록한 사례로 널리 인용된다(흔히 회자되는 "나인 나인(99.9999999%)" 수치는 Joe Armstrong의 박사 논문에서 비롯된 것으로, 측정 조건에 따라 해석 차이가 있어 여기선 하나의 상징으로만 든다). 요점은 수치가 아니라 설계다 — 전화 한 통 = 격리된 프로세스(액터) 한 개라는 발상은 비유가 아니라, 실제 교환기가 돌아간 방식이었다.