AI가 검색하는 것이 아니라,
AI가 만든 의미 지도를
탐색한다
서버도, API 키도, 생성형 AI도 없이 브라우저에서 돌아가는 의미 기반 검색을 직접 만들어 봤다. 핵심은 "검색할 때 AI가 답을 생성한다"가 아니라 "AI가 의미를 좌표로 바꿔 놓는다"는 것이었다. 시맨틱 검색의 진짜 구조, 그리고 'AI를 의미 컴파일러로 쓴다'는 관점.
검색창에 "조용히 쉬고 싶은 장소"를 입력하면 "사람이 적은 해변과 작은 항구 근처 숙소"라는 문서가 올라옵니다. 두 문장에 겹치는 단어는 하나도 없습니다. 그런데 이 검색은 외부 AI 서버를 한 번도 호출하지 않습니다. 네트워크를 끊어도 작동합니다. 직접 만들어 보니 분명해졌습니다. 의미 기반 검색의 비밀은 검색 순간의 AI가 아니라, 미리 만들어 둔 의미의 좌표에 있습니다.
01 / 분해앱을 다섯 단계로 뜯어보면
제가 만든 앱의 구조를 단계별로 분해하면 명확합니다.
① 문서의 의미를 벡터로 변환 ── EmbeddingGemma 2 ② 벡터를 로컬에 저장 ─────── IndexedDB (브라우저 내장 DB) ③ 검색어를 벡터로 변환 ───── EmbeddingGemma 2 ④ 가까운 벡터를 계산 ─────── 단순 수학 연산 ⑤ 결과를 정렬해서 표시 ───── 일반 프로그램
AI가 직접 관여하는 부분은 ①과 ③, 즉 언어를 벡터로 바꾸는 순간뿐입니다. 검색·저장·순위 계산은 AI가 아니라 일반적인 소프트웨어와 수학입니다.
위 데모는 이 페이지 안에서 실제로 작동한다 — 서버 호출 0회. 전체 화면으로 열기 ↗
여기서 쓴 EmbeddingGemma 2는 구글 딥마인드가 2026년 10월 6일 공개한 온디바이스 임베딩 모델입니다. 740M 파라미터로 텍스트·코드·이미지·영상·오디오를 하나의 768차원 의미 공간에 매핑하고, 필요에 따라 벡터를 512·256·128차원으로 잘라 쓸 수 있습니다(Matryoshka 표현 학습). 텍스트만 쓰면 램 191MB 수준으로 폰에서도 돌아가고, Apache 2.0 라이선스라 상업적으로도 자유롭습니다. 제 앱은 256차원으로 잘라 썼습니다. 저장 공간이 3분의 1로 줄어드는데 검색 품질은 체감상 거의 차이가 없었습니다.
02 / 전환"같은 단어인가"에서 "같은 의미 공간에 있는가"로
기존 키워드 검색은 문자열 일치입니다. 검색어가 "밤하늘의 빛"인데 문서가 "오로라는 태양 입자와 자기장 때문에 발생한다"라면, 밤하늘이나 빛 같은 단어가 문서에 정확히 없으니 찾기 어렵습니다.
임베딩 모델은 문장을 의미 공간의 좌표로 바꿉니다.
"밤하늘의 신비로운 빛" → [0.12, -0.31, 0.48, ...] "오로라는 왜 생길까" → [0.10, -0.29, 0.51, ...]
두 벡터가 가까우면, 단어가 달라도 관련된 문서로 판단합니다. 검색의 기준이 "같은 단어인가?"에서 "같은 의미 공간에 있는가?"로 바뀐 것입니다.
임베딩이 만드는 의미 지도 — 검색은 이 지도 위에서 가장 가까운 점을 찾는 일이다.
03 / 경계완전히 AI 없이도 가능한가
어느 수준의 의미 검색인지에 따라 다릅니다.
단순한 의미 확장은 AI 없이도 가능합니다
동의어 사전, 형태소 분석, TF-IDF, BM25, LSA·LSI, 온톨로지, 지식 그래프, 사람이 만든 분류 체계로 제한적인 의미 검색을 만들 수 있습니다. 예를 들어 이런 규칙을 미리 작성하는 방식입니다.
자동차 = 차량 = 승용차 휴가 = 여행 = 관광 노트북 = 랩톱
하지만 사람이 모든 표현과 관계를 정의해야 합니다. 새로운 문장, 문맥, 다국어, 이미지까지 일반화하기는 어렵습니다.
문맥적 관계는 임베딩 모델이 필요합니다
다음 관계를 동의어 목록으로 표현할 수 있을까요.
"조용히 쉬고 싶은 장소" → "사람이 적은 해변과 작은 항구 근처 숙소" "그래픽카드로 브라우저 계산을 빠르게" → "WebGPU 기반 신경망 추론" "새콤하고 밝은 향의 커피" → "중약배전 원두의 산미를 살리는 추출법"
이런 문맥적 관계를 자연스럽게 알아내는 데에는 임베딩 모델이 필요합니다. 즉 정확한 결론은 이렇습니다. 의미 기반 검색은 AI 없이도 실행되는 것처럼 만들 수 있지만, 의미를 이해하는 벡터를 만드는 과정에는 AI가 필요합니다.
04 / 착시왜 'AI 없이 검색되는 것처럼' 느껴지는가
EmbeddingGemma 2는 사용자 대신 답을 작성하지 않습니다.
- 문서를 읽고 요약하지 않습니다
- 검색 결과를 설명하지 않습니다
- 대화를 만들지 않습니다
- 서버로 내용을 보내지 않습니다
- 사실을 새로 생성하지 않습니다
모델은 입력을 256개의 숫자로 변환하고 끝입니다. 그다음부터는 벡터의 내적이라는 단순 계산입니다.
score = queryVector · documentVector
그래서 사용자는 생성형 AI를 쓰는 느낌 없이 의미 검색을 이용합니다. 가장 정확한 표현은 이것입니다.
AI가 검색하는 것이 아니라, AI가 만들어 놓은 의미 지도를 일반 검색엔진이 탐색한다.
05 / 구조이것은 RAG에서 G를 뺀 구조다
여기까지 읽으면 "그게 RAG 아닌가?"라는 질문이 나옵니다. 절반만 맞습니다. RAG(Retrieval-Augmented Generation)는 검색(R)으로 관련 문서를 찾은 뒤, 그 문서를 LLM에게 넘겨 답변을 생성(G)하게 하는 구조입니다. 보통 임베딩 API, 벡터 DB 서버, 그리고 답변을 만들 LLM까지 세 가지가 필요하고, 질문이 들어올 때마다 이 사슬이 전부 돌아갑니다.
이 앱은 그중 R만 남기고 G를 제거한 구조입니다. 검색까지는 RAG와 같은 원리로 가되, 마지막에 LLM이 문장을 생성하는 대신 원문을 그대로 보여줍니다.
기존 RAG와의 차이 — 검색 원리는 같지만, 마지막에 문장을 생성하지 않는다.
이 차이가 만드는 결과는 세 가지입니다. 첫째, 환각이 구조적으로 사라집니다. RAG의 환각은 대부분 G 단계에서 나옵니다. 검색은 맞게 해놓고 LLM이 요약하면서 없는 말을 섞는 것입니다. G가 없으면 결과는 언제나 원문이므로 섞일 것이 없습니다. 둘째, 비용 구조가 달라집니다. RAG는 질문마다 임베딩 API와 LLM 생성 비용이 들지만, 이 구조는 AI 호출이 좌표를 만들 때뿐이고 그 뒤로는 일반 프로그램이 재사용합니다. 셋째, 서버가 없어집니다. 임베딩도 저장도 계산도 전부 브라우저 안입니다.
그리고 이것은 RAG의 대체물이 아니라 RAG의 앞단을 내 손에 쥐는 것입니다. 이 로컬 검색이 찾아낸 원문을 로컬 LLM에 넘기면 그대로 완전한 로컬 RAG가 됩니다. G를 붙일지 말지를 설계자가 선택하게 되는 것이고, 많은 업무 — 규정 찾기, 사례 찾기, 과거 문서 찾기 — 에서는 애초에 G가 필요 없습니다. 원문을 보는 쪽이 더 정확하기 때문입니다.
덤으로 얻는 것들도 있습니다.
- 임베딩을 한 번 생성하면 계속 재사용합니다
- 네트워크가 없어도 작동합니다
- 텍스트와 이미지를 같은 방식으로 검색할 수 있습니다
- 자료가 외부로 나가지 않습니다
- 사용자가 자신만의 의미 검색엔진을 소유합니다
특히 뒤의 두 가지가 큽니다. 자료가 외부로 나가지 않고 오프라인에서 작동한다는 것은, 외부 API를 쓸 수 없는 보안·폐쇄망 조직 — 행정망 PC, 금융권 내부망, 연구소 보안 구역 — 에서도 의미 검색을 가질 수 있다는 뜻입니다. "우리는 보안 때문에 AI를 못 씁니다"라는 조직이 가장 먼저 도입할 수 있는 AI가 역설적으로 이 구조입니다.
06 / 단서검색어를 입력할 때도 모델은 필요하다
한 가지 단서는 있습니다. 문서 벡터를 미리 만들어 놓아도, 새로운 검색어를 같은 좌표계로 변환해야 합니다.
저장된 문서 벡터 ────────────────────┐
├─ 거리 비교
새 검색어 → EmbeddingGemma 2 (로컬) ─┘
따라서 자유로운 자연어 검색에서는 작은 임베딩 모델이 계속 필요합니다. 다만 이 모델은 브라우저에 한 번 내려받은 후 로컬에서 실행되므로, 외부 AI 서비스는 여전히 필요하지 않습니다. 텍스트 기준 램 191MB짜리 모델이 브라우저 안에서 이 역할을 해냅니다.
07 / 정리생성에서 변환으로
한 문장으로 정리하면 이렇습니다.
의미 검색의 패러다임 전환은 AI가 검색 결과를 생성하는 데 있지 않고, 인간의 언어와 이미지를 검색 가능한 좌표로 변환하는 데 있다.
그래서 제가 만든 앱은 "AI 검색 서비스"라기보다 "AI로 만든 로컬 의미 인덱스"에 가깝습니다. 생성형 AI 없이도 작동하지만, 의미 공간을 만드는 작은 임베딩 AI를 핵심 엔진으로 씁니다.
백문이 불여일견입니다. 로컬 시맨틱 검색 데모에서 "밤하늘의 신비로운 빛"을 검색해 보세요. 단어가 하나도 안 겹치는 오로라 문서가 1위로 올라오고, 서버 호출 횟수는 0회로 찍힙니다.
그리고 이것은 하나의 앱 이야기가 아닙니다. 어제 나온 EmbeddingGemma 2 같은 모델이 폰과 브라우저에서 돌아가기 시작하면서, "내 자료 전부에 의미 검색을 붙인다"는 것이 서버 없이, 비용 없이, 자료 유출 없이 가능한 일이 됐습니다. 사내 규정집, 업무 매뉴얼, 민원 사례집, 개인 노트 — PC로 일하는 모든 사람이 자기만의 의미 검색엔진을 소유하는 시대가 조용히 열리고 있습니다.
참고: Google DeepMind, EmbeddingGemma 2 공개 (2026. 10. 6) — MarkTechPost 보도 · Ollama 모델 페이지