이커머스, 핀테크, 미디어 앱의 200ms 응답 시간 확보를 위한 아키텍처 설계 전략: 투패스 시스템, 콜드 스타트 해결, 의사결정 매트릭스, 복원력 확보, 데이터 계약, 옵저버빌리티.
200밀리초, 동시성 앱 성공의 마법
이커머스, 핀테크, 미디어 분야에서 동시성이 높은 애플리케이션을 구축하는 엔지니어에게 ‘200밀리초’는 넘으면 안 되는 상한선입니다. 200밀리초는 사용자가 상호작용을 즉각적이라고 느끼는 심리적 임계값입니다. 개인화된 홈페이지, 검색 결과, 다음 동영상 추천 목록 로딩이 200밀리초를 넘으면 사용자 이탈이 급증합니다. 아마존의 유명한 연구에 따르면 지연 시간이 100밀리초 증가할 때마다 매출이 1% 감소했습니다. 스트리밍 업계에서는 이 지연이 곧바로 이탈률 상승으로 이어집니다.
문제는 비즈니스 조직이 항상 더 똑똑하고, 더 무거운 모델을 요구한다는 점입니다. 요약을 생성하는 LLM, 이탈을 예측하는 심층 신경망, 가격을 최적화하는 복잡한 강화학습 에이전트까지 도입하려 합니다. 이런 모델은 모두 지연 시간 예산을 한계로 밀어붙입니다. 엔지니어링팀을 이끄는 필자는 종종 거대 파라미터 모델 배포를 추진하는 데이터 사이언스팀과, p99 지연 시간 그래프가 빨간색으로 치솟는 상황을 우려하는 사이트 신뢰성 엔지니어(SRE) 사이에서 중재자 역할을 맡습니다. 더 성능 좋은 AI에 대한 요구와 1초 미만 응답 시간이라는 현실을 동시에 만족시키려면 아키텍처를 재설계해야 합니다. 단일한 요청-응답 구조에서 벗어나 추론(inference)과 데이터 검색(retrieval)를 분리하는 접근이 필요합니다. 여기서는 트래픽 증가에도 속도를 유지하는 실시간 아키텍처를 설계하기 위한 청사진을 그려봅니다.
투패스 시스템 아키텍처
초기 단계의 개인화 팀에서 자주 보는 실수는 카탈로그에 있는 모든 항목을 실시간으로 순위화하려는 시도입니다. 영화, 상품, 음악 등 10만 개 항목이 있다면, 사용자 요청이 들어올 때마다 10만 개 전부에 복잡한 스코어링 모델을 적용하면 200밀리초 안에 처리하기 어렵습니다. 이를 해결하기 위해 NBC유니버설(NBCUniversal)은 투타워(two-tower) 아키텍처, 즉 후보 생성과 랭킹을 분리하는 구조를 도입했습니다.
- 후보 생성(검색 계층): 빠르고 가벼운 1차 선별 단계입니다. NBC유니버설은 벡터 검색이나 단순 협업 필터링을 활용해 10만 개 항목을 상위 500개 후보로 압축합니다. 이 단계에서는 정밀도보다 재현율을 우선합니다. 처리 시간은 20밀리초 이내로 끝나야 합니다.
- 랭킹(스코어링 계층): 본격적인 AI 모델이 작동하는 단계입니다. NBC유니버설은 선별된 500개 후보를 XGBoost(XGBoost)나 신경망 등의 정교한 딥러닝 모델에 투입해 순위를 다시 매깁니다. 사용자 맥락, 시간대, 기기 유형 등 수백 개 특성을 함께 고려합니다. 이처럼 단계를 나누면 실제로 노출 가능성이 있는 항목에만 고비용 연산 자원을 투입하게 됩니다. 이런 퍼널식(funnel) 접근은 확장성과 모델 정교함을 동시에 확보할 수 있는 사실상 유일한 방법입니다.
콜드 스타트 문제 해결
모든 개발자가 처음 마주하는 장벽은 콜드 스타트(cold start)입니다. 사용자 이력이 전혀 없거나, 익명 세션으로 접속한 이용자에게는 어떻게 개인화를 제공해야 할까요? 전통적인 협업 필터링은 과거 상호작용 데이터로 구성된 희소 행렬에 의존합니다. 사용자가 처음 방문했다면 이 행렬은 비어 있습니다. 사실상 작동하지 않습니다.
200밀리초 예산 안에서 이 문제를 해결하려면 대규모 데이터 웨어하우스를 조회해 인구통계학적 군집을 찾는 방식은 쓸 수 없습니다. 세션 벡터 기반 전략이 필요합니다. NBC유니버설은 사용자의 현재 세션(클릭, 마우스 오버, 검색어 입력 등)을 실시간 스트림으로 처리합니다. 엣지 환경이나 추론 서비스에 경량 RNN(Recurrent Neural Network)이나 단순 트랜스포머 모델을 배치합니다. 사용자가 ‘항목 A’를 클릭하는 순간, 모델은 그 단일 상호작용을 바탕으로 즉시 벡터를 생성하고, 벡터 데이터베이스에서 ‘최근접 이웃(nearest neighbor)’ 항목을 조회합니다. 이렇게 하면 개인화 방향을 실시간으로 전환할 수 있습니다. 예를 들어 공포 영화를 클릭하면, 홈페이지가 즉시 스릴러 중심으로 재구성됩니다.
속도를 유지하는 핵심은 HNSW(Hierarchical Navigable Small World) 그래프 인덱스를 활용하는 데 있습니다. 모든 항목 벡터를 전수 비교하는 브루트포스 탐색과 달리, HNSW는 그래프 구조를 따라 탐색해 로그 복잡도로 가장 가까운 항목을 찾습니다. 그 결과 쿼리 시간은 수백 밀리초에서 한 자릿수 밀리초 수준으로 줄어듭니다.
중요한 점은 현재 세션의 변화분(delta)만 계산한다는 것입니다. 사용자의 전체 이력을 다시 집계하지 않습니다. 이렇게 하면 추론 데이터 크기를 최소화하고 조회 속도를 즉각적으로 유지할 수 있습니다.
의사결정 매트릭스: 실시간 추론 vs. 사전 계산
현장에서 자주 마주하는 또 다른 아키텍처 오류는 모든 것을 실시간으로 처리하려는 경직된 접근입니다. 이런 방식은 클라우드 비용 폭증과 지연 시간 급등으로 이어집니다. 사용자가 ‘로드’를 누르는 순간 어떤 작업을 수행할지 명확히 구분하는 의사결정 매트릭스가 필요합니다.
NBC유니버설은 트래픽 분포를 ‘헤드(Head)’와 ‘테일(Tail)’을 기준으로 구분하는 전략을 채택했습니다.
- 헤드 콘텐츠: 상위 20%의 활발한 사용자나 전 세계적으로 주목받는 항목(예: 슈퍼볼 생중계, 한정판 운동화 출시 등)에 대해서는 추천 결과를 사전에 계산해두는 편이 효율적입니다. 매일 방문하는 VIP 사용자라면 에어플로우(Airflow)나 스파크(Spark)를 활용해 무거운 모델을 시간 단위 배치 작업으로 실행합니다. 결과는 레디스(Redis), 다이나모DB(DynamoDB), 카산드라(Cassandra) 같은 저지연 키-값 저장소에 보관합니다. 요청이 들어오면 O(1) 수준의 단순 조회로 마이크로초 단위에 응답할 수 있습니다. 밀리초 단위 연산과는 차원이 다릅니다.
- 테일 영역: 적시 추론(just-in-time inference)을 적용합니다. 사전 계산으로 커버하기 어려운 틈새 관심사나 신규 사용자 요청은 실시간 추론 서비스로 라우팅합니다.
마지막으로 모델 양자화로 성능을 적극 최적화합니다. 연구 환경에서는 32비트 부동소수점(FP32) 정밀도로 모델을 학습하지만, 실제 운영 환경의 추천 랭킹에는 그 정도 정밀도가 필요하지 않은 경우가 많습니다. NBC유니버설은 사후 학습 양자화(post-training quantization) 같은 기법을 활용해 모델을 8비트 정수(INT8) 또는 4비트 수준으로 압축합니다. 모델 크기는 최대 1/4로 줄고, GPU 메모리 대역폭 사용량도 크게 감소합니다. 정확도 하락은 0.5% 미만에 그치는 경우가 많지만, 추론 속도는 2배 더 빨라집니다. 이런 최적화가 200밀리초 한계를 지킬지, 넘길지를 가르는 결정적 차이가 됩니다.
복원력과 서킷 브레이커
시스템이 멈춘다면 속도는 아무 의미가 없습니다. 분산 시스템에서 200밀리초 타임아웃은 프런트엔드와 맺는 일종의 계약입니다. 정교한 AI 모델이 2초 동안 응답하지 않으면 화면은 로딩 상태로 멈추고, 사용자는 떠납니다. 이를 막기 위해 NBC유니버설은 엄격한 서킷 브레이커(Circuit Breaker)와 디그레이디드 모드(Degraded Mode)를 적용합니다. 또한 추론 서비스에는 150밀리초 같은 명확한 타임아웃을 설정합니다. 이 시간 안에 모델이 결과를 반환하지 못하면 서킷 브레이커가 작동합니다. 오류 페이지 대신 ‘현재 인기 항목’이나 ‘트렌딩’ 같은 캐시된 기본 목록으로 즉시 전환합니다. 이렇게 하면 사용자 입장에서는 페이지가 즉시 로드된 것처럼 보입니다. 개인화 수준은 다소 낮을 수 있지만, 애플리케이션은 정상적으로 반응합니다. 완벽하지만 느린 추천보다는 일반적이더라도 빠른 추천이 낫습니다.
신뢰성 계층으로서의 데이터 계약
빠르게 변화하는 환경에서는 상위 시스템의 데이터 스키마가 수시로 바뀝니다. 개발자가 사용자 객체에 필드를 추가하거나, 타임스탬프 형식을 밀리초에서 나노초로 변경하는 식입니다. 그 결과 타입 불일치가 발생해 개인화 파이프라인이 갑자기 멈추는 상황이 벌어집니다.
이를 막으려면 수집(ingestion) 계층에서 데이터 계약을 적용해야 합니다. 데이터 계약은 데이터 스트림을 위한 일종의 API 명세서입니다. 데이터가 파이프라인에 들어오기 전에 스키마 검증을 강제합니다. NBC유니버설은 프로토콜 버퍼(Protobuf)나 아브로(Avro) 스키마를 사용해 데이터 구조를 명확히 정의합니다. 생산자가 잘못된 데이터를 보내면, 계약 단계에서 이를 차단해 DLQ(Dead Letter Queue)로 보내 개인화 모델을 오염시키지 않습니다. 이렇게 하면 런타임 추론 엔진에는 항상 예측 가능하고 정제된 특성만 공급됩니다. 운영 환경에서 조용히 발생하는 GIGO(garbage in, garbage out) 문제를 예방할 수 있습니다.
평균치 이상을 보는 옵저버빌리티
그렇다면 성공은 어떻게 측정할 수 있을까요? 많은 팀이 ‘평균 지연 시간’을 봅니다. 그러나 이는 허상에 가까운 지표입니다. 가장 중요한 사용자의 경험을 가려버립니다. 평균값은 이상치를 희석합니다. 하지만 개인화 시스템에서 이런 이상치는 오히려 ‘파워 유저’인 경우가 많습니다. 5년 치 시청 이력을 가진 사용자는 5분 이력만 가진 사용자보다 더 많은 데이터 처리가 필요합니다. 데이터가 많은 사용자에게만 시스템이 느리다면, 가장 충성도 높은 고객을 벌주는 셈입니다.
그래서 NBC유니버설은 p99와 p99.9 지연 시간을 엄격히 봅니다. 이는 전체 요청 중 가장 느린 1%, 혹은 0.1% 구간에서 시스템이 어떻게 작동하는지 보여줍니다. p99가 200밀리초 이내라면 시스템은 정상 범위에 있다고 판단합니다.
미래의 아키텍처
NBC유니버설은 정적인 규칙 기반 시스템에서 에이전틱 아키텍처로 이동하고 있습니다. 새로운 모델에서는 단순히 항목 목록만 추천하지 않습니다. 사용자의 의도를 바탕으로 사용자 인터페이스 자체를 능동적으로 구성합니다. 이 전환은 200밀리초 한계를 더욱 까다롭게 만듭니다. 데이터 인프라의 근본적인 재설계를 요구합니다. 엣지 AI를 통해 연산을 사용자 가까이로 옮기고 벡터 검색을 주요 접근 패턴으로 채택하며, 모든 추론 작업의 단위 경제성을 철저히 최적화해야 합니다.
오늘날 소프트웨어 아키텍트에게 목표는 더 이상 정확도가 아닙니다. ‘속도를 유지한 정확도’입니다. 투타워 검색, 양자화, 세션 벡터, 서킷 브레이커 같은 패턴을 숙달하면 사용자 요청에 반응하는 수준을 넘어 사용자를 선제적으로 예측하는 시스템을 구축할 수 있습니다.