피드로 돌아가기
How we made our Mac launcher feel instant by killing slow providers
Dev.toDev.to
Frontend

Deadline 기반 Tiered Architecture를 통한 런처 응답 지연 제거

How we made our Mac launcher feel instant by killing slow providers

Serhiy2026년 5월 26일5intermediate

Context

기존 런처들이 가장 느린 Provider의 응답을 기다려 UI를 렌더링하는 동기적 구조로 인해 M-series Mac의 하드웨어 성능에도 불구하고 인지적 지연 발생.

Technical Solution

  • 응답 속도에 따라 Instant, Fast, Deferred 3단계 Tier를 구분하여 각기 다른 Deadline 부여
  • Swift 6의 Structured Concurrency 및 withThrowingTaskGroup을 활용해 타임아웃 초과 Provider 즉시 취소
  • 첫 프레임은 Instant Tier 반환 즉시 렌더링하고 Fast/Deferred 결과는 이후 스트리밍 방식으로 업데이트
  • 18차원 Feature Vector와 Learned Weight Vector의 Dot Product 연산을 통해 sub-microsecond 수준의 고속 랭킹 수행
  • 로컬 파일(ranker.bin) 기반의 온라인 학습을 통해 사용자 맞춤형 가중치를 클라우드 없이 실시간 업데이트

- UI 렌더링 병목을 유발하는 외부 종속성(Disk, Network)을 분리하여 Deferred Tier로 격리했는가? - 모든 비동기 작업에 엄격한 Deadline을 설정하여 일부 Provider의 장애가 전체 시스템 지연으로 이어지지 않게 설계했는가? - 복잡한 랭킹 알고리즘 대신 연산 비용이 낮은 벡터 내적(Dot Product) 구조를 통해 처리 속도를 최적화했는가?

원문 읽기