색인이 윈도우를 넘기면, 검색이라는 패러다임 자체가 한계에 부딪힌다.
검색은 성공했다
RAG의 한계를 논했다. 임베딩 유사도의 부정확함, 청크 분할의 자의성, 품질 판단의 불가능.
그러나 그 논의는 검색의 품질에 관한 것이었다. “더 정확하게 검색하려면 어떻게 해야 하는가.”
이제 다른 질문을 해야 한다. 검색이 완벽하다고 가정하자. 질의에 정확히 관련된 정보만 반환한다고 가정하자.
그래도 안 되는 경우가 있다.
규모의 문제
사내 지식 베이스에 서술이 1,000개 있다. 색인이 있다. 색인을 컨텍스트에 넣는다. 질의한다. 결과를 꺼낸다. 작동한다.
서술이 10만 개가 되었다. 색인이 커졌다. 그래도 윈도우에 들어간다. 작동한다.
서술이 1,000만 개가 되었다. 색인 자체가 윈도우를 넘긴다.
이것은 검색 품질의 문제가 아니다. 검색이 아무리 정확해도, 검색하기 위해 참조해야 하는 색인이 윈도우에 들어가지 않으면 검색을 시작할 수 없다.
그리고 지식은 커진다. 기업의 문서는 매일 늘어난다. 에이전트가 학습한 것은 계속 쌓인다. 세계의 지식은 줄어들지 않는다.
윈도우가 커지면 해결되는가. 128K가 1M이 되고 10M이 되면. 지식이 100M이면 같은 문제가 반복된다. 윈도우는 항상 유한하고, 지식은 항상 성장한다. 이 불균형은 영구적이다.
검색과 탐색의 차이
검색은 한 번의 질의로 결과를 얻는 것이다.
질의: “삼성전자 2024년 3분기 영업이익” → 결과: 9.18조원.
한 번. 끝.
탐색은 여러 단계를 거쳐 결과에 도달하는 것이다.
1단계: 전체 지식 지도를 본다. “기업”, “산업”, “거시경제”, “기술”… → “기업"을 선택한다.
2단계: 기업 지도를 본다. “삼성전자”, “SK하이닉스”, “현대자동차”… → “삼성전자"를 선택한다.
3단계: 삼성전자 지도를 본다. “재무”, “인사”, “기술”, “법무”… → “재무"를 선택한다.
4단계: 재무 지도를 본다. “분기별 실적”, “연간 실적”, “투자 계획”… → “분기별 실적"을 선택한다.
5단계: 분기별 실적에서 “2024년 3분기"를 꺼낸다. → 영업이익 9.18조원.
결과는 같다. 과정이 다르다.
검색은 “이것 있어?“라고 묻는 것이다. 탐색은 “어디 있을까?“를 추적하는 것이다.
검색은 색인이 질의자에게 보여야 한다. 색인 전체가 접근 가능해야 한다. 탐색은 지도의 현재 층만 보면 된다. 각 단계에서 한 층만 윈도우에 들어간다.
도서관의 비유
동네 도서관에 간다. 책이 3,000권이다. 사서에게 묻는다. “이순신 전기 있어요?” 사서가 기억하고 있다. “3번 선반 끝에 있어요.” 검색이다. 작동한다.
국회도서관에 간다. 장서가 1,000만 권이다. 사서에게 묻는다. “이순신 전기 있어요?” 사서도 모른다. 1,000만 권을 기억하는 사람은 없다.
대신 분류 체계가 있다.
1층 안내도를 본다. → “역사” 섹션은 3층이다. 3층에 간다. → “한국사"는 동쪽 구역이다. 동쪽 구역에 간다. → “조선시대"는 D열이다. D열에 간다. → “인물"은 D열 3번째 칸이다. 3번째 칸에서 찾는다. → 이순신 전기가 있다.
사서의 기억 용량은 바뀌지 않았다. 도서관의 규모가 바뀌었다. 사서에게 묻는 방식(검색)에서 분류 체계를 따라 걷는 방식(탐색)으로 바뀌었다.
핵심은 이것이다. 각 단계에서 보아야 하는 것의 크기는 사서의 기억 용량 안에 들어간다. 1층 안내도. 3층 구역도. 동쪽 구역의 열 목록. D열의 칸 목록. 전부 한눈에 들어오는 크기다.
전체 장서 목록은 한눈에 안 들어온다. 그러나 각 층의 지도는 들어온다.
이것이 탐색이 검색과 다른 점이다. 전체를 한 번에 볼 필요가 없다. 현재 위치에서 다음 방향만 판단하면 된다.
맵의 맵
이것을 기술적으로 표현하면 맵의 계층 구조다.
1차 맵: 전체 지식의 최상위 분류. “이 지식 베이스에는 기업, 산업, 거시경제, 기술에 대한 정보가 있다.” 수십 개의 항목. 윈도우에 들어간다.
2차 맵: 각 최상위 분류의 하위 분류. “기업 분류에는 삼성전자, SK하이닉스, 현대자동차… 가 있다.” 수십~수백 개의 항목. 윈도우에 들어간다.
3차 맵: 각 하위 분류의 세부 분류. “삼성전자에는 재무, 인사, 기술, 법무… 가 있다.” 수십 개의 항목. 윈도우에 들어간다.
실제 서술: 최하위 맵이 가리키는 구체적 정보. “삼성전자의 2024년 3분기 영업이익은 9.18조원이다.”
각 층의 크기가 윈도우 안에 들어가면, 전체 지식의 규모와 무관하게 탐색이 가능하다.
서술이 1,000만 개여도 각 층이 100개씩이면 5단계 탐색으로 도달한다. 100 → 100 → 100 → 100 → 100 = 100억 개까지 커버. 각 단계에서 윈도우에 들어가는 것은 100개뿐이다.
이것은 B-tree가 디스크에서 데이터를 찾는 방식과 같다. 전체 데이터를 메모리에 올리지 않는다. 트리의 현재 노드만 읽고, 다음 노드로 이동한다. 메모리 크기와 무관하게 어떤 규모의 데이터도 탐색할 수 있다.
컨텍스트 윈도우가 메모리이고, 지식 베이스가 디스크이고, 맵이 B-tree의 노드다.
에이전트가 걷는다
다단계 탐색에서 각 단계의 방향을 선택하는 것은 누구인가.
에이전트다.
1차 맵을 컨텍스트에 넣는다. 에이전트가 읽고, 질의와 비교하고, “기업” 방향을 선택한다.
2차 맵을 요청한다. 기업 분류의 하위 맵이 컨텍스트에 들어온다. 에이전트가 읽고, “삼성전자” 방향을 선택한다.
3차 맵을 요청한다. 에이전트가 “재무"를 선택한다.
이것은 에이전트의 도구 사용이다. 맵을 읽는 것이 도구 호출이고, 방향을 선택하는 것이 판단이고, 다음 맵을 요청하는 것이 다음 도구 호출이다.
검색에서는 에이전트가 한 번 질의하고 결과를 받는다. 수동적이다. 탐색에서는 에이전트가 여러 번 판단하고 방향을 선택한다. 능동적이다.
컨텍스트 엔지니어링이 에이전트 설계와 만나는 지점이 여기다. 컨텍스트에 무엇을 넣을지가 에이전트의 판단에 의해 단계적으로 결정된다. 컨텍스트 구성이 정적 조립이 아니라 동적 탐색이 된다.
현재 이 문제는 거의 논의되지 않는다
RAG 커뮤니티의 논의를 보면, 대부분의 에너지가 검색 품질에 집중되어 있다.
더 좋은 임베딩 모델. 더 나은 청킹 전략. 리랭커 아키텍처. 하이브리드 검색. 그래프 RAG.
전부 중요하다. 전부 “한 번의 검색에서 더 좋은 결과를 얻는 방법"이다.
“검색 한 번으로 안 되면 어떻게 하는가"는 거의 논의되지 않는다.
색인이 윈도우를 넘기는 시점. 결과가 너무 많아서 전부 넣을 수 없는 시점. 지식의 규모가 검색이라는 패러다임의 전제를 무너뜨리는 시점.
이 시점은 온다. 지식은 커지고 윈도우는 유한하므로.
현재의 해결책은 대부분 회피다. 상위 k개만 가져온다. 나머지는 버린다. 윈도우를 키운다. 비용이 늘어난다. 지식을 분리한다. 도메인별로 별도 벡터 스토어.
전부 규모가 더 커지면 다시 같은 문제를 만난다.
탐색의 전제 조건
탐색이 작동하려면 지식이 탐색 가능한 구조로 되어 있어야 한다.
계층이 존재해야 한다. 지식이 평면적으로 나열되어 있으면 탐색할 수 없다. 임베딩 벡터 스토어는 평면이다. 모든 청크가 같은 수준에 있다. 계층이 없으므로 “더 깊이 들어간다"는 개념이 없다.
각 층이 윈도우에 들어가야 한다. 맵 하나가 윈도우를 넘기면 탐색이 되지 않는다. 계층의 각 수준에서 선택지가 적절한 크기여야 한다. 이것은 분류 체계의 설계 문제다.
경로가 다양해야 한다. 같은 정보에 여러 경로로 도달할 수 있어야 한다. “삼성전자 → 재무 → 영업이익"으로도, “반도체 산업 → 주요 기업 → 삼성전자 → 실적"으로도. 질문에 따라 자연스러운 경로가 다르기 때문이다. 분류 기준이 하나로 고정되면 어떤 질문에는 맞고 어떤 질문에는 맞지 않는다.
폴더 구조는 계층이 있지만 경로가 하나다. 파일 하나는 폴더 하나에만 속한다. “삼성전자/재무/영업이익"이라는 경로만 존재한다. “반도체 산업"이라는 질문이 들어오면 이 폴더 구조로는 자연스러운 탐색이 불가능하다.
그래프는 계층도 있고 경로도 다양하다. 하나의 노드가 여러 상위 노드와 연결될 수 있다. 삼성전자라는 노드에 “기업” 경로로도, “반도체 산업” 경로로도, “코스피 상장사” 경로로도 도달할 수 있다. 질문이 어떤 맥락에서 출발하든 자연스러운 경로가 존재한다.
이것은 미해결 문제다
솔직하게 말해야 할 것이 있다.
다단계 탐색의 필요성은 명확하다. 그러나 이것을 효과적으로 구현한 시스템은 아직 표준이 없다.
맵의 계층을 어떻게 자동 생성하는가. 각 층의 적절한 크기를 어떻게 결정하는가. 에이전트가 잘못된 방향을 선택하면 어떻게 하는가. 탐색 깊이가 깊어지면 지연 시간은 어떻게 되는가.
이것들은 열린 질문이다.
그러나 문제가 미해결이라는 것이 문제가 존재하지 않는다는 뜻은 아니다.
지식은 커지고 있다. 윈도우는 유한하다. 검색만으로는 안 되는 시점이 온다.
그 시점에 탐색이라는 답이 준비되어 있어야 한다. 준비되어 있지 않으면, 윈도우를 키우거나 지식을 버리는 것밖에 선택지가 없다.
요약
검색은 질의 한 번에 결과를 반환한다. 지식의 규모가 충분히 커지면 이것으로 안 된다. 색인 자체가 윈도우를 넘기기 때문이다.
탐색은 계층적 지도를 따라 방향을 선택하며 들어가는 것이다. 각 단계에서 보아야 하는 것은 윈도우 안에 들어간다. 전체 규모와 무관하게 각 단계는 유한하다. B-tree가 디스크 전체를 메모리에 올리지 않고도 데이터를 찾듯이.
에이전트가 각 단계에서 방향을 판단한다. 컨텍스트 구성이 정적 조립이 아니라 동적 탐색이 된다. 컨텍스트 엔지니어링이 에이전트 설계와 만나는 지점이다.
탐색이 작동하려면 지식이 계층적이고, 각 층이 유한하고, 경로가 다양해야 한다. 폴더 구조는 경로가 하나다. 그래프는 경로가 다양하다.
이것은 아직 표준적 해법이 없는 미해결 문제다. 그러나 지식이 커지고 윈도우가 유한한 한, 반드시 풀어야 할 문제다.