๐ ๊ฐ์
์ด ๊ธ์์๋ PostgreSQL pgvector๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ์ฌ AI ๊ฒ์์ ๊ตฌ์ถํ๊ณ ์ด์ํ๋ ์ ๋ต์ ๋ค๋ฃน๋๋ค.
ํนํ, ๋๊ท๋ชจ ๋ฒกํฐ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ์ฅ & ๊ฒ์ํ๋ DB ์ค๊ณ, ๋ฒกํฐ ๋ฐ์ดํฐ์ ๋ฐฑ์ ๋ฐ ์ต์ ํ, ์ฑ๋ฅ ๊ฐ์ ๊ธฐ๋ฒ ๋ฑ์ ๋ค๋ฃน๋๋ค.
โ pgvector๋ฅผ AI ๊ฒ์ ์์คํ ์ ์ ์ฉํ๋ ์ค์ ์ฌ๋ก
โ ๋๊ท๋ชจ ๋ฒกํฐ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ์ฅ & ๊ฒ์ํ๋ DB ์ค๊ณ
โ ๋ฒกํฐ ๋ฐ์ดํฐ ๋ฐฑ์ , ๋ชจ๋ํฐ๋ง, ์ฑ๋ฅ ์ต์ ํ ๋ฐฉ๋ฒ
โ ํด๋ผ์ฐ๋ ํ๊ฒฝ(AWS, GCP, Azure)์์ pgvector ์ด์ ๊ณ ๋ ค ์ฌํญ
๐ 1. AI ๊ฒ์ ์์คํ ์์ pgvector ํ์ฉ ์ฌ๋ก
๐น 1๏ธโฃ ๋ฌธ์ ๊ฒ์ ์์คํ (AI RAG)
โ ์ฌ์ฉ ์ฌ๋ก: ๋๊ท๋ชจ ๋ฌธ์์์ AI๊ฐ ์ ์ ํ ๋ฌธ์ฅ์ ์ฐพ์ ์๋ตํ๋ Retrieval-Augmented Generation(RAG) ์์คํ
โ pgvector ์ญํ : ๋ฌธ์์ ์๋ฏธ๋ฅผ ๋ฒกํฐ๋ก ๋ณํํ์ฌ ์ ์ฌํ ๋ฌธ์ ๊ฒ์
โ ๊ธฐ์ ์คํ: PostgreSQL + pgvector + OpenAI + LangChain
๐ ์ค๋ฌด ์ ์ฉ ๊ณผ์
1๏ธโฃ ๋ชจ๋ ๋ฌธ์๋ฅผ ๋ฒกํฐ๋ก ๋ณํํ์ฌ pgvector์ ์ ์ฅ
2๏ธโฃ ์ฌ์ฉ์๊ฐ ์ง๋ฌธ์ ์ ๋ ฅํ๋ฉด ํด๋น ์ง๋ฌธ์ ๋ฒกํฐ๋ก ๋ณํ
3๏ธโฃ pgvector์์ ๊ฐ์ฅ ์ ์ฌํ ๋ฌธ์๋ฅผ ๊ฒ์ํ์ฌ AI ๋ชจ๋ธ์ด ์์ฝ & ์๋ต
โ ์์ : ๋ฌธ์ ๊ฒ์ SQL ์ฟผ๋ฆฌ
SELECT content, embedding <-> '[0.3, 0.2, 0.1]' AS similarity
FROM embeddings
ORDER BY similarity
LIMIT 5;
์ค๋ช :
• <-> ์ฐ์ฐ์๋ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ(Euclidean Distance) ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฒกํฐ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํฉ๋๋ค.
• ์ ์ฌํ ๋ฌธ์ 5๊ฐ๋ฅผ ๊ฒ์ํ์ฌ similarity ์์ผ๋ก ์ ๋ ฌํ์ฌ ๋ฐํํฉ๋๋ค.
• ์๋ต ์๋๋ฅผ ๋์ด๊ธฐ ์ํด HNSW ์ธ๋ฑ์ค๋ฅผ ์ ์ฉํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค.
๐น 2๏ธโฃ ์ ์์๊ฑฐ๋ & ์ถ์ฒ ์์คํ
โ ์ฌ์ฉ ์ฌ๋ก: AI ๊ธฐ๋ฐ ์ํ ์ถ์ฒ, ์ ์ฌํ ์ ํ ๊ฒ์
โ pgvector ์ญํ : ์ฌ์ฉ์์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฒกํฐ๋ก ๋ณํํ์ฌ ์ ์ฌํ ํจํด์ ์ฐพ์ ์ถ์ฒ
โ ๊ธฐ์ ์คํ: PostgreSQL + pgvector + FastAPI + React
๐ ์ค๋ฌด ์ ์ฉ ๊ณผ์
1๏ธโฃ ๊ณ ๊ฐ์ด ํด๋ฆญํ ์ ํ์ ๋ฒกํฐ ์ ๋ณด๋ฅผ pgvector์ ์ ์ฅ
2๏ธโฃ ๊ณ ๊ฐ์ด ๊ด์ฌ์ ๊ฐ์ง ๋งํ ์ ์ฌํ ์ ํ์ ๋ฒกํฐ ๊ฒ์์ผ๋ก ์ถ์ฒ
โ ์์ : ์ ์ฌํ ์ ํ ์ถ์ฒ SQL ์ฟผ๋ฆฌ
SELECT product_name, embedding <-> '[0.1, 0.4, 0.6]' AS similarity
FROM product_embeddings
ORDER BY similarity
LIMIT 10;
์ค๋ช :
• ์ฌ์ฉ์๊ฐ ์ต๊ทผ ํด๋ฆญํ ์ ํ์ ๋ฒกํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฅ ์ ์ฌํ 10๊ฐ ์ ํ์ ์ถ์ฒํฉ๋๋ค.
• <-> ์ฐ์ฐ์๋ L2 Distance ๊ธฐ๋ฐ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๋ฉฐ, ๋ฎ์์๋ก ๋ ์ ์ฌํ ์ํ์ ์๋ฏธํฉ๋๋ค.
• ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฒ์ํ๋ ค๋ฉด HNSW ์ธ๋ฑ์ค๋ฅผ ๋ฐ๋์ ์ ์ฉํด์ผ ํฉ๋๋ค.
๐น 3๏ธโฃ ๋์ฉ๋ ์ด๋ฏธ์ง ๊ฒ์ ์์คํ
โ ์ฌ์ฉ ์ฌ๋ก: AI ๊ธฐ๋ฐ ์ด๋ฏธ์ง ๊ฒ์ (Google Lens ๊ฐ์ ์๋น์ค)
โ pgvector ์ญํ : ์ด๋ฏธ์ง์ ํน์ง์ ๋ฒกํฐ๋ก ๋ณํํ์ฌ ๊ฐ์ฅ ์ ์ฌํ ์ด๋ฏธ์ง๋ฅผ ๊ฒ์
โ ๊ธฐ์ ์คํ: PostgreSQL + pgvector + OpenCV + TensorFlow
๐ ์ค๋ฌด ์ ์ฉ ๊ณผ์
1๏ธโฃ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ CNN ๋ชจ๋ธ๋ก ๋ณํํ์ฌ ๋ฒกํฐ๋ฅผ ์์ฑ
2๏ธโฃ pgvector ํ ์ด๋ธ์ ์ด๋ฏธ์ง ๋ฒกํฐ๋ฅผ ์ ์ฅ
3๏ธโฃ ์ฌ์ฉ์๊ฐ ์ด๋ฏธ์ง ๊ฒ์ ์ ์ ๋ ฅ๋ ์ด๋ฏธ์ง์ ๋ฒกํฐ์ ๊ฐ์ฅ ์ ์ฌํ ์ด๋ฏธ์ง๋ฅผ ๋ฐํ
โ ์์ : ์ด๋ฏธ์ง ๊ฒ์ SQL ์ฟผ๋ฆฌ (Cosine Similarity ์ฌ์ฉ)
SELECT image_id, image_url, embedding <#> '[0.01, 0.42, 0.67, ...]' AS cosine_similarity
FROM image_embeddings
ORDER BY cosine_similarity
LIMIT 5;
์ค๋ช :
• <#> ์ฐ์ฐ์๋ Cosine Similarity ๊ธฐ๋ฐ์ผ๋ก ๋ฒกํฐ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํฉ๋๋ค.
• ORDER BY cosine_similarity๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฌ๋๊ฐ ๋์ ์ด๋ฏธ์ง 5๊ฐ๋ฅผ ๋ฐํํฉ๋๋ค.
• vector_l2_ops ๋์ vector_cosine_ops ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ๊ฒ์ ์๋๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์ต์ ํํ ์ ์์ต๋๋ค.
๐ 2. ๋๊ท๋ชจ ๋ฒกํฐ ๋ฐ์ดํฐ ์ ์ฅ & ๊ฒ์์ ์ํ DB ์ค๊ณ
โ ์ค๋ฌด์์ ๊ณ ๋ คํด์ผ ํ PostgreSQL pgvector ์ค์
์ค์ ํญ๋ชฉ์ถ์ฒ๊ฐ์ค๋ช
shared_buffers | 4GB ์ด์ | PostgreSQL ๋ฉ๋ชจ๋ฆฌ ์บ์ฑ ์ต์ ํ |
work_mem | 64MB ์ด์ | ๋ฒกํฐ ๊ฒ์ ์ฑ๋ฅ ์ต์ ํ |
maintenance_work_mem | 512MB ์ด์ | ์ธ๋ฑ์ค ์์ฑ ์๋ ํฅ์ |
effective_cache_size | 8GB ์ด์ | OS ์บ์ฑ ํ์ฉ |
๐ PostgreSQL ์ค์ (postgresql.conf)
primary:
postgresqlConfiguration:
shared_buffers: "4GB"
work_mem: "64MB"
maintenance_work_mem: "512MB"
effective_cache_size: "8GB"
๐ 3. ๋๋ ๋ฒกํฐ ๋ฐ์ดํฐ ๋ฐฑ์ & ๋ณต์ ์ ๋ต
๐น 1๏ธโฃ ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์
pg_dump -U postgres -h localhost -d ragdb > ragdb_backup.sql
๐น 2๏ธโฃ ๋ฒกํฐ ๋ฐ์ดํฐ๋ง ๋ฐฑ์
pg_dump -U postgres -h localhost -d ragdb -t embeddings > embeddings_backup.sql
โ ๋ฐฑ์ ์๋ํ (Kubernetes CronJob ํ์ฉ)
apiVersion: batch/v1
kind: CronJob
metadata:
name: pgvector-backup
namespace: database
spec:
schedule: "0 3 * * *" # ๋งค์ผ ์๋ฒฝ 3์์ ๋ฐฑ์
์คํ
jobTemplate:
spec:
template:
spec:
containers:
- name: pgvector-backup
image: postgres:14
command:
- "/bin/sh"
- "-c"
- "pg_dump -U postgres -h postgresql.database.svc.cluster.local -d ragdb > /backup/backup.sql"
volumeMounts:
- name: backup-volume
mountPath: /backup
restartPolicy: OnFailure
volumes:
- name: backup-volume
persistentVolumeClaim:
claimName: backup-pvc
โ ๋ฐฑ์ ์๋ํ ์คํ
kubectl apply -f backup-cronjob.yaml -n database
๐ 4. ์ค๋ฌด ์ด์ ์ ๋ต ์์ฝ
โ๏ธ AI ๊ฒ์ ์์คํ ๊ตฌ์ถ
• AI ๋ชจ๋ธ(OpenAI, Hugging Face)๊ณผ pgvector๋ฅผ ์ฐ๋
• ๋ฒกํฐ ๊ฒ์์ ํ์ฉํ ๋ฌธ์ ๊ฒ์, ์ถ์ฒ ์์คํ , ์ด๋ฏธ์ง ๊ฒ์ ์ ์ฉ
โ๏ธ ๋๊ท๋ชจ ๋ฒกํฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ
• PostgreSQL ๋ฉ๋ชจ๋ฆฌ ์ค์ ์ต์ ํ
• ๋ฒกํฐ ๋ฐ์ดํฐ ๋ฐฑ์ ๋ฐ ๋ณต์ ์ ๋ต ์๋ฆฝ
โ๏ธ ์ฑ๋ฅ ์ต์ ํ
• HNSW ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ฌ ๋ฒกํฐ ๊ฒ์ ์๋ ํฅ์
• Kubernetes CronJob์ ํ์ฉํ ์๋ ๋ฐฑ์ ์ ์ฉ