무지성으로 LLM에 FTS5 + Vector DB를 구현했습니다
DINKIssTyle

Lv.1 DINKIssTyle (118.♡.25.76)

2026년 4월 8일 PM 10:37

조회 1,497 공감 0

실험가능적 하네스??에 이어

FTS5와 Vector DB를 구현했습니다

그냥 몰라서 물었을 뿐인데

제미나이도 GPT도 강력 추천했습니다.

둘다 자기네 토큰을 쓸거라고 기대했겠죠?

하지만 요즘 큰일은 GPT에게 맡기고 있기 때문에 Codex에서 구현 했습니다. 생성형 이미지모델 다룰때 많이보던 텍스트 인코더 모델이 여기서 쓰이네요!

코덱스 토큰 오늘 저녁이 리셋이었는데

주제한 반 가까이 날아갔습니다 ㄷㄷ

그렇게 지지고 볶아도 일주일 넉넉한 토큰이었는데 반 가까이 날아가다니 ㅜ ㅜ

구축하고 나니 성능은 대애애애애애박 입니다.

애풀실리콘에서 LLM 돌릴 때 제일 최약체였던 프리필이 없다싶이 까지는 아니고 조금찬 속도쯤 합니다. 매번 필요한 힌트만 주입, 매번 문맥 디비를 읽고 필요하면 전체 문맥을 읽습니다.

그렇게 배경과 문맥을 알아요.

속도가 정말 초고속으로 바뀌는군요.

왜 이런 좋은 기술이 있는데 런타임들에 적용하지 않나 모르겠어요.

아마도 추론 런타임 하나 더 돌려야 그런가 보다 생각중인데...

정말 대단하네요 ㄷㄷ

휴리스틱 대부분 걷어내고 CoT화 한 것도 큰몫하지만 FTS5 + Vector DB를 기억하세요 여러분!

1. FTS5 (Full-Text Search 5)

FTS5는 SQLite에서 제공하는 '가상 테이블' 모듈로, 대량의 텍스트 데이터에서 특정 단어나 문구를 빛의 속도로 찾아내기 위해 설계되었습니다.

작동 원리: 우리가 책 뒤편에서 '인덱스(찾아보기)'를 보고 페이지를 찾는 것과 같습니다. 텍스트를 단어 단위(Token)로 쪼개어 어떤 단어가 어디에 위치하는지 미리 색인을 만들어 둡니다.

장점: "정확히 일치하는 단어"를 찾을 때 가장 빠릅니다. (예: "M4 mini"가 포함된 모든 문장을 찾아줘)

단점: 의미를 이해하지는 못합니다. '사과'를 검색하면 'Apple'이나 '부사'라는 단어는 찾아내지 못합니다.

2. Embedding (임베딩)

임베딩은 컴퓨터가 이해할 수 없는 '글자'를 숫자의 나열(벡터, Vector)로 변환하는 기술입니다.

핵심 개념: 단어나 문장을 수백~수천 개의 숫자로 이루어진 좌표계 위의 한 점으로 표시합니다.

특징: '의미적 유사도'를 가집니다. 예를 들어, 좌표계 상에서 '강아지'와 '멍멍이'는 매우 가까운 위치에 놓이게 됩니다.

MCP 활용: 웹페이지의 긴 텍스트를 임베딩하면, 모델이 "성능에 대한 내용"을 물었을 때 '성능'이라는 단어가 직접 없어도 관련 있는 수치나 벤치마크 문단을 찾아낼 수 있습니다.

3. Vector/Embedding DB

벡터 DB는 위에서 만든 임베딩(숫자 나열)을 저장하고 검색하는 데 특화된 데이터베이스입니다.

전통적 DB와의 차이: 일반 DB는 "값이 같은가?"를 묻지만, 벡터 DB는 "어떤 데이터가 가장 가까운(유사한) 위치에 있는가?"를 묻습니다.

MCP에서의 역할: 1. 웹페이지를 읽어 수천 개의 문단으로 쪼갭니다.

2. 각 문단을 임베딩(벡터화)하여 DB에 넣습니다.

3. 사용자가 질문을 던지면, 질문도 벡터로 만듭니다.

4. DB에서 질문 벡터와 가장 거리가 가까운 문단 3~5개만 뽑아옵니다.

5. 이 짧은 조각들만 모델의 컨텍스트에 넣어줍니다.

FTS5 vs Vector DB: 무엇을 써야 할까요?

Dinki님의 상황에서는 두 방식을 혼합(Hybrid Search)하는 것이 가장 이상적입니다.

댓글 (10)

  • J

    joelhxx Lv.1

    04.08 · 122.♡.246.39

    유용한정보감사합니다

  • alliswell

    alliswell Lv.1

    04.08 · 116.♡.95.1

    네에? 슨생님 뭐 중요한 말씀 하시는거 같은데 머라카시는지 모르겠는데예~ 너무 궁금한데 ai한테 처음에 머라 물어보믄 되까예?? +.+

  • DINKIssTyle

    DINKIssTyle Lv.1 → alliswell 작성자

    04.08 · 61.♡.73.102

    저도 이해는 코딱지 만큼 했고 지피티가 다 해줬습니다. ㅋㅋㅋㅋ

  • alliswell

    alliswell Lv.1 → DINKIssTyle

    04.08 · 116.♡.95.1

    흑흑 지피티한테 뭐라고 물어봐야 할지를 모르겟슴다 ㅠ 첫질문 하나만 알려주세요 그럼 뭐라 대답해주면 또 물어보고 알아가보고싶습니닷!! +.+

  • DINKIssTyle

    DINKIssTyle Lv.1 → alliswell 작성자

    04.08 · 61.♡.73.102

    우선 트렌드에 맞춰... 앱 하네스로 개편해달라고 하시고,

    SQLite를 내장하고 FTS5 + Vector DB 구현해서 컨텍스트로 사용하라고 시작을 해보세요.
    그리고 사용하시는 환경에 맞게 조립해나가시면 될거 같습니다.

  • alliswell

    alliswell Lv.1 → DINKIssTyle

    04.09 · 211.♡.75.146

    바로 시도해볼게요! 감삼다

  • plaintext

    plaintext Lv.1

    04.08 · 112.♡.131.209

    오옹 덕분에 또 새로운거 담아갑니다 ㅎㅎ

    하이브리드라면

    경우에 따라 자동으로 두 db를 쓰는걸까요?ㅎㅎ

  • DINKIssTyle

    DINKIssTyle Lv.1 → plaintext 작성자

    04.08 · 61.♡.73.102

    간단히 이해하기로는 레거시(?)방식의 텍스트 검색이나 하는 디비는 딱 맞는 키워드 찾을 때 빠르니깐 사용하고,

    토큰화한 디비는 연상능력이 뛰어나니깐 동일하거나 유사한 내용을 한번에 훑어 보기 좋다고 하는거 같습니다. ㅎㅎㅎ

  • 알랭드특급

    알랭드특급 Lv.1

    04.09 · 84.♡.171.26

    오오오 동작 잘하면 장땡이죠.

  • 지나가던행인이

    지나가던행인이 Lv.1

    04.09 · 61.♡.201.240

    좋은 글이네요 그런데 다른 분들이 햇갈리실까봐 한마디 거들어 봅니다 😁

    본문 마지막 "FTS5 vs Vector DB: 무엇을 써야 할까요?" 부분의 둘은 비교 대상이 아닙니다. FTS5는 키워드 매칭, Vector DB는 의미 벡터를 저장하고 유사도 검색을 하는 저장소입니다. 카테고리가 다릅니다. 본문 결론처럼 같이 쓰는 게 맞고, 실제로 지금 하이브리드 구조가 QMD등 컨텍스트 검색에 널리 쓰이는 방식이기도 합니다.

    그리고 FTS5+SQLITE-VEC로 검색 성능이 좋아지셨다고 하셨는데 임베딩 모델을 어떤걸 쓰셨나에 따라 결과가 좀 달라질 것 같긴 합니다😁

    FTS5 기본 토크나이저(unicode61)는 공백 기준으로 단어를 자르기 때문에 한국어에서 문제가 생깁니다. "검색을 좋아합니다"가 [검색을][좋아합니다]로 쪼개져서 "검색"으로 검색하면 히트가 안 됩니다. CJK(한중일) 환경에서는 Kiwi나 Mecab-ko 같은 형태소 분석기를 커스텀 토크나이저로 연결해줘야 제대로 동작합니다. 벡터 검색 쪽도 한국어 지원 임베딩 모델(BGE-M3 등)을 따로 챙기셔야 '진짜' 검색을 잘 하게 될겁니다

댓글을 작성하려면 이 필요합니다.