수천 개 피처 버리고 LLM 추천 엔진으로 전환한 이유
카테고리: IT 최신동향 | 작성자: Tech Reporter | 발행일: 2026-07-31
요약: 수천 개의 수공예 피처 파이프라인을 비우고 LLM 기반 추천 아키텍처 GenRec으로 전환하여 시스템 복잡도를 획기적으로 낮춘 실무 인사이트를 다룹니다.
서비스의 규모가 커질수록 데이터팀과 추천 아키텍트들이 직면하는 가장 큰 괴로움은 아이러니하게도 '모델 그 자체'가 아니라 '모델을 받쳐주는 피처 파이프라인'에서 발생합니다. 새로운 미디어 타입이나 신규 서비스 화면이 추가될 때마다 유저 행동 로그를 잘라내고, 정제하고, 카테고리별 수공예 피처(Hand-crafted feature)를 수천 개씩 만들어내는 작업은 그야말로 밑 빠진 독에 물 붓기였습니다.
수년 동안 축적된 추천 스택은 복잡한 시퀀스 모델링과 다중 작업(Multi-task) 목적함수로 가득 차 있었습니다. 파이프라인을 약간만 변경하려 해도 데이터 조인 병목이 터지고, 오프라인 피처와 온라인 피처의 스키마 불일치로 밤을 새우기 일쑤였죠.
"과연 수천 개의 스파게티 피처 파이프라인을 계속 이어 붙이는 것이 지속 가능한 아키텍처일까?" 수없이 질문을 던졌습니다. 그리고 대형 언어 모델(LLM)을 추천 시스템의 껍데기가 아닌 '심장'으로 직접 이식하자는 과감한 도전을 시작하게 되었습니다.
오늘 글을 한 줄로 요약하면 이겁니다. **"수공예 피처 파이프라인을 비우고 LLM의 세계 지식과 자연어 컨텍스트 엔지니어링을 결합한 LLM-Native 추천 아키텍처로 전환하여 시스템 복잡도와 서빙 레이턴시를 동시에 잡을 수 있었습니다."**
---
### 1. 얽히고설킨 톱니바퀴에서 표준 광케이블로: GenRec 아키텍처의 패러다임 전환
기존 프로덕션 추천 시스템은 수천 개의 수공예 피처를 얽어매어 구동하는 거대한 톱니바퀴 시계와 같았습니다. 유저의 시청 시간, 클릭 비율, 검색어, 장르별 선호도, 디바이스 종류 등을 각각의 스페셜리스트 엔지니어들이 개별 파이프라인으로 깎아 만들어야 했습니다.
영화 하나, 팟캐스트 하나, 숏폼 콘텐츠 하나를 추천 서비스 파이프라인에 새로 온보딩할 때마다 수십 개의 아키텍처 변경과 배치 데이터 재가공, 인프라 확장이 뒤따랐습니다. 새로운 카테고리가 들어오면 기존 톱니바퀴 틀 전체를 새로 설계해야 했던 셈입니다.
그러나 거대 언어 모델(LLM)이 등장하면서 이 구도는 완전히 달라졌습니다. LLM은 유저의 시청 이력과 메타데이터, 현재의 맥락을 수많은 정형 피처로 쪼갤 필요 없이, 직관적인 자연어 서술문으로 이해할 수 있는 탁월한 언어 이해 능력과 세계 지식(World Knowledge)을 갖추고 있기 때문입니다.
저희가 설계한 **GenRec** 아키텍처는 수천 개로 파편화되어 있던 피처 파이프라인을 자연어 텍스트로 전환하는 **'컨텍스트 엔지니어링(Context Engineering)'** 단 하나로 단일화했습니다. 유저의 시청 이력, 선호 장르, 시간대별 접속 맥락, 콘텐츠 메타데이터를 하나의 통합 텍스트 프롬프트로 변환해 LLM에 주입하는 방식입니다.
```text
[ 기존 프로덕션 추천 스택 ]
유저 행동 로그 ──> 수천 개의 수공예 피처 추출 ──> Multi-Task DNN/시퀀스 모델 ──> 추천 순위
[ GenRec (LLM-Native) 추천 스택 ]
유저 로그 + 맥락 ──> Context Engineering (Text Verbalization) ──> Foundation LLM (Prefill-Only) + Scoring Head ──> 추천 순위
```
이러한 전환을 통해 거둔 정량적 성과는 놀라웠습니다.
* **피처 엔지니어링 파이프라인 코드량 75% 절감**: 기존에 운영되던 수많은 배치 ETL 작업과 온라인 피처 저장소 전송 로직이 대폭 단순화되었습니다.
* **학습 데이터 라벨(Label) 요구량 80% 이상 감축**: 십수 년간 최적화된 프로덕션 추천 모델 대비 극히 일부의 라벨 데이터만으로 post-training을 진행했음에도 오프라인 추천 정확도 지표를 뛰어넘었습니다.
* **A/B 테스트 장단기 지표의 통계적 유의미한 상승**: 대규모 온라인 A/B 테스트 결과, 사용자의 단기 클릭률뿐만 아니라 서비스에 지속해서 체류하는 장기 회원 가치(Long-term member value) 지표까지 동시에 향상되었습니다.
---
### 2. 인기작 쏠림과 서빙 비용 폭발: Off-the-shelf LLM이 안겨준 잔혹사
하지만 오픈소스 LLM을 가져와 프롬프트로 추천 시스템을 만들겠다는 아이디어가 처음부터 순탄했던 것은 아닙니다. 기존의 Off-the-shelf LLM을 상용 추천 서비스에 곧바로 주입했을 때, 아키텍처 팀은 세 가지 커다란 기술적 재앙을 맞닥뜨렸습니다.
첫 번째 잔혹사는 **'글로벌 인기작 편향(Global Popularity Bias)'**과 **'환각(Hallucination)'**이었습니다. 사전 학습된 LLM에게 "이 유저가 좋아할 영화를 추천해 줘"라고 물으면, 유저의 미세한 취향 맥락과 상관없이 항상 <오징어 게임>이나 <기생충> 같은 세계적인 대작만 추천했습니다. 더 심각한 것은 서비스 카탈로그에 존재하지도 않는 세상에 없는 영화 제목을 그럴듯하게 시인처럼 읊어대는 환각 현상이 발생했다는 점입니다.
두 번째는 **'비즈니스 제약 조건 무시'**였습니다. 실무 추천 엔진은 각 국가별 저작권 라이선스 제약, 연령 제한, 라이브 스트리밍 우선 편성 등의 비즈니스 규칙을 완벽히 준수해야 합니다. 하지만 텍스트 생성을 기반으로 하는 LLM은 이러한 비즈니스 필터링 제약을 프롬프트만으로 완벽히 제어하기가 거의 불가능했습니다.
세 번째이자 가장 치명적인 병목은 **'생성형 디코딩 레이턴시와 GPU 비용 폭발'**이었습니다. 유저가 앱을 열 때마다 추천 결과를 얻기 위해 LLM이 한 토큰 한 토큰을 생성(Autoregressive Decoding)하도록 놔두면, 응답 시간이 수 초대로 치솟고 GPU 서빙 인스턴스 비용이 기존 추천 서버 대비 수십 배로 폭발했습니다. 초당 수만 건의 QPS를 처리해야 하는 실무 환경에서는 절대 수용할 수 없는 아키텍처였습니다.
---
### 3. Latency 0ms를 향한 Breakthrough: GenRec의 3가지 핵심 아키텍처
저희는 이 세 가지 잔혹사를 극복하기 위해 기존 LLM의 서빙 패러다임을 뿌리째 재설계했습니다. GenRec을 프로덕션 환경에 성공적으로 안착시킨 핵심 기술 요소는 다음과 같습니다.
#### 1) 텍스트 언어화(Text Verbalization) 중심의 컨텍스트 엔지니어링
유저의 시청 행적과 아이템 메타데이터를 파편화된 숫자 벡터로 바꾸는 대신, 모델이 이해하기 쉬운 구조화된 자연어로 언어화(Verbalization)했습니다. "유저 A는 최근 3일간 SF 액션 장르를 80% 이상 시청했으며, 밤 11시에는 호러 영화를 선호함"과 같이 맥락을 텍스트 템플릿으로 가공합니다. 이로 인해 모델은 별도의 손기술 피처 없이도 풍부한 하이레벨 맥락을 자연스럽게 파악합니다.
#### 2) 카탈로그 인지형 스코어링 헤드(Catalog-aware Scoring Head) 결합
텍스트 토큰을 하나씩 생성하는 Auto-regressive 방식을 완전히 버렸습니다. 대신 내부 파운데이션 LLM의 마지막 레이어 위에 서비스 카탈로그 내의 실제 아이템들과 1:1로 매핑되는 **Scoring Head**를 얹었습니다.
LLM이 유저 컨텍스트 텍스트를 읽고 출력하는 임베딩 벡터를 기반으로, 카탈로그 내 실제 존재하는 작품들에 대해서만 연산 점수(Score)를 일괄 산출하도록 만들었습니다. 이를 통해 존재하지 않는 작품을 추천하는 환각 현상을 100% 차단하고 비즈니스 제약 조건을 스코어링 단계에서 엄격히 통제할 수 있게 되었습니다.
#### 3) vLLM 기반의 Prefill-only 모드 서빙
가장 혁신적인 비용 단축은 서빙 인프라에서 이루어졌습니다. 기존 LLM 서빙 엔진(vLLM)을 활용하되, 생성 디코딩(Decode phase) 단계를 아예 끄고 **'Prefill-only Mode'**로만 구동했습니다.
프롬프트 입력 텍스트를 병렬로 한 번에 처리하여 Scoring Head로 점수를 뽑아낸 뒤 프로세스를 종료하는 방식입니다. 이로 인해 LLM 서빙의 최대 병목이었던 디코딩 레이턴시를 제로(0ms) 수준으로 축소시켰고, 기존 Heavy한 LLM 대비 서버 비용을 약 90% 이상 절감하면서도 프로덕션 초고속 라우팅 스펙을 만족시켰습니다.
```text
[ GenRec 서빙 처리 메커니즘 ]
1. 유저 Context 텍스트 입력 ──> vLLM Prefill-only (병렬 프롬프트 인코딩)
2. LLM Latent Vector 추출 ──> Catalog-aware Scoring Head 전달
3. 카탈로그 내 실제 아이템 점수 일괄 계산 ──> 최종 Ranking 상위 N개 노출
```
---
### 4. 내일 당장 적용해보는 실무 가이드라인
만약 여러분의 팀에서도 수많은 피처 파이프라인으로 인해 레거시 악순환에 빠져 있거나, LLM을 추천 및 검색 시스템에 도입하고자 고민 중이라면 다음 3단계 가이드라인을 강력히 추천합니다.
* **1단계: 데이터 Verbalization 규격 정의**: 기존의 정형 피처 테이블을 자연어 문장으로 자연스럽게 풀어서 서술하는 프롬프트 템플릿을 다듬으세요. 기계적인 키-값 쌍보다 문맥이 드러나는 문장 형태가 LLM의 사전 학습 지식을 훨씬 잘 끌어냅니다.
* **2단계: Auto-regressive Generation 탈피**: 추천/검색 서비스에 LLM을 쓸 때 `model.generate()` 함수로 텍스트 추천 결과를 받아오려 하지 마세요. 반드시 마스크드 토큰 예측이나 별도의 classification/scoring head를 붙여 카탈로그 ID를 직접 타게팅해야 합니다.
* **3단계: Prefill-only 서빙 파이프라인 구축**: vLLM이나 SGLang 같은 서빙 프레임워크를 사용할 때 KV 캐시 관리 부담을 줄이고 입력 인코딩 단계만 사용하는 Prefill 전용 모드로 튜닝하세요. 디코딩을 생략하는 것만으로도 GPU 서빙 효율이 극대화됩니다.
* **참고 원문**: [Netflix Tech Blog](https://netflixtechblog.com/genrec-towards-llm-native-recommendation-at-netflix-f20be6f643e3?source=rss----2615bd06b42e---4)
---
### 결론: 아키텍트를 위한 실전 무기 팩
추천 아키텍처의 미래는 더 이상 "얼마나 많은 피처를 손수 깎아 만들 것인가"에 있지 않습니다. LLM이 지닌 압도적인 언어 이해력과 내부 지식을 실무 환경의 제약 조건(Latency, Cost, Business Rules)과 어떻게 결합하느냐가 승패를 가릅니다.
내일 출근해서 여러분의 추천/검색 시스템 데이터 파이프라인을 체크하고, LLM-Native 구조로 전환하기 위한 실무 점검 프레임워크와 프롬프트 템플릿을 바로 활용해보시기 바랍니다.
```markdown
# [무기 팩 1] LLM-Native 추천 아키텍처 도입 실무 체크리스트
## 1. 피처 파이프라인 복잡도 점검
- [ ] 현재 운영 중인 수공예 피처(Hand-crafted features) 개수가 100개 이상인가?
- [ ] 신규 카테고리/도메인 추가 시 ETL 파이프라인 변경에 2주 이상 소요되는가?
## 2. Verbalization (자연어 전환) 가능성 평가
- [ ] 유저의 행적(시청/클릭/구매)을 일시, 맥락, 선호 패턴 형태의 자연어 문장으로 재구성 가능한가?
- [ ] 메타데이터(장르, 태그, 줄거리, 연출 등)가 자연어 풀텍스트로 준비되어 있는가?
## 3. 서빙 레이턴시 및 비용 구조 최적화 준비
- [ ] LLM 도입 시 생성형 디코딩(Auto-regressive decoding)을 배제하고 Prefill-only 모드 사용이 가능한 구조인가?
- [ ] 카탈로그 아이템에 직접 매핑되는 Catalog-aware Scoring Head를 설계했는가?
- [ ] vLLM/SGLang 인퍼런스 엔진에서 Prefill 레이턴시 기준(P99 < 50ms)을 충족할 수 있는가?
---
# [무기 팩 2] GenRec 스타일 유저 컨텍스트 Verbalization 프롬프트 템플릿
[역할 정의]
너는 서비스 내 유저의 최근 행동 이력과 맥락 데이터를 바탕으로 사용자의 숨겨진 잠재 취향을 정확히 파악하여 카탈로그 내 점수를 예측하는 랭킹 모델의 인코더이다.
[유저 프로필 및 상태 맥락]
- 회원 접속 기기: Smart TV (거실)
- 접속 시간대: 금요일 밤 11시 15분
- 주요 시청 언어: 한국어 (자막: 영어)
[최근 시청 이력 서술 (Recency 순)]
1. [30분 전 시청 완료] "스릴러/미스터리" 장르의 에피소드형 드라마다. 둔탁하고 어두운 분위기와 반전을 강조한 연출을 지녔다.
2. [어제 시청] "SF/디스토피아" 영화다. 인공지능과 인류의 갈등을 다루며 빠른 호흡의 액션 신이 포함되어 있다.
3. [3일 전 시청] "범죄/수사" 힐링 요소가 없는 하드보일드 다큐멘터리 시리즈다.
[요청 사항]
상기 서술된 유저의 행동 맥락과 취향 패턴을 바탕으로, 유저가 다음으로 소비할 가능성이 가장 높은 콘텐츠 Latent Representation을 인코딩하고 카탈로그 스코어링 헤드로 전달하라. (단, 글로벌 인기작 편향을 배제하고 미세 장르 연관성을 우선할 것)
```
댓글 0