News Feed

200밀리초의 벽을 지켜라…개발자를 위한 실시간 개인화 가이드

컨텐츠 정보

  • 조회 477

본문

이커머스, 핀테크, 미디어 분야에서 동시성이 높은 애플리케이션을 구축하는 엔지니어에게 ‘200밀리초’는 넘으면 안 되는 상한선이다. 200밀리초는 사용자가 상호작용을 즉각적이라고 느끼는 심리적 임계값이다. 개인화된 홈페이지, 검색 결과, 다음 동영상 추천 목록 로딩이 200밀리초를 넘으면 사용자 이탈이 급증한다. 아마존의 유명한 연구에 따르면 지연 시간이 100밀리초 증가할 때마다 매출이 1% 감소했다. 스트리밍 업계에서는 이 지연이 곧바로 이탈률 상승으로 이어진다.

문제는 비즈니스 조직이 항상 더 똑똑하고, 더 무거운 모델을 요구한다는 점이다. 요약을 생성하는 LLM, 이탈을 예측하는 심층 신경망, 가격을 최적화하는 복잡한 강화학습 에이전트까지 도입하려 한다. 이런 모델은 모두 지연 시간 예산을 한계로 밀어붙인다.

엔지니어링팀을 이끄는 필자는 종종 거대 파라미터 모델 배포를 추진하는 데이터 사이언스팀과, p99 지연 시간 그래프가 빨간색으로 치솟는 상황을 우려하는 사이트 신뢰성 엔지니어(SRE) 사이에서 중재자 역할을 맡는다.

더 성능 좋은 AI에 대한 요구와 1초 미만 응답 시간이라는 현실을 동시에 만족시키려면 아키텍처를 재설계해야 한다. 단일한 요청-응답 구조에서 벗어나 추론(inference)과 데이터 검색(retrieval)를 분리하는 접근이 필요하다.

여기서는 트래픽 증가에도 속도를 유지하는 실시간 아키텍처를 설계하기 위한 청사진을 그려본다.

투패스 시스템 아키텍처

초기 단계의 개인화 팀에서 자주 보는 실수는 카탈로그에 있는 모든 항목을 실시간으로 순위화하려는 시도다. 영화, 상품, 음악 등 10만 개 항목이 있다면, 사용자 요청이 들어올 때마다 10만 개 전부에 복잡한 스코어링 모델을 적용하면 200밀리초 안에 처리하기 어렵다.

Two-tower architecture architecture for latency

Manoj Yerrasani

이를 해결하기 위해 NBC유니버설(NBCUniversal)은 투타워(two-tower) 아키텍처, 즉 후보 생성과 랭킹을 분리하는 구조를 도입했다.

  1. 후보 생성(검색 계층) : 빠르고 가벼운 1차 선별 단계다. NBC유니버설은 벡터 검색이나 단순 협업 필터링을 활용해 10만 개 항목을 상위 500개 후보로 압축한다. 이 단계에서는 정밀도보다 재현율을 우선한다. 처리 시간은 20밀리초 이내로 끝나야 한다.
  2. 랭킹(스코어링 계층) : 본격적인 AI 모델이 작동하는 단계다. NBC유니버설은 선별된 500개 후보를 XG부스트(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를 통해 연산을 사용자 가까이로 옮기고 벡터 검색을 주요 접근 패턴으로 채택하며, 모든 추론 작업의 단위 경제성을 철저히 최적화해야 한다.

오늘날 소프트웨어 아키텍트에게 목표는 더 이상 정확도가 아니다. ‘속도를 유지한 정확도’다. 투타워 검색, 양자화, 세션 벡터, 서킷 브레이커 같은 패턴을 숙달하면 사용자 요청에 반응하는 수준을 넘어 사용자를 선제적으로 예측하는 시스템을 구축할 수 있다.
dl-itworldkorea@foundryco.com

관련자료

댓글 0
등록된 댓글이 없습니다.