🤖 1. DB가 “의미"를 이해하려면?
WHERE name = '강아지'는 쉽습니다. 하지만 **“귀여운 동물 사진 찾아줘”**는 어떻게 쿼리할까요?
컴퓨터는 이미지를 모릅니다. 그래서 AI 모델을 통해 **숫자 배열(Vector)**로 바꿉니다.
“강아지” ->
[0.1, 0.9, 0.3]“고양이” ->[0.2, 0.8, 0.4]“자동차” ->[0.9, 0.1, 0.0]
이 숫자들의 **거리(Distance)**가 가까우면 의미가 비슷한 겁니다. 이를 Embedding이라 합니다.
🕸️ 2. HNSW: 고차원 공간의 내비게이션
수억 개의 벡터 중에서 가장 비슷한 녀석을 10ms 안에 찾아야 합니다. 다 비교(Brute Force)하면 너무 느립니다. 그래서 **HNSW (Hierarchical Navigable Small World)**라는 그래프 인덱스를 씁니다.
계층형 그래프 구조 (Layered Graph)
마치 고속도로 -> 국도 -> 골목길을 타는 것과 같습니다.
graph TD
subgraph Layer 2 [Top Layer: Express Highway]
A1((Start)) --> B1((Jump))
end
subgraph Layer 1 [Middle Layer: Main Road]
B1 --> C1((Search)) --> D1((Search))
end
subgraph Layer 0 [Bottom Layer: Local Street]
D1 --> E1((Target)) --> F1((Neighbor?))
end
A1 -.->|Go Down| B1
D1 -.->|Go Down| E1
- Layer 2 (Top): 정거장이 듬성듬성 있습니다. 여기서 대략적인 위치로 점프합니다.
- Layer 1 (Mid): 좀 더 세밀하게 목표 지점으로 이동합니다. (Greedy Search)
- Layer 0 (Base): 모든 데이터가 연결되어 있습니다. 여기서 최종적으로 가장 가까운 이웃을 찾습니다.
핵심: “좁은 세상(Small World)” 이론을 이용하여, 멀리 떨어진 데이터도 몇 번의 점프만으로 접근합니다.
🧠 3. RAG 아키텍처와 백엔드
LLM(ChatGPT)은 최신 정보를 모릅니다. 그래서 백엔드가 “컨닝 페이퍼"를 줘야 합니다. 이를 **RAG (Retrieval-Augmented Generation)**라 합니다.
sequenceDiagram
participant User
participant Backend
participant VectorDB
participant LLM
User->>Backend: "우리 회사의 환불 규정이 뭐야?"
Backend->>Backend: 질문을 벡터로 변환 (Embedding)
Backend->>VectorDB: Search(유사도 Top 3)
VectorDB-->>Backend: [환불 규정 문서 청크]
Backend->>LLM: 프롬프트 전송 (질문 + 환불 규정)
LLM-->>Backend: 답변 생성
Backend-->>User: 최종 답변
백엔드 엔지니어의 역할
- Chunking: 문서를 적절한 크기로 자르는 전략이 검색 품질을 좌우합니다.
- Latency: Vector Search + LLM Generation 시간을 얼마나 줄이느냐가 관건입니다.
요약
- Embedding: 의미를 좌표(벡터)로 변환.
- HNSW: 고속도로를 타듯이 위층에서 아래층으로 좁혀가는 고속 검색 알고리즘.
- RAG: Vector DB에서 찾은 지식을 LLM에게 먹여주는 아키텍처.
💬 댓글