이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.


개발자라면 한 번쯤은 Discord 서버에 들어가 본 적이 있을 것입니다. 오픈소스 프로젝트의 커뮤니티, 사내 봇 알림 채널, 혹은 그냥 친구들과 게임하며 떠드는 음성 채널까지. 어느새 Discord는 개발자 생태계의 기본 인프라 중 하나가 되었습니다.

이 시리즈는 Discord라는 서비스를 개발자의 시선으로 뜯어봅니다. 3부작으로 구성했습니다.

  • Part 1 (이 글): Discord가 어떤 니즈에서 태어났고, 어떻게 성장했으며, 서비스를 지금의 모습으로 만든 결정적 의사결정들을 살펴봅니다. 마지막엔 개발자가 특히 주목할 만한 엔지니어링 의사결정(Elixir, Go→Rust, Cassandra→ScyllaDB)을 다룹니다.
  • Part 2: Webhook, 봇, 슬래시 커맨드 같은 Discord의 개발자 친화적이고 대인배스러운 무료 기능들을 실전 관점에서 정리합니다.
  • Part 3: Discord를 원격 control plane으로 활용하는 방법 — AI 코딩 에이전트 원격 제어, ChatOps, 홈랩 모니터링 등 — 과 그 best practice를 다룹니다.

그럼 1편을 시작합니다.


게이머의 짜증에서 태어나다#

Discord의 출발점은 거창한 비전이 아니라 게임하다가 음성 채팅이 자꾸 끊겨서 생긴 짜증이었습니다.

창업자는 Jason Citron(CEO)과 Stanislav “Stan” Vishnevskiy(CTO)입니다. Citron은 모바일 소셜 게임 네트워크 OpenFeint를 만들어 2011년 일본 기업 GREE에 1억 4백만 달러에 매각한 경험이 있었습니다. 그 자금으로 2012년 게임 스튜디오 Hammer & Chisel을 세웠고, 2014년 첫 모바일 MOBA 게임 Fates Forever를 출시했습니다 (Discord 공식 회사 소개, Wikipedia).

게임 자체는 상업적으로 성공하지 못했습니다. 하지만 그 과정에서 발견한 진짜 문제가 따로 있었습니다. Final Fantasy XIVLeague of Legends 같은 게임에서 팀원들과 전략을 짜려고 할 때, 당시 음성 채팅 도구들이 하나같이 불편했던 것입니다.

당시 게이머들이 쓰던 Skype, TeamSpeak, Ventrilo, Mumble은 불안정하거나, 리소스를 많이 잡아먹거나, 비싸거나, 설정이 까다로웠습니다. 특히 TeamSpeak/Ventrilo 계열은 서버에 들어가려면 IP 주소를 외워야 하는 번거로움이 있었습니다. Citron은 “다시는 IP 주소를 외울 필요가 없는” 서비스를 만들고 싶어 했습니다 (Wikipedia).

“Jason과 Stan은 게임을 사랑했지만, 온라인으로 플레이하면서 대화할 안정적인 방법을 찾지 못했습니다.”Discord 공식 회사 소개

이 단순하지만 절실한 니즈 — 저사양 환경에서도 가볍고 안정적으로 돌아가는, 설정 없이 클릭 한 번으로 들어가는 음성 채팅 — 을 정조준해 만든 결과물이 Discord입니다. 2015년 5월(공식 출시일 2015년 5월 13일), discordapp.com이라는 도메인으로 세상에 나왔습니다 (Wikipedia).


폭발적인 성장 곡선#

Discord의 성장은 가팔랐습니다. 주요 지표를 시간순으로 보면 다음과 같습니다 (수치 출처: Wikipedia, Business of Apps).

시점 사용자 규모
2016년 1월 300만 명 (월 약 100만 명씩 증가)
2016년 12월 2,500만 명
2017년 말 약 9,000만 명 (주당 신규 150만 명)
2018년 5월 등록 사용자 1억 3천만 명
2020년 6월 MAU 1억 명, 등록 3억 명
2021년 MAU 약 1억 5천만 명
2026년 MAU 2억 명 이상

성장의 결정적 변곡점은 COVID-19 팬데믹이었습니다. 사람들이 집에 갇히면서 Discord는 게임을 넘어 스터디 그룹, 동호회, 원격 수업, 친구 모임의 공간이 되었습니다. 2020년 한 해 동안 하루 다운로드가 약 80만 건에 달했고, 2월부터 7월 사이 사용자 수가 약 47% 증가했습니다 (Business of Apps).

Citron은 Financial Times 인터뷰에서 2020년 한 해 동안 사용자가 두 배로 늘고 매출이 세 배로 뛰어 1억 3천만 달러에 이르렀다고 밝혔습니다 (Techmeme 요약).


“Imagine a place” — 게임을 넘어서기로 한 결정#

Discord에게 팬데믹은 기회인 동시에 정체성의 고민을 안겨줬습니다. 이미 사용자의 상당수가 게임이 아닌 용도로 쓰고 있었는데, 브랜드는 여전히 “게이머를 위한 서비스"로 보였기 때문입니다.

2021년 5월, 6주년을 맞아 Discord는 대대적인 리브랜딩을 단행합니다. 게임 컨트롤러 모양이던 마스코트 “Clyde” 로고를 다듬고, 슬로건을 “your place to talk"에서 “imagine a place"로 바꿨습니다 (Discord 블로그).

이 결정의 근거는 데이터였습니다. Discord는 당시 사용자의 약 80%가 게임 외 용도 또는 혼합 용도로 서비스를 쓰고 있으며, 2019년의 30%에서 크게 늘었다고 밝혔습니다 (Wikipedia). “게임용"이라는 꼬리표가 오히려 신규 사용자에게 “여긴 내가 있을 곳이 아니다"라는 인상을 준다고 본 것입니다.

게이머 정체성을 일부 내려놓는 이 결정은 기존 사용자 일부의 반발(과도하게 화려해진 색감 등)을 사기도 했지만, 결과적으로 Discord를 범용 커뮤니티 플랫폼으로 확장시킨 전환점이 되었습니다.


마이크로소프트를 걷어차다, 그리고 수익화#

약 100억 달러를 거절하다#

2021년 4월, Discord는 자사를 약 100억 달러(일부 보도는 약 120억 달러)에 인수하려던 마이크로소프트와의 매각 협상에서 걸어 나왔습니다. 인수 대신 독립을 유지하고 IPO를 추진하기로 한 것입니다 (TechCrunch).

큰 기업에 흡수되어 고유의 색깔(DNA)을 잃기보다 독립을 택했다는 것이 보도의 설명이었습니다. Citron은 이후 CNBC에서 “우리는 정말 많은 제안을 받았습니다(We did receive a lot of offers)” 라고 인정했습니다 (CNBC).

광고 없이 버틴 수익 모델#

개발자라면 “그럼 돈은 어떻게 버나?“가 궁금할 것입니다. Discord의 핵심 수익원은 광고가 아니라 개인 사용자 구독이었습니다.

  • Discord Nitro (2017): 월 9.99달러 / 연 99.99달러의 프리미엄 구독. 커스텀 이모지, 더 큰 파일 업로드, HD 화질 등을 제공합니다 (Monetizely 분석).
  • Server Boosting (2019): 사용자가 서버를 “부스트"해 서버 단위 혜택을 잠금 해제하는 모델.

주목할 점은 Discord가 오랫동안 광고를 거부했다는 것입니다. “사용자 데이터를 수익화하는 데 의존하지 않는다"는 입장을 고수했습니다. 다만 2024년 들어 입장을 일부 선회해, 게임사가 후원하는 opt-in 방식의 보상형 광고 “Sponsored Quests” 를 도입했습니다 (사용자가 설정에서 끌 수 있음, MobileSyrup).

IPO를 향해#

2026년 1월 보도에 따르면, Discord는 2026년 3월 상장(IPO)을 목표로 SEC에 비밀 신청서를 제출했습니다. 마지막 비공개 기업가치는 2021년 라운드 기준 약 147억 달러, 주관사는 Goldman Sachs와 JPMorgan Chase로 전해졌습니다 (TechCrunch). (이 글 작성 시점의 보도 기준이며, 실제 상장 진행 상황은 최신 뉴스를 확인하시기 바랍니다.)


개발자가 주목할 엔지니어링 의사결정#

여기서부터가 개발자에게 진짜 흥미로운 부분입니다. Discord는 수억 명의 실시간 메시징을 감당하기 위해 굵직한 기술적 결정을 여러 번 내렸고, 그 과정을 엔지니어링 블로그에 상세히 공개해왔습니다. 대규모 시스템을 고민하는 개발자에게는 교과서 같은 사례입니다.

Elixir/Erlang — 처음부터 실시간을 위한 선택#

Discord는 출발부터 Elixir(Erlang VM) 를 핵심 실시간 메시징에 사용했습니다. “Erlang VM은 우리가 만들려던 고도로 동시적인 실시간 시스템에 완벽한 후보였다” 고 밝혔습니다 (How Discord Scaled Elixir to 5,000,000 Concurrent Users).

이 글에서 다룬 규모는 약 5백만 동시접속 사용자, 초당 수백만 건의 이벤트입니다. 사용자는 WebSocket으로 세션 프로세스(GenServer)에 연결되고, 이 세션들이 길드(서버) 프로세스와 통신하며, 발행된 메시지가 연결된 모든 세션으로 fan-out 됩니다.

문제는 거대한 길드였습니다. 동시접속 3만 명짜리 서버에서는 단일 길드 프로세스가 메시지를 모두에게 뿌리는 데만 피크 시간 기준 0.9~2.1초가 걸렸습니다(send/2 한 번에 30~70μs). Discord는 이를 해결하기 위해 fan-out 작업을 여러 노드로 분산하는 Manifold, 읽기 전용 공유 데이터 조회를 0.3μs로 단축한 FastGlobal, 그리고 과부하 시 cascading failure를 막는 Semaphore 같은 라이브러리를 직접 만들어 오픈소스로 공개했습니다.

Go에서 Rust로 — GC와의 싸움#

가장 유명한 사례입니다. 2020년 2월 Discord는 “Why Discord is switching from Go to Rust”라는 글을 발표했습니다.

대상은 Read States 서비스였습니다. 사용자가 어떤 채널의 어떤 메시지까지 읽었는지를 추적하는데, 접속할 때마다·메시지를 보낼 때마다·읽을 때마다 호출되는 극단적인 hot path입니다. 규모는 수십억 개의 Read State, 초당 수십만 건의 캐시 업데이트였습니다.

Go로 짠 이 서비스는 약 2분마다 지연 시간과 CPU가 튀는 현상을 보였습니다. 원인은 Go의 가비지 컬렉터였습니다. “Go는 최소 2분마다 강제로 GC를 실행한다” 는 점, 그리고 GC가 도달 가능성을 판단하기 위해 LRU 캐시 전체를 스캔해야 한다는 점이 문제였습니다.

Rust를 선택한 이유는 단순합니다. GC가 없기 때문입니다. 캐시에서 제거되는 순간 메모리가 즉시 해제됩니다. 결과는 극적이었습니다. 8백만 개의 캐시된 Read State 기준으로 지연 시간이 밀리초에서 마이크로초 단위로 떨어졌고, 지연 스파이크가 완전히 사라졌습니다. 별로 최적화하지 않은 Rust가 정성껏 튜닝한 Go를 이긴 것입니다.

Cassandra에서 ScyllaDB로 — 조 단위 메시지 저장#

또 하나의 명문입니다. 2023년 “How Discord Stores Trillions of Messages”에서 메시지 저장소의 진화를 공개했습니다.

2017년 Cassandra 노드 12대로 “수십억 개"의 메시지를 저장하던 것이, 2022년 초에는 노드 177대로 “조(trillion) 단위” 메시지를 다루는 “고통스러운(high-toil)” 시스템이 되었습니다. 대형 서버가 보내는 막대한 트래픽이 특정 파티션에 몰리는 hot partition 문제, 그리고 Java 기반 Cassandra의 GC가 골칫거리였습니다.

해법은 C++ 기반으로 GC가 없는 ScyllaDB로의 마이그레이션, 그리고 DB와 API 사이에 Rust로 만든 데이터 서비스 계층(동일 데이터를 동시에 요청하면 DB에는 한 번만 질의하는 request coalescing 포함)을 두는 것이었습니다.

2022년 5월 진행된 마이그레이션에서 Rust 마이그레이터는 초당 최대 320만 건을 처리해, 예상 3개월짜리 작업을 무중단으로 9일 만에 끝냈습니다. 결과적으로 노드는 177대(Cassandra) → 72대(ScyllaDB) 로 줄었고, 메시지 읽기 p99 지연은 40~125ms → 약 15ms, 삽입은 5~70ms → 안정적인 5ms로 개선되었습니다.


정리하며#

Discord는 “게임하다 음성 채팅이 불편하다"는 작은 짜증에서 출발해, 팬데믹을 거쳐 범용 커뮤니티 플랫폼으로 진화했고, 마이크로소프트의 인수 제안을 거절하며 독립을 택했습니다. 그 뒤에는 Elixir로 실시간성을 잡고, Go에서 Rust로 옮겨 GC 스파이크를 없애고, Cassandra에서 ScyllaDB로 갈아타며 조 단위 메시지를 감당한 과감한 엔지니어링 결정들이 있었습니다.

다음 Part 2에서는 이렇게 성장한 Discord가 개발자에게 공짜로 풀어준 강력한 기능들 — Webhook, 봇, 슬래시 커맨드, Gateway 등 — 을 실전 관점에서 살펴보겠습니다.


References#