기업 내 방대하고 분산된 데이터를 검색하는 것은 쉬운 일이 아닙니다. 특히 Netflix처럼 수백 개의 UI와 다양한 도메인을 가진 환경에서는 사용자가 원하는 정보를 찾기 위해 복잡한 쿼리 언어(DSL)를 배워야 하는 진입 장벽이 존재했죠. 이 문제를 해결하기 위해 Netflix 엔지니어링 팀은 AI, 특히 대규모 언어 모델(LLM)을 활용해 자연어 질문을 구조화된 Graph Search 필터 문장으로 변환하는 시스템을 구축했습니다. 이 글은 그들의 접근 방식과 핵심 인사이트를 정리한 근거자료를 바탕으로 합니다.

핵심 과제: 문법적, 의미적, 실제적 정확성
LLM이 자연어를 Graph Search Filter DSL로 변환할 때 세 가지 수준의 정확성을 보장해야 합니다.
- 문법적 정확성: 생성된 문장이 DSL의 문법을 따르나요?
- 의미적 정확성: 문장이 실제 인덱스에 존재하는 필드와 허용된 값만을 사용하나요? (환각 방지)
- 실제적 정확성: 생성된 필터가 사용자의 진짜 의도를 정확히 반영하나요?
의미적 정확성을 보장하기 위한 핵심 전략은 RAG(Retrieval-Augmented Generation) 패턴을 필드와 제어어휘(Controlled Vocabulary)에 각각 적용하는 것이었습니다.

RAG를 활용한 컨텍스트 최적화 전략
수백 개의 필드와 수천 개의 제어어휘 값을 LLM에 모두 제공하는 것은 비효율적이고 정확도를 떨어뜨립니다. Netflix는 두 단계의 RAG로 컨텍스트를 정제했습니다.
| 대상 | 방법 | 목적 |
|---|---|---|
| 필드 RAG | 필드명, 설명, 타입을 임베딩하여 벡터 저장소에 인덱싱. 사용자 질문 청크와 유사도 검색으로 Top-K 필드 선별. | 질문과 관련된 필드만 컨텍스트에 포함하여 노이즈 제거 및 정확도 향상 |
| 제어어휘 RAG | 제어어휘 값(표시명, 설명, 동의어)을 임베딩하여 벡터 저장소에 인덱싱. 질문과 유사한 값들을 검색하여 해당 필드의 허용값으로 제공. | LLM의 값 환각 방지 및 관련 필드 추가 추론 |
이를 통해 각 질문은 관련된 필드와 값의 최적화된 조합으로 해석됩니다.

사용자 신뢰 구축과 실용적 전략
가장 어려운 '실제적 정확성' 문제를 해결하기 위해 Netflix는 두 가지 실용적인 UI/UX 전략을 도입했습니다.
- 작업 과정 공개: 생성된 복잡한 DSL 쿼리를 그대로 보여주지 않고, 이를 파싱한 AST(추상 구문 트리)를 이용해 사용자 인터페이스의 '칩'이나 '패싯'으로 시각화합니다. 사용자는 자신의 질문이 어떤 필터 조건으로 해석되었는지 직관적으로 확인하고 수정할 수 있습니다.
- 명시적 엔터티 선택(@멘션): 사용자가
@dark와 같이 특정 엔터티를 언급하면, RAG 추론 단계를 건너뛰고 해당 제어어휘를 컨텍스트에 하드코딩합니다. 이는 모호성을 제거하고 정확성과 사용자 신뢰를 동시에 높이는 강력한 방법입니다.
결론: 이 시스템은 단순한 번역기가 아닌, 확장 가능한 플랫폼으로 진화하고 있습니다. LLM의 유연성과 기존 Graph Search 인프라의 견고함, RAG 패턴의 정확도 향상, 그리고 사용자 중심의 피드백 메커니즘이 결합된 모범 사례라고 할 수 있습니다. 복잡한 엔터프라이즈 검색 시스템에 AI를 도입하려는 팀이라면 꼭 참고해야 할 접근법입니다.