2.4억 도메인, p99 0ms 자동 완성 구현 비결

by DD
8시간 전
조회수 0

2억 4천만 개 도메인 이름에 대한 자동 완성 기능을 p99 0ms 지연 시간으로 구현함

클라이언트 측 사전 로딩(Client-side Prefetching)고성능 API 설계로 '다음 프레임' 수준의 즉각적 응답을 목표로 함

인메모리 트라이(In-memory Trie)SSD 기반 메모리 매핑 인덱스를 활용하여 빠른 검색 속도 확보

네트워크 지연 시간(Network Latency)이 병목 현상으로 지적되며, CDN 캐싱 및 다중 서버 구성 필요성 제기됨

자동 완성 지연 시간 목표 설정 및 측정

개발자는 **p99 0ms* 지연 시간이라는 야심찬 목표를 설정하고, 이를 달성하기 위해 키 입력 지속 시간(KeyPress Duration)키 입력 간 간격(Gap Between Key Presses)을 고려한 총 121ms의 시간 예산(Time Budget)을 측정했다. 이 시간 내에 API 응답을 받아야 하므로, 클라이언트 측 사전 로딩(Client-side Prefetching)고성능 API 구축이 핵심 과제임을 명확히 했다. 특히, 1000명의 동시 사용자가 타이핑하는 상황에서도 p99 지연 시간**을 예산 내로 유지하는 것이 중요하다고 강조했다.

데이터 구조를 활용한 검색 성능 최적화

2억 4천만 개 도메인 검색을 위해 인메모리 트라이(In-memory Trie)SSD 기반 메모리 매핑 블록 인덱스(SSD-backed Memory-mapped Block Index)를 조합한 데이터 격리 아키텍처(Data Isolation Architecture)를 설계했다. 트라이는 접두사 검색에 O(길이) 복잡도를 가지며, 메모리 매핑 인덱스는 디스크 공간 2.5GB를 효율적으로 활용한다. 이 두 구조는 최악의 경우에도 O(1)에 가까운 성능을 보장하여, 데이터 검색 속도(Data Retrieval Speed)를 극대화한다고 설명한다.

API 성능과 네트워크 병목 현상

API 자체는 대부분 2ms 내에 응답하지만, Cloudflare를 경유하는 네트워크 왕복 시간(Network Round-Trip Time)이 실제 지연 시간의 대부분을 차지한다고 지적한다. 특히 유럽 외 지역, 예를 들어 미국에서는 p99 지연 시간이 예산을 초과할 수 있다. CDN 캐싱(CDN Caching)Nielsen의 0.1초 '즉각적' 기준을 충족하기 위해 지오 로드 밸런싱(Geo Load Balancing)이 필요하지만, 현재는 단일 서버로 운영 중임을 밝혔다.

커뮤니티의 '즉각적' 경험과 UI 이벤트 처리 논쟁

일부 사용자는 '즉각적(Instant)'이라는 표현에 대해 프레임 속도(FPS)가 낮은 환경에서는 체감 속도가 다르다고 지적한다. 또한, `keyDown` 대신 `keyUp` 이벤트를 사용하여 제안을 렌더링하는 방식에 대해 의문을 제기하며, 일반적인 UI 상호작용에서는 `keyDown` 이벤트 사용이 표준적이라고 주장한다. 이는 사용자 경험(User Experience) 측면에서 일관성 있는 설계가 중요함을 시사한다.

p99 0ms* autocomplete for 240 million domain names