Sonamu์ ๋ฒกํฐ ๊ฒ์์ด ํ์ํ ์ด์
Sonamu๋ก ์น ์ฑ์ ๋ง๋ค๋ค ๋ณด๋ฉด ์ด๋ฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ฒ ๋ฉ๋๋ค:- ์ง์ ๋ฒ ์ด์ค: โ๋น์ทํ ๋ฌธ์ ์ฐพ๊ธฐโ
- ์ปค๋จธ์ค: โ์ด ์ํ๊ณผ ์ ์ฌํ ์ ํโ
- ์ฝํ ์ธ : โ๊ด๋ จ ๊ธ ์ถ์ฒโ
- ๊ณ ๊ฐ ์ง์: โ๋น์ทํ ์ง๋ฌธ ์ฐพ๊ธฐโ
LIKE '%keyword%')์ ํ๊ณ๊ฐ ์์ต๋๋ค:
- โ โTypeScript ํ๋ ์์ํฌโ ๊ฒ์ ์ โNode.js API ๋ผ์ด๋ธ๋ฌ๋ฆฌโ ๋ชป ์ฐพ์
- โ ์คํ์ ์ทจ์ฝ (โํ์ ์คํฌ๋ฆฝํธโ vs โํ์ ์คํฌ๋ฆฝํธโ)
- โ ๋์์ด ์ฒ๋ฆฌ ์ ๋จ (โํ๋ ์์ํฌโ vs โ๋ผ์ด๋ธ๋ฌ๋ฆฌโ)
์ pgvector์ธ๊ฐ?
๋ฒกํฐ ๊ฒ์์ ๊ตฌํํ๋ ค๋ฉด ๋ฒกํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ์ํฉ๋๋ค.์ ํ์ง
| ๋ฐฉ์ | ์ฅ์ | ๋จ์ | Sonamu ์ถ์ฒ |
|---|---|---|---|
| pgvector | PostgreSQL ๊ทธ๋๋ก ์ฌ์ฉ, ์ถ๊ฐ ์ธํ๋ผ ๋ถํ์, ๊ธฐ์กด ๋ฐ์ดํฐ์ JOIN ๊ฐ๋ฅ | ์ ๋ฌธ ๋ฒกํฐ DB๋ณด๋ค ์ฑ๋ฅ ๋ฎ์ | โญโญโญโญโญ |
| Pinecone | ๋ฒกํฐ ๊ฒ์ ์ต์ ํ, ๊ด๋ฆฌํ ์๋น์ค | ์ถ๊ฐ ๋น์ฉ, ๋ณ๋ ๋๊ธฐํ ํ์ | โญโญ |
| Elasticsearch | ๊ฐ๋ ฅํ ๊ฒ์ ๊ธฐ๋ฅ | ๋ฌด๊ฑฐ์, ์ค์ ๋ณต์ก | โญโญโญ |
| Weaviate/Milvus | ์ ๋ฌธ ๋ฒกํฐ DB | ๋ณ๋ ์ธํ๋ผ, ํ์ต ๊ณก์ | โญโญ |
Sonamu ํ๋ก์ ํธ์์ pgvector๋ฅผ ์ถ์ฒํ๋ ์ด์
1. ์ด๋ฏธ PostgreSQL์ ์ฐ๊ณ ์์ต๋๋ค- Pinecone: ๋ณ๋ API, ๋น์ฉ, ๋๊ธฐํ
- pgvector: ํ์ฅ๋ง ์ค์น, ์ถ๊ฐ ๋น์ฉ ์์
pgvector๋?
pgvector๋ PostgreSQL์์ ๋ฒกํฐ(์๋ฒ ๋ฉ) ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ ์ ์๊ฒ ํด์ฃผ๋ ํ์ฅ์ ๋๋ค. ์ฃผ์ ๊ธฐ๋ฅ:vector(N)๋ฐ์ดํฐ ํ์ (N์ฐจ์ ๋ฒกํฐ)- ์ ์ฌ๋ ์ฐ์ฐ์ (
<=>,<->,<#>) - ์ธ๋ฑ์ค (IVFFlat, HNSW)
ํ์ ํจํค์ง ์ค์น
pgvector: PostgreSQL pgvector ํ์ ์ง์ (Knex์ ํจ๊ป ์ฌ์ฉ)voyageai: Voyage AI ์๋ฒ ๋ฉ (ํ๊ตญ์ด ์ถ์ฒ)@ai-sdk/openai: OpenAI ์๋ฒ ๋ฉ (์ ํ)
PostgreSQL ํ์ฅ ์ค์น
ํ๊ฒฝ๋ณ ์ค์น ๋ฐฉ๋ฒ
- Ubuntu/Debian
- macOS (Homebrew)
- Docker
- Cloud (Supabase/Neon)
ํ์ฅ ํ์ฑํ
PostgreSQL์ ์ ์ํ์ฌ ํ์ฅ์ ํ์ฑํํฉ๋๋ค:Sonamu ํ๋ก์ ํธ์ ์ ์ฉํ๊ธฐ
1. ํ๊ฒฝ๋ณ์ ์ค์
2. Sonamu Config ํ์ธ
3. Knex Migration์ผ๋ก ํ ์ด๋ธ ์์ฑ
Sonamu์ Migration์ ์ฌ์ฉํ์ฌ ๋ฒกํฐ ํ ์ด๋ธ์ ๋ง๋ญ๋๋ค:4. ์ฒ์๋ถํฐ ๋ฒกํฐ ํ ์ด๋ธ ๋ง๋ค๊ธฐ
์ ํ ์ด๋ธ์ ๋ง๋ ๋ค๋ฉด:๋ฒกํฐ ์ฐจ์ ์ดํดํ๊ธฐ
์๋ฒ ๋ฉ ๋ชจ๋ธ๋ง๋ค ๋ฒกํฐ ์ฐจ์์ด ๋ค๋ฆ ๋๋ค:์ธ๋ฑ์ค - ๋์ค์ ๋ง๋ค๊ธฐ
์ค์: ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๊ฐ ์ถฉ๋ถํ ์์ธ ํ์ ๋ง๋ญ๋๋ค.์ ๋์ค์?
HNSW ์ธ๋ฑ์ค (๊ถ์ฅ)
๋ฐ์ดํฐ๊ฐ 100๊ฐ ์ด์ ์์ธ ํ:m = 16: ์ฐ๊ฒฐ ์ (๊ธฐ๋ณธ๊ฐ, ๋๋ถ๋ถ OK)ef_construction = 64: ๊ตฌ์ถ ์ ํ์ ํฌ๊ธฐ