Data Engineering/Data Infra & Process

[8ํŽธ] pgvector๋ฅผ ํ™œ์šฉํ•œ ๋Œ€๊ทœ๋ชจ AI ๊ฒ€์ƒ‰ ์‹œ์Šคํ…œ ๊ตฌ์ถ• & ์šด์˜ ์ „๋žต

ygtoken 2025. 3. 7. 15:09
728x90

 

๐Ÿ“Œ ๊ฐœ์š”

 

์ด ๊ธ€์—์„œ๋Š” 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์„ ํ™œ์šฉํ•œ ์ž๋™ ๋ฐฑ์—… ์ ์šฉ

 

728x90