체감 속도 0ms 달성과 유지보수 편의성까지 모두 잡은 프론트엔드 데이터 설계 혁신
토스 광고팀은 대시보드에서 잦은 탐색을 시도하는 광고주들에게 최적의 탐색 환경을 주기 위해 과감한 설계를 도입했습니다. 모든 데이터를 메모리에서 바로 처리하되 데이터 상한선을 철저히 분석하고, API 분할 및 점진적 렌더링을 활용해 로딩 지연 없는 완벽한 브라우저 중심 아키텍처를 구현했습니다. 이 놀라운 아키텍처 전환 과정과 그로 인해 얻은 구조적 이점을 생생하게 공유합니다.
제한된 양의 데이터를 기반으로 사용자의 복잡하고 잦은 상호작용과 탐색 연산이 발생하는 대시보드 유형의 서비스를 개선하려는 프론트엔드 실무 개발자에게 적극 추천합니다.
광고 대시보드에서 검색, 필터링, 정렬 등의 탐색 조작 시 매번 서버를 호출하여 대기 시간이 수 초 이상 누적되는 성능 문제가 있었습니다. 또한 클라이언트가 전체 데이터를 갖지 못해 성과가 0인 데이터 누락, 페이지 위치 파악 불가, 정렬 사양 추가에 따른 서버 공수 등의 아키텍처적 한계가 존재했습니다.
서버가 수행하던 정렬, 필터, 검색, 페이지네이션을 모두 브라우저 메모리로 이관하고 데이터가 상한선(최대 10만 건) 내에 있음을 확인한 뒤 전원 브라우저 로드 방식으로 전환했습니다. 초기 화면 진입 속도를 보장하기 위해 데이터를 메타데이터, 성과 지표, 부가 컬럼 API로 쪼개어 캐시 정책을 다르게 가져가고 화면을 점진적으로 렌더링했습니다.
필터링 및 정렬 작업 시간이 수백 밀리초에서 체감 대기 시간이 거의 없는 수준으로 크게 단축되었습니다. 또한 새로운 성과 데이터의 유무와 상관없이 정상적인 리스트 렌더링이 가능해졌으며, 구조 변경 없이 API를 병합하여 새로운 데이터 컬럼을 추가할 수 있는 높은 확장성을 확보했습니다.
Trade-off
데이터가 분할되어 지속적으로 로딩됨에 따라 아직 도착하지 않은 데이터 기준의 조작을 막기 위해 UI 인터랙션(예: 정렬 기능 잠금)을 동적으로 제어해야 하는 까다로운 클라이언트 상태 관리가 요구됩니다. 데이터가 들어올 때마다 화면을 지속적으로 다시 계산하여 업데이트해야 하는 비용이 발생합니다.
서버에 매번 쿼리를 날리는 대신, 클라이언트 메모리에 전체 데이터를 보관하고 브라우저 단에서 즉시 가공하여 결과를 사용자 화면에 직접 보여주는 고속화 기법입니다.
전체 데이터 로드 시 발생하는 병목 현상을 방지하고자 구조적 고정 데이터(Metadata)와 실시간 변경되는 성능 지표 데이터(Performance)를 각기 다른 엔드포인트로 분리한 아키텍처입니다.
필요한 뼈대 데이터를 가장 빠르게 내려받아 레이아웃을 즉시 시각화하고, 로딩이 긴 하부 성과 지표 데이터가 추가로 채워지는 순간에 동적으로 렌더링을 갱신하는 렌더링 전략입니다.