| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- entity
- 전역변수
- literal
- 0.75px border
- 타입스크립트
- 10px
- github
- font-size
- 당근마켓
- ZOOM
- 1px border
- 데이터베이스 #try #이중
- es6
- 컴포넌튼
- TypeScript
- 으
- 문서번호
- 서버리스 #
- Strict
- 클론코딩
- TS
- &연산
- 0.25px border
- 0.5px border
- jwt
- Websocket
- Props
- ES5
- npm
- angular
Archives
- Today
- Total
복잡한뇌구조마냥
[DB] 벡터 데이터베이스(Vector DB) 본문
요즘 RAG(Relevance-Augmented Generation)나 개인화 추천, 대화형 챗봇을 만들다 보면 꼭 등장하는 기술이 벡터 데이터베이스(Vector DB) 이다.
나 역시 프로젝트에서 GPT 기반 여행 추천 챗봇을 구현하면서 관련 내용을 정리해보면 좋을 것 같아 이렇게 글을 남긴다.
1. 🔍 벡터 DB가 등장한 이유
일반적인 관계형 DB는 정확한(Exact) 검색에는 강하지만, 아래와 같은 **의미 기반 검색(Semantic Search)**에는 약하다.
예를 들어:
- “강원도 힐링 여행지 추천 좀 해줘”
- “한적하고 조용한 여행지가 좋아”
- “아이랑 가기 좋은 카페 근처 여행지 있어?”
이런 검색을 문자열 매칭으로 처리하기는 사실상 불가능하다.
GPT나 임베딩 모델은 이런 문장을 수백~수천 개의 숫자 벡터로 바꾸고,
이 벡터 간 유사도를 비교해서 의미가 비슷한 데이터를 찾는다.
즉, 벡터 DB는 텍스트의 의미를 숫자로 저장하고 빠르게 유사도를 계산해주는 DB이다.
2. 🧠 벡터 DB가 하는 일
| 기능 | 설명 |
| Embedding 저장 | 텍스트 → 벡터(예: 1536차원) 를 저장 |
| 유사도 검색 | Cosine similarity, L2 distance 기반으로 가장 비슷한 벡터들을 빠르게 조회 |
| 메타데이터 저장 | 벡터 + 원본 텍스트 + 태그, 카테고리, 작성일 등 함께 저장 가능 |
| RAG용 필터링 | "강원도 여행지 중에서", "카페 포함 데이터만" 같은 조건식 검색 가능 |
| 밀리초 단위 가까운 응답 속도 | PostgreSQL LIKE 검색보다 훨씬 빠름 |
3. 🧱 벡터 DB 구성 요소
일반적인 벡터 DB는 아래 구조로 되어 있다:
[문서(TEXT)] → [Embedding 모델] → [Vector(벡터)]
→ [벡터 DB 저장] → [유사도 검색] → [GPT로 응답 생성]
RAG 구현 시에는 거의 이렇게 동작한다.
4. 📊 벡터 DB 비교
| DB 종류 | 벡터 지원 방식 | 인덱싱 방식 | 장점 | 단점 | 운영난이도 | 추천 사용 사례 |
| MariaDB | 벡터 타입 없음 → FLOAT 배열 기반 직접 구현 | 없음 → L2/Cosine 직접 계산 | 기존 인프라 그대로 사용 가능, 비용 없음 | 대규모 검색에서 속도 한계, ANN(근사 최근접) 지원 없음 | 매우 쉬움 | 소규모 RAG, 챗봇, 학습 프로젝트 |
| Qdrant | Native Vector DB | HNSW | 빠른 유사도 검색, 필터링 강함, Rust 기반 고성능 |
스키마 설계 필요, 서버 운영 필요 | 중간 | RAG, 추천 시스템, 대규모 검색 |
| Chroma | Python 중심 임베딩 스토어 | HNSW | 로컬 개발 최강, 매우 직관적 |
서버 운영 비권장, 대규모 비적합 | 쉬움 | 연구/개발용, 빠른 프로토타이핑 |
| pgvector | PostgreSQL 확장 모듈 | IVF/ HNSW / L2 |
SQL 기반 친숙함, Supabase 완전 호환, 운영 쉬움 |
고성능 벡터 DB보단 속도 떨어짐 | 쉬움 | 웹서비스 RAG, 중형 검색 서비스 |
| Milvus | Native Vector DB | IVF_FLAT, HNSW, DiskANN 등 |
초대규모 데이터 처리 최강, 확장성 탁월 | Kubernetes 기반 운영 난이도 높음 | 어려움 | 대규모 AI 검색 엔진, 엔터프라이즈 |
| Weaviate | Native Vector DB | HNSW | GraphQL 스타일 쿼리 편함, 플러그인 다양 | 운영 난이도 높음, 메모리 사용 높음 | 어려움 | 복잡한 RAG, 멀티 데이터 타입 검색 |
✔ 핵심 요약
- 간단한 벡터 검색 + 운영 난이도 최소화 → MariaDB or pgvector
- 중규모~대규모 벡터 검색 + 필터링 → Qdrant
- 초대규모 검색 + 고성능 + 엔터프라이즈 → Milvus
- 개발용/로컬 테스트 → Chroma
5. 🌏 벡터 DB를 도입하면 달라지는 점
👍 장점
- 의미 기반 검색이 가능해져서 자연스러운 챗봇 구현 가능
- 기존 키워드 기반 검색보다 정확도 향상
- 추천 시스템 구현이 쉽다
- LLM 프로젝트에서 필수로 사용됨 (RAG)
👎 단점
- Embedding 저장 공간이 많이 필요할 수 있음
- Embedding 업데이트 비용 발생
- 완전한 정답이 아닌 확률적 검색
6. 📝 프로젝트에 어떻게 활용할 수 있을까?
예를 들어 네 TripHub 프로젝트처럼 여행 정보를 벡터 DB에 넣으면:
- "2박 3일 힐링 여행 추천"
- "카페 많은 여행 코스 알려줘"
- "겨울에 가기 좋은 여행지"
이런 질문에 대해 의미로 이해하고 검색해주는 챗봇을 만들 수 있다.
이런 글을 블로그에 올리면 Search 트래픽 + 기술 트렌드에 잘 맞아서 조회수도 잘 나오는 편임.
7. 📌 글 마무리 – 벡터 DB는 요즘 LLM 프로젝트의 핵심
GPT 기반 서비스를 만들 때
“이걸 DB로 어떻게 저장하지?”
라는 고민이 들기 시작하면 벡터 DB가 거의 정답에 가까운 선택이다.
특히 Supabase에서 제공하는 PGVector는:
- 설정 간단
- RAG 구현 최적화
- 비용 저렴
이라 처음 벡터 DB를 접하는 개발자에게 가장 추천할 만하다.
LIST
'BE > DB' 카테고리의 다른 글
| [DB] 데이터 무결성(Integrity)의 종류와 제약조건 정리 (0) | 2025.11.02 |
|---|---|
| [DB] 트랜잭션(Transaction)과 ACID 특성 정리 (0) | 2025.10.29 |
| [SQL] 명령어 분류 - DDL / DML / DCL / TCL (0) | 2025.09.22 |
| [DB] Supabase 기본 세팅 (1) | 2025.07.14 |
| [DB] ERD Cloud 사용법 (1) | 2025.07.11 |