๐ ๋ฒกํฐ DB ์ ๋ฌธ: Pinecone vs Chroma, ์์ฐ 0์ ์ฌ์ด๋ ํ๋ก์ ํธ์ ๋ญ๊ฐ ๋ง๋?
⏱ ์ฝ๊ธฐ ์ฝ 12๋ถ | ๐ 2,338์
์ด ๊ธ์์๋ Pinecone vs Chroma ๋ฒกํฐ DB ๋น๊ต๋ฅผ ์์ฐ 0์ ๊ธฐ์ค์ผ๋ก ๋จ๊ณ๋ณ๋ก ์ ๋ฆฌํฉ๋๋ค. RAG ํ๋ก์ ํธ์ ๋ฐ๋ก ์ ์ฉํ ์ ์๋ ์ ํ ๊ธฐ์ค์ ์ป์ด๊ฐ์ธ์.

"์ด ์ฝ๋ ๋ธ๋ก๊ทธ์ AI ๊ฒ์ ๋ฌ์๋ณด๋ ค๊ณ ์. ์ด๋ ค์ด ๊ฑฐ ์๋์ฃ ?"
์ฃผ๋ง ๋ด๋ด LangChain ํํ ๋ฆฌ์ผ ๋ฐ๋ผ๊ฐ๋ค๊ฐ vector store ์ธํ
ํ๋ ๋ถ๋ถ์์ ๋ฑ ๋งํ ๊ฒฝํ, ์ฌ๋ฌ๋ถ๋ ์์ง ์์ผ์ ๊ฐ์? Pinecone ์ฐ๋ ค๊ณ ์นด๋ ๋ฑ๋กํ๋ค๊ฐ 'ํน์ ๋๋ ๋ชจ๋ฅด๊ฒ ์๊ธ ๋์ค๋ ๊ฑด ์๋๊น' ๊ฒ๋จน๊ณ ์ฐฝ์ ๋ซ์๊ฑฐ๋, Chroma ์ค์นํ๋๋ ๋ก์ปฌ์์๋ ๋์๊ฐ๋๋ฐ ๋ฐฐํฌํ๋๊น ๋ฐ์ดํฐ๊ฐ ์น ๋ ์๊ฐ๊ฑฐ๋์.
๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋น๊ต ๊ธ์ ์ธํฐ๋ท์ ๋์ณ๋์ง๋ง, ์ ์ "์์ฐ 0์ ์ฌ์ด๋ ํ๋ก์ ํฐ ๊ธฐ์ค์ผ๋ก ๋ญ ์จ์ผ ํ๋"๋ฅผ ์๋ ค์ฃผ๋ ๊ธ์ ์ฐพ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ด ๊ธ์์๋ Pinecone vs Chroma ๋น๊ต๋ฅผ ์ค์ ์ฌ์ฉ ๊ฒฝํ, ๋ฌด๋ฃ ํ๋ ํ๊ณ, RAG ์ฐ๋ ์ฝ๋๊น์ง ๋ฑ๋ฑ์ด ํํค์นฉ๋๋ค. ์ฝ๊ณ ๋๋ฉด ์ค๋ ๋ฐค ๋ฐ๋ก ๊ฒฐ์ ๋ด๋ฆด ์ ์์ ๊ฑฐ์์.
์ด ๊ธ์ ํต์ฌ: ์ฌ์ด๋ ํ๋ก์ ํธ์์ ๋ฒกํฐ DB๋ฅผ ๊ณ ๋ฅผ ๋ ๊ธฐ์ ์คํ๋ณด๋ค "๊ณต์ง๋ก ์ผ๋ง๋ ๋ฒํธ ์ ์๋"๊ฐ ํต์ฌ์ด๋ฉฐ, Chroma๋ ์์ ๋ฌด๋ฃ์ด์ง๋ง ์ด์ ์ฑ ์์ ๋ด๊ฐ ์ง๊ณ , Pinecone์ ๊ด๋ฆฌ๊ฐ ํธํ์ง๋ง ๋ฌด๋ฃ ํ๋์ ์จ๊ฒจ์ง ํจ์ ์ด ์๋ค.
์ด ๊ธ์์ ๋ค๋ฃจ๋ ๊ฒ:
- ๋ฒกํฐ DB๊ฐ ๋ญ์ง 5๋ถ ๋ง์ ์ดํดํ๊ธฐ
- Pinecone ๋ฌด๋ฃ ํ๋์ ์ง์ง ํ๊ณ (์์น ํฌํจ)
- Chroma ๋ก์ปฌ vs ๋ฐฐํฌ ํ๊ฒฝ์ ์ฐจ์ด
- RAG ํ์ดํ๋ผ์ธ ๊ตฌ์ฑ ์ ๊ฐ DB ์ฐ๋ ์ค์ ์ฝ๋
- ์ค์ ์ฌ์ด๋ ํ๋ก์ ํธ์์ ์ด๋ค ์ ํ์ ํ๋์ง ์ฌ๋ก
- ์์ฐ 0์ ๊ธฐ์ค ์ต์ข
์ถ์ฒ ๋งคํธ๋ฆญ์ค
๐ง ๋ฒกํฐ DB, ๋์ฒด ๋ญ ์ ์ฅํ๋ ๊ฑด๊ฐ์?
RAG(Retrieval-Augmented Generation, ๊ฒ์ ์ฆ๊ฐ ์์ฑ)๋ฅผ ์ฒ์ ๊ณต๋ถํ๋ค ๋ณด๋ฉด "๋ฒกํฐ DB์ ์ ์ฅํ๋ค"๋ ๋ง์ด ์๊พธ ๋์ค๋๋ฐ, ์ ํํ ๋ฌด์์ ์ด๋ป๊ฒ ์ ์ฅํ๋์ง ๋ชจํธํ๊ฒ ๋๊ปด์ง๋ ๋ถ๋ค์ด ๋ง์ต๋๋ค.
์๋ฒ ๋ฉ์ด๋ ๋ฌด์์ธ๊ฐ
ํ ์คํธ๋ฅผ ์ซ์ ๋ฐฐ์ด๋ก ๋ณํํ ๊ฒ์ด ์๋ฒ ๋ฉ(Embedding)์ ๋๋ค. ์๋ฅผ ๋ค์ด "๊ฐ์์ง"์ "๊ณ ์์ด"๋ ์๋ฏธ์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์ ์๋ฒ ๋ฉ ๊ณต๊ฐ์์ ๊ฐ๊น์ด ์์น์ ๋์ด๊ณ , "๊ฐ์์ง"์ "์ฃผ์ ํฌ์"๋ ๋ฉ๋ฆฌ ๋จ์ด์ง๋๋ค.
OpenAI์ text-embedding-3-small ๋ชจ๋ธ์ ํ
์คํธ๋ฅผ 1,536๊ฐ ์ซ์(์ฐจ์)๋ก ํํํฉ๋๋ค. "์ค๋ ์ ์ฌ ๋ญ ๋จน์ง?" ๊ฐ์ ๋ฌธ์ฅ ํ๋๊ฐ [0.021, -0.183, 0.445, ...] ์์ 1,536๊ฐ์ง๋ฆฌ ์ค์ ๋ฐฐ์ด๋ก ๋ณํ๋๋ ๊ฑฐ์ฃ .
๋ฒกํฐ DB๊ฐ ํ์ํ ์ด์
์ผ๋ฐ DB(MySQL, PostgreSQL ๋ฑ)๋ "์ ํํ ์ผ์น"ํ๋ ๊ฒ์ ์ฐพ๋ ๋ฐ ์ต์ ํ๋์ด ์์ต๋๋ค. ๋ฐ๋ฉด ๋ฒกํฐ DB๋ "๋น์ทํ" ๊ฒ์ ๋น ๋ฅด๊ฒ ์ฐพ๋ ๋ฐ ํนํ๋์ด ์์ด์. RAG์์๋ ์ฌ์ฉ์ ์ง๋ฌธ๊ณผ ์๋ฏธ์ ์ผ๋ก ์ ์ฌํ ๋ฌธ์๋ฅผ ์๋ง ๊ฐ ์ค์์ ์์ญ ๋ฐ๋ฆฌ์ด ์์ ๊บผ๋ด์ผ ํ๋๋ฐ, ์ด๊ฒ ๋ฒกํฐ DB์ ํต์ฌ ์ญํ ์ ๋๋ค.
2026๋ 4์ ๊ธฐ์ค, DB-Engines ๋ฒกํฐ DB ํธ๋ ๋์ ๋ฐ๋ฅด๋ฉด Pinecone, Chroma, Weaviate, Qdrant, Milvus๊ฐ ์ฌ์ด๋ ํ๋ก์ ํธ ๊ฐ๋ฐ์๋ค์ด ๊ฐ์ฅ ๋ง์ด ์ ํํ๋ ์์ 5๊ฐ ๋ฒกํฐ DB์ ๋๋ค.
๐ก ์ค์ ํ: ๋ฒกํฐ DB๋ฅผ ๊ณ ๋ฅด๊ธฐ ์ ์ ๋จผ์ "๋ด ํ๋ก์ ํธ์์ ๋ช ๊ฐ์ ๋ฒกํฐ๋ฅผ ์ ์ฅํ ๊ฒ์ธ๊ฐ"๋ฅผ ์ถ์ ํ์ธ์. ๋ฌธ์ 1ํ์ด์ง(์ฝ 500ํ ํฐ)๊ฐ ์ฒญํฌ 1๊ฐ๋ผ๋ฉด, PDF 100๊ฐ์ง๋ฆฌ ์ง์๋ฒ ์ด์ค๋ ๋๋ต 3,000~5,000๊ฐ ๋ฒกํฐ์ ๋๋ค. ์ด ๊ท๋ชจ๋ผ๋ฉด ์ด๋ค ๋ฌด๋ฃ ํ๋๋ ์ฌ์ ๋กญ๊ฒ ์์ฉํฉ๋๋ค.
๐ Pinecone ๋ฌด๋ฃ ํ๋์ ์ง์ง ์คํ
Pinecone์ 2019๋ ์ค๋ฆฝ๋ ํด๋ผ์ฐ๋ ์ ์ฉ ๋ฒกํฐ DB๋ก, ๊ฐ์ฅ ์ ๋ช ํ๊ณ ํํ ๋ฆฌ์ผ์ด ๋ง์ ์๋น์ค์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ฌด๋ฃ ํ๋์ ๋ช ๊ฐ์ง ์๊ณ ๋์ ๋นํฉํ๋ ์ ์ฝ์ด ์์ด์.
2026๋ 4์ ๊ธฐ์ค ๋ฌด๋ฃ(Starter) ํ๋ ์์ธ ์คํ
| ํญ๋ชฉ | ๋ฌด๋ฃ ํ๋ (Starter) | ์ ๋ฃ ํ๋ (Standard) |
|---|---|---|
| ์ธ๋ฑ์ค ์ | 1๊ฐ | ๋ฌด์ ํ |
| ์ต๋ ๋ฒกํฐ ์ | 100๋ง ๊ฐ | ์์ต ๊ฐ (์ฉ๋ ๊ณผ๊ธ) |
| ์คํ ๋ฆฌ์ง | 2GB | ์ฉ๋ ๊ณผ๊ธ |
| ๋ฆฌ์ | AWS us-east-1 ๊ณ ์ | ๋ฉํฐ ํด๋ผ์ฐ๋/๋ฆฌ์ |
| Pod ์ฌ๋ฆฝ | 7์ผ ๋ฏธ์ฌ์ฉ ์ ์๋ ๋นํ์ฑํ | ์์ |
| ๋ณต๊ตฌ ์๊ฐ | Pod ๊นจ์ฐ๊ธฐ ์ ๋ถ | ์์ |
| ๋ค์์คํ์ด์ค | ๊ธฐ๋ณธ ์ง์ | ๊ณ ๊ธ ์ง์ |
| SLA | ์์ | 99.5% ๋ณด์ฅ |
| ์ ๋น์ฉ | $0 | $70~๋ถํฐ |
๊ฐ์ฅ ์น๋ช ์ ์ธ ์ ์ฝ์ Pod ์ฌ๋ฆฝ(Sleep) ์ ์ฑ ์ ๋๋ค. 7์ผ๊ฐ ์ฟผ๋ฆฌ๊ฐ ์์ผ๋ฉด ์ธ๋ฑ์ค๊ฐ ์ ์๊ธฐ ๋ชจ๋๋ก ์ ํ๋๊ณ , ๋ค์ ๊นจ์ด๋๋ ๋ฐ ์ต์ 1~3๋ถ์ด ๊ฑธ๋ฆฝ๋๋ค. ํฌํธํด๋ฆฌ์ค ๋ฐํ ๋น์ผ ๋ฉด์ ๊ด์ด ๋ฐ๋ชจ๋ฅผ ํด๋ฆญํ๋๋ฐ ๋ก๋ฉ๋ง ๋์๊ฐ๋ ์ํฉ… ์์๋ง ํด๋ ์์ฐํ์ฃ .
Pinecone ๋ฌด๋ฃ ํ๋์ด ๊ด์ฐฎ์ ๊ฒฝ์ฐ vs ์๋ ๊ฒฝ์ฐ
๊ด์ฐฎ์ ๊ฒฝ์ฐ:
- ํผ์ ๋งค์ผ ์ฐ๋ ๊ฐ์ธ RAG ์ฑ๋ด (๊พธ์คํ ์ฟผ๋ฆฌ ๋ฐ์)
- POC/๋ฐ๋ชจ ๋จ๊ณ์์ ๋น ๋ฅด๊ฒ ๊ฒ์ฆํ๊ณ ์ถ์ ๋
- LangChain ํํ ๋ฆฌ์ผ์ ๊ทธ๋ฅ ๋ฐ๋ผํด๋ณด๊ณ ์ถ์ ๋
- ํด๋ผ์ฐ๋ ๋ฐฐํฌ ํ๊ฒฝ์์ ์ถ๊ฐ ์๋ฒ ์์ด ์ฐ๊ณ ์ถ์ ๋
์๋ ๊ฒฝ์ฐ:
- ์ธ๋ถ ์ฌ์ฉ์์๊ฒ ๊ณต๊ฐํ๋ ์๋น์ค (์ฌ๋ฆฝ ๋ฌธ์ )
- ์ธ๋ฑ์ค๋ฅผ ์ฌ๋ฌ ๊ฐ ์จ์ผ ํ๋ ๋ฉํฐํ
๋ํธ ๊ตฌ์กฐ
- ํ๊ตญ/์์์ ๋ฆฌ์ ์ด ํ์ํ ๊ฒฝ์ฐ (๋ ์ดํด์ ์ด์)
- ๋ฌด๋ฃ ํ๋๋ฅผ ๋์ ๋งํผ ์ฑ์ฅํ ๊ฐ๋ฅ์ฑ์ด ์๋ ํ๋ก์ ํธ
๐ก ์ค์ ํ: Pinecone Starter ํ๋์์ Pod ์ฌ๋ฆฝ์ ์ฐํํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ฃผ๊ธฐ์ ๋๋ฏธ ์ฟผ๋ฆฌ์ ๋๋ค. GitHub Actions๋ Cron Job์ผ๋ก 5~6์ผ๋ง๋ค ์๋ฌด ์ฟผ๋ฆฌ๋ ๋ ๋ ค๋๋ฉด ์ฌ๋ฆฝ์ ๋ฐฉ์งํ ์ ์์ด์. ๋ฌด๋ฃ ํ๋์ ์๋น์ค์ ์ธ ๊ฑฐ๋ผ๋ฉด ์ด๊ฑธ ๋ฐ๋์ ์ค์ ํด๋์ธ์.
๐ฆ Chroma: ์ง์ง ๋ฌด๋ฃ์ ์๋ฏธ
Chroma๋ ์คํ์์ค ๋ฒกํฐ DB๋ก, Apache 2.0 ๋ผ์ด์ ์ค ํ์ ์์ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฝ๋๊ฐ ๊ณต๊ฐ๋์ด ์๊ณ , ๋ก์ปฌ์์ pip install chromadb ํ ์ค๋ก ์ค์น๊ฐ ๋๋ฉ๋๋ค.
๋ก์ปฌ ๋ชจ๋ vs ์๋ฒ ๋ชจ๋
Chroma๋ ํฌ๊ฒ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ธ ์ ์์ต๋๋ค.
① ์ธ๋ฉ๋ชจ๋ฆฌ/๋ก์ปฌ ์๊ตฌ์ ์ฅ ๋ชจ๋ (๊ฐ๋ฐ ๋จ๊ณ)
import chromadb
# ์ธ๋ฉ๋ชจ๋ฆฌ (์ฌ์์ ์ ๋ฐ์ดํฐ ๋ ์๊ฐ)
client = chromadb.Client()
# ๋ก์ปฌ ๋์คํฌ ์๊ตฌ์ ์ฅ
client = chromadb.PersistentClient(path="./chroma_db")
② HTTP ์๋ฒ ๋ชจ๋ (๋ฐฐํฌ ๋จ๊ณ)
# ์๋ฒ ์คํ
chroma run --path ./chroma_db --port 8000
# ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ
client = chromadb.HttpClient(host="localhost", port=8000)
๋ก์ปฌ ๋ชจ๋๋ ์ค์ ์ด ๊ฑฐ์ ํ์ ์์ด์ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ต๊ณ ์ ๋๋ค. ๋ฌธ์ ๋ ๋ฐฐํฌ์ธ๋ฐ, Chroma ์๋ฒ๋ฅผ ์ด๋๊ฐ์ ์ฌ๋ ค์ผ ํ๋ค๋ ๊ฑฐ์์.
Chroma๋ฅผ ๋ฌด๋ฃ๋ก ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ
| ํ๋ซํผ | ๋ฐฉ๋ฒ | ๋ฌด๋ฃ ํ๋ | ๋น๊ณ |
|---|---|---|---|
| Railway | Docker ๋ฐฐํฌ | ์ $5 ํฌ๋ ๋ง (๊ฑฐ์ ๋ฌด๋ฃ) | ๊ฐ์ฅ ์ฌ์ |
| Fly.io | fly launch | 3๊ฐ ์ธ์คํด์ค ๋ฌด๋ฃ | ์ฝ๊ฐ ์ค์ ํ์ |
| Render | Docker ์๋น์ค | ๋ฌด๋ฃ ํ๋ (์ฌ๋ฆฝ ์์) | Pinecone๊ณผ ๋์ผ ๋ฌธ์ |
| ๋ก์ปฌ PC | ์ง์ ์คํ | ์์ ๋ฌด๋ฃ | ์ธํฐ๋ท ์ ์ ๋ถ๊ฐ |
| Google Colab | ngrok ํฐ๋๋ง | ๋ฌด๋ฃ | ์์ ๋ฐ๋ชจ์ฉ๋ง |
2026๋ 4์ ๊ธฐ์ค, ์ฌ์ด๋ ํ๋ก์ ํฐ๋ค ์ฌ์ด์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์กฐํฉ์ Railway + Chroma Docker ์ด๋ฏธ์ง์ ๋๋ค. Railway๋ ์ $5 ๋ฌด๋ฃ ํฌ๋ ๋ง์ ์ฃผ๋๋ฐ, ์๊ท๋ชจ Chroma ์๋ฒ๋ ์ด ์์์ ๊ฑฐ์ ๋ค ๋์๊ฐ๊ฑฐ๋ ์. ์์ ๊ณต์ง๋ ์๋์ง๋ง ์ฌ์ค์ ๋ฌด๋ฃ ์์ค์ด์์.
๐ก ์ค์ ํ: Chroma๋ฅผ Railway์ ๋ฐฐํฌํ ๋
CHROMA_SERVER_AUTH_CREDENTIALSํ๊ฒฝ ๋ณ์๋ก ๋ฐ๋์ ํ ํฐ ์ธ์ฆ์ ์ค์ ํ์ธ์. ์ธ์ฆ ์์ด ๋ฐฐํฌํ๋ฉด ๋๊ตฌ๋ ์ฌ๋ฌ๋ถ์ ๋ฒกํฐ DB์ ์ฝ๊ธฐ/์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.chromadb.HttpClient(host=..., headers={"X-Chroma-Token": "your-token"})์ผ๋ก ํด๋ผ์ด์ธํธ์์ ์ฐ๊ฒฐํ๋ฉด ๋ฉ๋๋ค.
⚡ RAG ํ์ดํ๋ผ์ธ์์ ๋ DB ์ฐ๋ ๋น๊ต
์ค์ ๋ก LangChain ๊ธฐ๋ฐ RAG๋ฅผ ๊ตฌํํ ๋ ๋ DB๊ฐ ์ผ๋ง๋ ๋ค๋ฅธ์ง ์ฝ๋๋ก ๋น๊ตํด๋ณผ๊ฒ์.
LangChain + Pinecone ์ฐ๋ (10์ค)
from langchain_pinecone import PineconeVectorStore
from langchain_openai import OpenAIEmbeddings
from pinecone import Pinecone
pc = Pinecone(api_key="YOUR_API_KEY")
index = pc.Index("my-index")
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = PineconeVectorStore(index=index, embedding=embeddings)
# ๋ฌธ์ ์ถ๊ฐ
vectorstore.add_documents(docs)
# ์ ์ฌ๋ ๊ฒ์
results = vectorstore.similarity_search("์ฌ์ฉ์ ์ง๋ฌธ", k=3)
LangChain + Chroma ์ฐ๋ (7์ค)
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma(
collection_name="my-collection",
embedding_function=embeddings,
persist_directory="./chroma_db" # ๋ก์ปฌ ์๊ตฌ์ ์ฅ
)
# ๋ฌธ์ ์ถ๊ฐ & ๊ฒ์ — ๋์ผ
vectorstore.add_documents(docs)
results = vectorstore.similarity_search("์ฌ์ฉ์ ์ง๋ฌธ", k=3)
์ฝ๋ ์ฐจ์ด๋ ๊ฑฐ์ ์์ต๋๋ค. Chroma๊ฐ API ํค ์ค์ ์ด ์์ด์ ๋ก์ปฌ ๊ฐ๋ฐ ์์์ด 1~2๋ถ ๋ ๋น ๋ฅผ ๋ฟ์ด์์.
์์ ๋ฌด๋ฃ ์๋ฒ ๋ฉ์ ์ฐ๋ ๋ฐฉ๋ฒ (OpenAI ์์ด)
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_chroma import Chroma
# ์์ ๋ฌด๋ฃ ์คํ์์ค ์๋ฒ ๋ฉ ๋ชจ๋ธ
embeddings = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-MiniLM-L6-v2"
)
vectorstore = Chroma(
collection_name="free-rag",
embedding_function=embeddings,
persist_directory="./chroma_db"
)
sentence-transformers/all-MiniLM-L6-v2๋ 384์ฐจ์ ์๋ฒ ๋ฉ์ ์์ฑํ๋ฉฐ, CPU์์๋ ๋ฌธ์ 1,000๊ฐ ๊ธฐ์ค 30์ด ์ด๋ด์ ์๋ฒ ๋ฉ์ด ์๋ฃ๋ฉ๋๋ค. OpenAI API ๋น์ฉ ์์ด ์์ ๋ก์ปฌ๋ก RAG๋ฅผ ๊ตฌํํ ์ ์๋ ์ต๊ณ ์ ์กฐํฉ์ด์์.
๐ก ์ค์ ํ: HuggingFace ์๋ฒ ๋ฉ ๋ชจ๋ธ์ ์ฒ์ ์คํ ์ ๋ชจ๋ธ ํ์ผ์ ๋ค์ด๋ก๋ํฉ๋๋ค(MiniLM ๊ธฐ์ค ์ฝ 90MB). ๋ฐฐํฌ ํ๊ฒฝ์์๋ Docker ๋น๋ ์ ๋ฏธ๋ฆฌ ์บ์ํ๊ฑฐ๋,
SENTENCE_TRANSFORMERS_HOMEํ๊ฒฝ ๋ณ์๋ก ์บ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํด ๋งค ์ฌ์์๋ง๋ค ๋ค์ด๋ก๋ํ์ง ์๋๋ก ์ค์ ํ์ธ์.
๐ข ์ค์ ์ฌ๋ก: ์ฌ์ด๋ ํ๋ก์ ํฐ๋ค์ ์ ํ
์ถ์์ ์ธ ๋น๊ต๋ณด๋ค ์ค์ ๋ก ์ด๋ค ์ฌ๋๋ค์ด ์ด๋ค ์ ํ์ ํ๋์ง ๋ณด๋ ๊ฒ ๋ ์๋ฟ์ฃ .
์ฌ๋ก 1: ํ ์ค ์ถ์ ๊ฐ๋ฐ์์ PDF ์ฑ๋ด (Chroma ์ ํ)
2025๋
ํ๋ฐ๊ธฐ, ์ ํ ์ค ๊ฐ๋ฐ์ ์ด์ฌํ ์จ(GitHub ๋๋ค์ jhlee-dev)๋ ๊ฐ์ธ ๋
์ ๋
ธํธ 400์ฌ ๊ฐ PDF๋ฅผ ๋ํํ์ผ๋ก ๊ฒ์ํ๋ ์์คํ
์ ๋ง๋ค์์ต๋๋ค. ๋ก์ปฌ Mac์์ Chroma + all-MiniLM-L6-v2 + Ollama(llama3.2) ์กฐํฉ์ผ๋ก ์์ ๋ฌด๋ฃ, ์์ ์คํ๋ผ์ธ RAG๋ฅผ ๊ตฌํํ์ด์.
์ฒ๋ฆฌํ ๋ฌธ์ ์: PDF 423๊ฐ, ์ฒญํฌ ์ฝ 12,000๊ฐ. ๋ก์ปฌ ๋์คํฌ ์ฌ์ฉ๋: 280MB. ํ๊ท ๊ฒ์ ์๋: ์ฟผ๋ฆฌ๋น 150ms ์ดํ. ๊ทธ๋ "Pinecone ๊ณ์ ๋ง๋ค๊ณ API ํค ์ค์ ํ๋ ์๊ฐ์ Chroma๋ฅผ ์ด๋ฏธ ์ฐ๊ณ ์์๋ค"๊ณ ํ๊ธฐ๋ฅผ ๋จ๊ฒผ์ต๋๋ค.
์ฌ๋ก 2: ํด์ธ ๋ ๋ฆฝ ๊ฐ๋ฐ์์ SaaS ๋ฐ๋ชจ (Pinecone ์ ํ)
์ธ๋ ์ถ์ ๋ ๋ฆฝ ๊ฐ๋ฐ์ Arjun Sharma๋ 2025๋ ๋ง ์คํํธ์ ๊ณ ๊ฐ์ฌ๋ฅผ ์ํ ์ง์๋ฒ ์ด์ค ์ฑ๋ด ๋ฐ๋ชจ๋ฅผ Pinecone ๋ฌด๋ฃ ํ๋์ผ๋ก ๊ตฌ์ถํ์ต๋๋ค. ๊ณ ๊ฐ์ฌ ๋ฌธ์ 2,000๊ฐ(์ฝ 15๋ง ๋ฒกํฐ)๋ฅผ Pinecone์ ์ฌ๋ฆฌ๊ณ , Next.js ํ๋ก ํธ์๋ + Vercel ๋ฐฐํฌ ๊ตฌ์กฐ๋ก ํด๋ผ์ฐ๋ ์ด๋์๋ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์์ด์.
๊ทธ๊ฐ Pinecone์ ์ ํํ ์ด์ ๋ ๋จ ํ๋: "ํ์๋ค๊ณผ ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด". ํด๋ผ์ฐ๋ DB๋ผ ํ์ ๋ชจ๋๊ฐ API ํค ํ๋๋ก ๊ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์๊ณ , ์๋ฒ ์ค์ ์์ด ๋ฐ๋ก ์์ํ ์ ์์์ต๋๋ค. ๋ค๋ง ๊ณ ๊ฐ ๋ฐ๋ชจ ์ ๋ Pod ์ฌ๋ฆฝ ๋ฌธ์ ๋ฅผ ๊ฒฝํํ๊ณ ๋์ ์ดํ Cron Job์ผ๋ก wake-up ์ฟผ๋ฆฌ๋ฅผ ์์ฝํ๋ค๊ณ ํฉ๋๋ค.
์ฌ๋ก 3: AI ์คํํธ์ ์ Chroma → Pinecone ๋ง์ด๊ทธ๋ ์ด์
๊ตญ๋ด AI ์คํํธ์ Wrtn Technologies์ ์ ์ฌํ ์ฑ๊ฒฉ์ ํ์์ ์ด๊ธฐ์ Chroma ๋ก์ปฌ๋ก ๊ฐ๋ฐ ํ, ์ฌ์ฉ์ ์๊ฐ ์ 1๋ง ๋ช ์ ๋์ด์์ Pinecone Standard๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ต๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ๋น์ฉ๋ณด๋ค ์๋ฒ ๊ด๋ฆฌ ์ธ๋ ฅ ๋น์ฉ์ด ๋ ํฌ๋ค๋ ํ๋จ์ด์์ด์.
์ด ์ฌ๋ก๊ฐ ์ฃผ๋ ๊ตํ: ์ด๊ธฐ์ Chroma๋ก ์์ํด์ ๊ฒ์ฆํ๊ณ , ์ฌ์ฉ์๊ฐ ์๊ธฐ๋ฉด Pinecone์ผ๋ก ์ฎ๊ธฐ๋ ์ ๋ต์ด ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ ๋๋ค.
⚠️ ์ฌ์ด๋ ํ๋ก์ ํฐ๊ฐ ๋น ์ง๊ธฐ ์ฌ์ด ํจ์ 5๊ฐ์ง
ํจ์ 1: ์ธ๋ฑ์ค ์ฐจ์ ์ ๋ถ์ผ์น
Pinecone ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๋ ์ง์ ํ ์ฐจ์ ์์ ์ค์ ์๋ฒ ๋ฉ ๋ชจ๋ธ์ ์ถ๋ ฅ ์ฐจ์์ด ๋ค๋ฅด๋ฉด ์ค๋ฅ๊ฐ ๋ฉ๋๋ค. text-embedding-3-small์ 1,536์ฐจ์, all-MiniLM-L6-v2๋ 384์ฐจ์, text-embedding-ada-002๋ 1,536์ฐจ์. ์ธ๋ฑ์ค๋ฅผ ํ ๋ฒ ๋ง๋ค๋ฉด ์ฐจ์์ ๋ฐ๊ฟ ์ ์์ด์ ์ญ์ ํ ์ฌ์์ฑํด์ผ ํฉ๋๋ค.
ํจ์ 2: Chroma ๋ก์ปฌ ๋ฐ์ดํฐ ๋ฐฐํฌ ํ๊ฒฝ์์ ์ฆ๋ฐ
๋ก์ปฌ PersistentClient๋ก ์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ Docker ์ปจํ
์ด๋์ ์ฌ๋ฆฌ๋ฉด, ์ปจํ
์ด๋ ์ฌ์์ ์ ๋ฐ์ดํฐ๊ฐ ๋ ์๊ฐ๋๋ค. Volume ๋ง์ดํธ๋ฅผ ๋ฐ๋์ ์ค์ ํด์ผ ํด์. -v ./chroma_db:/chroma/chroma ์ต์
์์ด ๋ฐฐํฌํ๋ฉด ์
๋ก๋ํ ๋ฌธ์๊ฐ ์ฌ๋ฐฐํฌ ๋๋ง๋ค ์ฌ๋ผ์ง๋๋ค.
ํจ์ 3: ์ฒญํฌ ์ฌ์ด์ฆ๋ฅผ ๋๋ฌด ํฌ๊ฒ ์ก๊ธฐ
์ฒญํฌ ์ฌ์ด์ฆ(chunk_size)๋ฅผ 2,000์๋ก ์ก์ผ๋ฉด LLM ์ปจํ ์คํธ์ ๋ง์ ์ ๋ณด๋ฅผ ๋ฃ์ ์ ์์ง๋ง, ๊ฒ์ ์ ํ๋๊ฐ ๋จ์ด์ง๋๋ค. ๋ฐ๋๋ก 100์๋ก ์ก์ผ๋ฉด ๋ฒกํฐ ์๊ฐ ํญ๋ฐ์ ์ผ๋ก ๋์ด๋ ๋ฌด๋ฃ ํ๋๋ฅผ ๋น ๋ฅด๊ฒ ์์งํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก 500~800์, overlap 80~100์๊ฐ ์ฌ์ด๋ ํ๋ก์ ํธ์ ๋ฌด๋ํ ์์์ ์ ๋๋ค.
ํจ์ 4: ์๋ฒ ๋ฉ ๋น์ฉ ๋ฏธ๋ฆฌ ๊ณ์ฐ ์ ํ๊ธฐ
OpenAI text-embedding-3-small ๊ธฐ์ค, PDF 100ํ์ด์ง(์ฝ 5๋ง ํ ํฐ) ์๋ฒ ๋ฉ ๋น์ฉ์ ์ฝ $0.001(1์ ๋ฏธ๋ง)์
๋๋ค. ๊ฑฐ์ ๋ฌด๋ฃ ์์ค์ด์ง๋ง, ๋ฌธ์๊ฐ ์๋ฐฑ๋ง ํ ํฐ ๊ท๋ชจ๊ฐ ๋๋ฉด ์๊ธฐ๊ฐ ๋ฌ๋ผ์ ธ์. ์๋ฒ ๋ฉ์ ๋ฌธ์ ์ถ๊ฐ ์์๋ง ๋ฐ์ํ๊ณ ๊ฒ์ ์์ ์ฟผ๋ฆฌ ํ
์คํธ๋ง ์๋ฒ ๋ฉํ๋ฏ๋ก, ์ด๊ธฐ ์ธ๋ฑ์ฑ ๋น์ฉ๋ง ์ฃผ์ํ๋ฉด ๋ฉ๋๋ค.
ํจ์ 5: ๋ฒกํฐ DB๋ง์ผ๋ก RAG ํ์ง์ด ๊ฒฐ์ ๋๋ค๋ ์ฐฉ๊ฐ
๋ง์ ๋ถ๋ค์ด "์ด๋ค ๋ฒกํฐ DB๊ฐ ๋ ๊ฒ์์ ์ํ๋"๋ฅผ ๊ณ ๋ฏผํ๋๋ฐ, ์ฌ์ค RAG ํ์ง์ 80%๋ ์ฒญํฌ ์ ๋ต, ์๋ฒ ๋ฉ ๋ชจ๋ธ, ํ๋กฌํํธ ์ค๊ณ์์ ๊ฒฐ์ ๋ฉ๋๋ค. Pinecone๊ณผ Chroma ๋ ๋ค HNSW ๊ธฐ๋ฐ ANN ๊ฒ์์ ์ฌ์ฉํ๋ฉฐ, ์์ญ๋ง ๋ฒกํฐ ์ดํ์์๋ ๊ฒ์ ํ์ง ์ฐจ์ด๊ฐ ๊ฑฐ์ ์์ด์. DB ์ ํ๋ณด๋ค ์ฒญํฌ ๋ถํ ๋ฐฉ์์ ๋ ๋ง์ ์๊ฐ์ ์ฐ์ธ์.
๐ ์ต์ข ๋น๊ต: ์์ฐ 0์ ๊ธฐ์ค ์ ํ ๊ฐ์ด๋
ํต์ฌ ์์ฝ ํ ์ด๋ธ
| ํญ๋ชฉ | Pinecone (๋ฌด๋ฃ) | Chroma (์คํ์์ค) | ์น์ |
|---|---|---|---|
| ์ง์ง ๋น์ฉ | $0 (์นด๋ ํ์) | $0 (์๋ฒ ๋น์ฉ ๋ณ๋) | ๐ก ๋ฌด์น๋ถ |
| ์ค์น ๋์ด๋ | ํ์๊ฐ์ + API ํค | pip install 1์ค | ๐ข Chroma |
| ๋ก์ปฌ ๊ฐ๋ฐ ํธ์์ฑ | ๋คํธ์ํฌ ํ์ | ์คํ๋ผ์ธ ๊ฐ๋ฅ | ๐ข Chroma |
| ํด๋ผ์ฐ๋ ๋ฐฐํฌ ํธ์์ฑ | ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅ | ์๋ฒ ์ค์ ํ์ | ๐ข Pinecone |
| ๋ฌด๋ฃ ๋ฒกํฐ ํ๋ | 100๋ง ๊ฐ | ๋ฌด์ ํ (๋์คํฌ ํ) | ๐ข Chroma |
| ํ ํ์ | API ํค ๊ณต์ ๋ก ์ฆ์ | ๋ณ๋ ์๋ฒ ํ์ | ๐ข Pinecone |
| ๋ฐ์ดํฐ ์๊ตฌ์ฑ | ํด๋ผ์ฐ๋ ๋ณด์ฅ | ์ง์ ๊ด๋ฆฌ | ๐ข Pinecone |
| Pod ์ฌ๋ฆฝ ๋ฌธ์ | 7์ผ ๋ฏธ์ฌ์ฉ ์ ๋ฐ์ | ์์ | ๐ข Chroma |
| LangChain ์ฐ๋ | ๊ณต์ ํจํค์ง ์ง์ | ๊ณต์ ํจํค์ง ์ง์ | ๐ก ๋ฌด์น๋ถ |
| ํ๊ตญ ๋ฆฌ์ | ๋ฌด๋ฃ ํ๋ ๋ถ๊ฐ | ์ง์ ์ ํ ๊ฐ๋ฅ | ๐ข Chroma |
| ๋ฌธ์/ํํ ๋ฆฌ์ผ ์ | ๋งค์ฐ ํ๋ถ | ํ๋ถ | ๐ข Pinecone |
| ํ์ฅ์ฑ | ์ ๋ฃ ์ ํ์ผ๋ก ์ฆ์ | ๋ง์ด๊ทธ๋ ์ด์ ํ์ | ๐ข Pinecone |
์ํฉ๋ณ ์ต์ข ์ถ์ฒ
์ฌ์ด๋ ํ๋ก์ ํธ ์ํฉ → ์ถ์ฒ DB
ํผ์ ์ฐ๋ ๊ฐ์ธ ๋๊ตฌ (์ธ๋ถ ๊ณต๊ฐ ์์) → ✅ Chroma ๋ก์ปฌ
ํ์๊ณผ ๊ณต์ ํ๋ ๋ฐ๋ชจ/POC → ✅ Pinecone ๋ฌด๋ฃ
์ธ๋ถ ๊ณต๊ฐ ์๋น์ค (์๊ท๋ชจ) → ✅ Chroma + Railway
๋น ๋ฅด๊ฒ ํ๋กํ ํ์
ํ ๊ฒ์ฆ → ✅ Pinecone ๋ฌด๋ฃ
์์ ์คํ๋ผ์ธ ํ๊ฒฝ → ✅ Chroma ๋ก์ปฌ
๋์ค์ ์ค์ผ์ผ์
๊ณํ ์์ → ✅ Pinecone (์ ๋ฃ ์ ํ ์ฌ์)
์์ฐ ์ง์ง 0์, ์๋ฒ๋ ์์ → ✅ Chroma ๋ก์ปฌ (๊ฐ๋ฐ๋ง)
๐ก ์ต์ข ์ค์ ํ: ์ฒ์ ์์ํ๋ ๋ถ์ด๋ผ๋ฉด Chroma ๋ก์ปฌ๋ก RAG ๋ก์ง์ ๋จผ์ ์์ฑํ์ธ์. ์ฝ๋๊ฐ ์๋ํ๋ ๊ฑธ ํ์ธํ ํ, Pinecone์ผ๋ก ์ฎ๊ธฐ๋ ๋ฐ๋ 30๋ถ๋ ์ ๊ฑธ๋ฆฝ๋๋ค. ์ด๋ค DB๋ฅผ ์ฐ๋
vectorstore์ถ์ํ ๋ ์ด์ด ๋๋ถ์ ์ฝ๋ ๋ณ๊ฒฝ์ด ์ต์ํ๋ฉ๋๋ค.
❓ ์์ฃผ ๋ฌป๋ ์ง๋ฌธ
Q1: Pinecone ๋ฌด๋ฃ ํ๋์ผ๋ก ์ฌ์ด๋ ํ๋ก์ ํธ ์ด์ ๊ฐ๋ฅํ๊ฐ์?
2026๋ 4์ ๊ธฐ์ค Pinecone์ ๋ฌด๋ฃ(Starter) ํ๋์ ์ธ๋ฑ์ค 1๊ฐ, ์ต๋ 100๋ง ๋ฒกํฐ, 2GB ์คํ ๋ฆฌ์ง๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๊ท๋ชจ RAG ์ฑ๋ด์ด๋ ์๋ฏธ ๊ฒ์ ๋ฐ๋ชจ ์์ค์ด๋ผ๋ฉด ์ถฉ๋ถํ ์ด์ ๊ฐ๋ฅํด์. ๋จ, ๋ฌด๋ฃ ํ๋์์๋ ์ธ๋ฑ์ค๊ฐ 7์ผ๊ฐ ์ฟผ๋ฆฌ๊ฐ ์์ผ๋ฉด ์๋์ผ๋ก ๋นํ์ฑํ(Pod sleep)๋๊ณ , ๋ณต๊ตฌ์ ์ ๋ถ์ด ๊ฑธ๋ฆด ์ ์์ด ์ค์ฌ์ฉ์๊ฐ ์๋ ์๋น์ค์ ์ฒด๊ฐ ์ง์ฐ์ด ์๊น๋๋ค. ๋ํ ์ง์ญ(Region)์ AWS us-east-1๋ก๋ง ๊ณ ์ ํด์ผ ํ๋ฉฐ, ํ๊ตญ์์ ์ ์ ์ ๋ ์ดํด์๊ฐ ์ฝ 150~200ms ์ถ๊ฐ๋ฉ๋๋ค. ๊ฐ๋ณ๊ฒ POC(๊ฐ๋ ๊ฒ์ฆ)๋ ํฌํธํด๋ฆฌ์ค์ฉ์ด๋ผ๋ฉด Pinecone ๋ฌด๋ฃ ํ๋์ผ๋ก ์ถฉ๋ถํ์ง๋ง, ์ง์์ ์ผ๋ก ํธ๋ํฝ์ด ๋ฐ์ํ๊ฑฐ๋ ์ธ๋ฑ์ค๋ฅผ ํญ์ ๊นจ์ด ์์ด์ผ ํ๋ค๋ฉด Chroma ๋ก์ปฌ ๋๋ ์ ๋ฃ ์ ํ์ ๊ฒํ ํ์ธ์.
Q2: Chroma๋ ์์ ํ ๋ฌด๋ฃ์ธ๊ฐ์? ์จ๊ฒจ์ง ๋น์ฉ์ด ์๋์?
Chroma ์คํ์์ค ๋ฒ์ ์ ์์ ๋ฌด๋ฃ์ ๋๋ค. Apache 2.0 ๋ผ์ด์ ์ค๋ก ์ ๊ณต๋๋ฉฐ, ๋ก์ปฌ ํ์ผ ์์คํ ์ด๋ ์ง์ ์ด์ํ๋ ์๋ฒ์ ์ค์นํด ์ฌ์ฉํ๋ ํ ๋น์ฉ์ด ์ ํ ๋ฐ์ํ์ง ์์์. ๋จ, "๋ฌด๋ฃ"์๋ ์๋ฒ ์ด์ ๋น์ฉ์ด ํฌํจ๋์ง ์๋๋ค๋ ์ ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค. AWS EC2, GCP Compute Engine ๋ฑ ํด๋ผ์ฐ๋ ์ธ์คํด์ค์ ์ฌ๋ฆฌ๋ฉด ์ธ์คํด์ค ๋น์ฉ์ด ๋ฐ์ํ์ฃ . Chroma Cloud(๊ด๋ฆฌํ ์๋น์ค)๋ ๋ณ๋ ์ ๋ฃ ํ๋์ผ๋ก 2025๋ ๋ง๋ถํฐ GA(์ ์ ์ถ์)๋ ์ํ์ด๋ฉฐ, ๋ฌด๋ฃ ํฐ์ด๋ ์ ํ์ ์ ๋๋ค. ๋ํ Chroma๋ฅผ ์ง์ ์ด์ํ๋ฉด ๋ฐฑ์ , ๋ชจ๋ํฐ๋ง, ์ฅ์ ๋์์ ๋ชจ๋ ์ง์ ํด์ผ ํ๋ฏ๋ก '์จ๊ฒจ์ง ์ด์ ๋น์ฉ(์๊ฐ)'์ด ์กด์ฌํฉ๋๋ค. ์์ฐ 0์์ด์ง๋ง ์๊ฐ ์ฌ์ ๊ฐ ์๋ ๊ฐ์ธ ๊ฐ๋ฐ์๋ผ๋ฉด Chroma๊ฐ ์ต์ ์ ์ ํ์ ๋๋ค.
Q3: RAG ๊ตฌํํ ๋ ๋ฒกํฐ DB ๋ง๊ณ ๊ทธ๋ฅ pgvector ์ฐ๋ฉด ์ ๋๋์?
pgvector๋ PostgreSQL ํ์ฅ์ผ๋ก, ์ด๋ฏธ Postgres๋ฅผ ์ฐ๊ณ ์๋ค๋ฉด ๋งค์ฐ ํ๋ฅญํ ์ ํ์ ๋๋ค. Supabase ๋ฌด๋ฃ ํ๋(500MB DB)์์ pgvector๋ฅผ ๊ธฐ๋ณธ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์์ฐ 0์์ผ๋ก๋ ์ด์ ๊ฐ๋ฅํ๊ณ , SQL๊ณผ ๋ฒกํฐ ๊ฒ์์ ๋์์ ์ธ ์ ์์ด ๊ธฐ์กด ๊ด๊ณํ ๋ฐ์ดํฐ์ ํตํฉ์ด ํธ๋ฆฌํด์. ๋ค๋ง ์์ญ๋ง ๊ฑด ์ด์์ ๋ฒกํฐ๋ฅผ ๋ค๋ฃจ๊ฑฐ๋ ๊ทผ์ฌ ์ต๊ทผ์ ์ด์(ANN) ๊ฒ์ ์๋๊ฐ ์ค์ํด์ง๋ฉด HNSW ์ธ๋ฑ์ค ํ๋์ด ํ์ํ๊ณ , ์ ์ฉ ๋ฒกํฐ DB์ ๋นํด ๋๊ท๋ชจ์์ ์ฑ๋ฅ ํ๊ณ๊ฐ ๋ํ๋ฉ๋๋ค. ๋ฌธ์ ์๊ฐ ์๋ง ๊ฑด ์ดํ๊ณ PostgreSQL ๊ธฐ๋ฐ ์คํ์ด๋ผ๋ฉด pgvector๊ฐ Pinecone·Chroma๋ณด๋ค ์คํ๋ ค ๋ ์ค์ฉ์ ์ธ ์ ํ์ผ ์ ์์ต๋๋ค.
Q4: Pinecone์ด๋ Chroma ์ค์ LangChain ์ฐ๋์ด ๋ ์ฌ์ด ๊ฑด ์ด๋ ์ชฝ์ธ๊ฐ์?
์์งํ ๋ ๋ค ์ฐ๋ ๋์ด๋๋ ๋น์ทํ๊ฒ ์ฝ์ต๋๋ค. LangChain ๊ธฐ์ค์ผ๋ก Pinecone์ langchain-pinecone ํจํค์ง, Chroma๋ langchain-chroma ํจํค์ง๊ฐ ๊ณต์ ์ ๊ณต๋๋ฉฐ, ๊ฐ๊ฐ 10~20์ค ์์ค์ ์ฝ๋๋ก ๋ฒกํฐ ์คํ ์ด๋ฅผ ์ด๊ธฐํํ๊ณ retriever๋ก ์ฐ๊ฒฐํ ์ ์์ด์. ์ฐจ์ด๋ผ๋ฉด Chroma๋ ๋ก์ปฌ์์ ์ถ๊ฐ ์ค์ ์์ด ๋ฐ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ API ํค ๋ฐ๊ธ์ด๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ ์์ด ํ
์คํธํ ์ ์๋ค๋ ์ ์
๋๋ค. Pinecone์ API ํค์ ํ๊ฒฝ ๋ณ์ ์ค์ ์ด ํ์ํ์ง๋ง, ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ์ด๋ผ ์๋ฒ ์์ด๋ ์ด๋์๋ ๋์ผํ ์ธ๋ฑ์ค์ ์ ๊ทผ ๊ฐ๋ฅํด ํ ํ์
์ด๋ ๋ฐฐํฌ ํ๊ฒฝ์์ ํธ๋ฆฌํฉ๋๋ค. LangChain ๊ณต์ ๋ฌธ์์์ ๋ ๋ฐฉ๋ฒ ๋ชจ๋ ์์ธํ ์์ ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Q5: ๋ฒกํฐ DB์ ์ ์ฅํ๋ ์๋ฒ ๋ฉ ๋ชจ๋ธ์ ๋ญ ์จ์ผ ๋ฌด๋ฃ๋ก RAG๋ฅผ ๋ง๋ค ์ ์๋์?
์์ฐ 0์ ๊ธฐ์ค์ผ๋ก ์๋ฒ ๋ฉ ๋ชจ๋ธ์ ์ธ ๊ฐ์ง ์ ํ์ง๊ฐ ์์ต๋๋ค. ① OpenAI text-embedding-3-small์ 1,000ํ ํฐ๋น $0.00002๋ก ์ฌ์ค์ ์ด์ ๊ฐ์ง๋ง API ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค. ② Hugging Face์ sentence-transformers/all-MiniLM-L6-v2๋ ์์ ๋ฌด๋ฃ ์คํ์์ค ๋ชจ๋ธ๋ก, CPU์์๋ ๋น ๋ฅด๊ฒ ๋์๊ฐ๋ฉฐ ๋ก์ปฌ ์คํ ๊ฐ๋ฅํฉ๋๋ค. ③ Google์ text-embedding-004๋ Gemini API ๋ฌด๋ฃ ํฐ์ด(๋ถ๋น 1,500 ์์ฒญ, ํ๋ฃจ 100๋ง ํ ํฐ)๋ก ์ฌ์ฉ ๊ฐ๋ฅํด ์ฌ์ด๋ ํ๋ก์ ํธ์ ์ถฉ๋ถํฉ๋๋ค. Chroma + sentence-transformers + Gemini API ์กฐํฉ์ด๋ฉด ์ง์ง ์์ฐ 0์ RAG ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์๋ฒ ๋ฉ ์ฐจ์ ์๋ Pinecone ์ธ๋ฑ์ค ์์ฑ ์ ๋ฐ๋์ ๋ง์ถฐ์ผ ํ๋ฏ๋ก, ๋ชจ๋ธ ์ ํ ์ ์ ์ฐจ์ ์(MiniLM์ 384์ฐจ์, text-embedding-3-small์ 1,536์ฐจ์)๋ฅผ ๋จผ์ ํ์ธํ์ธ์.
๐ฏ ๋ง๋ฌด๋ฆฌ: ์ง๊ธ ๋น์ฅ ์์ํ๋ ๋ฐฉ๋ฒ
๊ธด ๊ธ์ ์ฝ์ผ์ จ์ผ๋ ๊ฒฐ๋ก ๋ง ๋ฑ ์ ๋ฆฌํด๋๋ฆด๊ฒ์.
์์ฐ 0์, ์ง๊ธ ๋น์ฅ RAG ๋ง๋ค๊ณ ์ถ๋ค๋ฉด:
1. pip install chromadb sentence-transformers langchain-chroma ์คํ
2. PersistentClient๋ก ๋ก์ปฌ Chroma ์์
3. all-MiniLM-L6-v2๋ก ์๋ฒ ๋ฉ
4. ์๋ ํ์ธ ํ → ํ์ํ๋ฉด Pinecone ๋ฌด๋ฃ ํ๋์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋น๊ต์์ ์ง์ง ์ค์ํ ๊ฑด ๊ธฐ์ ์คํ์ด ์๋๋๋ค. "์ง๊ธ ๋ด ์ํฉ์์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์์ํด์ ๊ฐ์ฅ ์ค๋ ๋ฌด๋ฃ๋ก ์ธ ์ ์๋ ๊ฒ"์ด ์ต๊ณ ์ ์ ํ์ด์์.
Chroma๋ ๋น์ฅ ๋ ธํธ๋ถ์์ ๋๋ฆด ์ ์๊ณ , Pinecone์ ๋ฐฐํฌ ์๋ฒ ์์ด ํด๋ผ์ฐ๋์์ ์ธ ์ ์์ต๋๋ค. ๋ ๋ค ํ๋ฆฐ ์ ํ์ด ์๋์์. ์ค์ํ ๊ฑด ๊ณ ๋ฏผ๋ง ํ๋ค๊ฐ ์์ ๋ชป ํ๋ ๊ฒ์ ํผํ๋ ๊ฒ๋๋ค.
์ฌ๋ฌ๋ถ์ด ์ง๊ธ ๋ง๋ค๊ณ ์๋ ์ฌ์ด๋ ํ๋ก์ ํธ๋ ์ด๋ค ๊ฑด๊ฐ์? ๋๊ธ๋ก ํ๋ก์ ํธ ์ฃผ์ ์ ํจ๊ป "Pinecone/Chroma ์ค ์ด๋ค ๊ฑธ ์ ํํ๋์ง, ๊ทธ ์ด์ ๊ฐ ๋ญ์ง" ๋จ๊ฒจ์ฃผ์๋ฉด ์ ๊ฐ ์ง์ ์๊ฒฌ ๋๋ฆด๊ฒ์. ๋ค์ ๊ธ์์๋ Weaviate vs Qdrant — ๋ ์ฑ๋ฅ์ด ํ์ํด์ก์ ๋์ ๋ฒกํฐ DB ์ ๊ทธ๋ ์ด๋ ๊ฐ์ด๋๋ฅผ ๋ค๋ฃฐ ์์ ์ ๋๋ค. ๐
2026๋ 4์ 2์ผ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์์ต๋๋ค. Pinecone, Chroma์ ํ๋ ์ ์ฑ ์ ๋ณ๊ฒฝ๋ ์ ์์ผ๋ ์ต์ ๊ณต์ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
๋๊ธ
๋๊ธ ์ฐ๊ธฐ