1๋ง ๊ฐ์ ๋ฒกํฐ์์๋ ์๋ฒ ๋ฉ ๊ฒ์์ด ์ฝ์ต๋๋ค. P99 ์ง์ฐ ์๊ฐ์ด 100ms ๋ฏธ๋ง์ธ 1์ต ๊ฐ์ ๋ฒกํฐ์์๋ ์ธํ๋ผ ๋ฌธ์ ๊ฐ ๋๋ฉฐ, ์ด ํจํด์ด ๋ฐ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.

๋ช ์ฒ ๊ฐ์ ๋ฒกํฐ๋ก๋ ๊ฐ๋ฐ ๋จ๊ณ์์ RAG pipeline ๋๋ ์ถ์ฒ ์์คํ ์ด ํ๋ฅญํ๊ฒ ์๋ํฉ๋๋ค. ์ด์ 5์ฒ๋ง ๊ฐ์ ์๋ฒ ๋ฉ์ ๊ฐ์ง๊ณ ์๊ณ , ์ฟผ๋ฆฌ๋ 100ms ๋ฏธ๋ง์ latency๋ฅผ ํ์๋ก ํ๋ฉฐ, ์ธ๋ฑ์ค๋ ๊ณ์ ์ฆ๊ฐํ๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์๋ชจํ๊ณ ์์ต๋๋ค. ์ํ์ ์ผ๋ก ํ์ฅํ๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ(๋ชจ๋ ๊ฒ์ด RAM์ ์์ฃผํ ํ์๋ ์์ต๋๋ค), ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ์ ํ์ํค์ง ์์ผ๋ฉด์ ๋์ ์ฐ๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฒ์ ์ธ๋ฑ์ค์ธ ๊ฒ์ ์ 1๋ง ๋ฌ๋ฌ์ ์ธํ๋ผ ๋น์ฉ์ด ๋ค์ง ์๋ ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํคํ ์ฒ๊ฐ ํ์ํฉ๋๋ค.
Explore more design patterns and system architectures
MicrocosmWorks๋ ํ์ด ์ด๋ฏธ PostgreSQL์ ์ฌ์ฉํ๊ณ ์๋ ๊ฒฝ์ฐ, ์๋ก์ด ์ธํ๋ผ ๊ตฌ์ฑ ์์๋ฅผ ๋์ ํ ํ์๊ฐ ์์ผ๋ฉฐ ํ์ด๋ธ๋ฆฌ๋ SQL-plus-vector ์ฟผ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฏ๋ก 500๋ง~1,000๋ง ๊ฐ ๋ฏธ๋ง์ ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์ pgvector๋ฅผ ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅํฉ๋๋ค. 1,000๋ง ๊ฐ ์ด์์ ๋ฒกํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋์ ๋์์ฑ์์ 50ms ๋ฏธ๋ง์ p99 ์ง์ฐ ์๊ฐ์ด ํ์ํ ๊ฒฝ์ฐ, Qdrant, Weaviate ๋๋ Milvus์ ๊ฐ์ ์ ์ฉ ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ต์ ํ๋ ์ธ๋ฑ์ฑ ์๊ณ ๋ฆฌ์ฆ๊ณผ GPU ๊ฐ์ ๊ฒ์์ ํตํด ํจ์ฌ ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ ํฌ๋ ์ํคํ ์ฒ ๊ฒํ ์ค์ ๊ณ ๊ฐ์ ์ค์ ์ฟผ๋ฆฌ ํจํด๊ณผ ์ฑ์ฅ ์์ธก์ ๋ฒค์น๋งํนํ์ฌ ์ด๋ฌํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์๋๋ก ๋์ต๋๋ค.
MicrocosmWorks๋ ํจ์จ์ ์ธ ๊ฒ์์ ์ํด ์๋ฏธ๋ก ์ ์ผ๋ก ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ co-located ์ํ๋ก ์ ์งํ๋ฉด์, vector๋ฅผ node๋ค์ ๋ถ์ฐ์ํค๋ hash-based ๋๋ metadata-based sharding ์ ๋ต์ผ๋ก vector database clusters๋ฅผ ์ค๊ณํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ด๋ จ shard๋ก ๊ฒ์ ์์ฒญ์ ๋ถ์ฐ์ํค๊ณ ์ ์ญ top-K aggregation์ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ณํฉํ๋ฉฐ, ์์ญ ๊ฐ์ shard์ ๊ฑธ์ณ์๋ 100ms ๋ฏธ๋ง์ latency๋ฅผ ์ ์งํ๋ query routing layers๋ฅผ ๊ตฌํํฉ๋๋ค. ์ฐ๋ฆฌ์ monitoring dashboards๋ dataset์ด ํ์ฅ๋จ์ ๋ฐ๋ผ hotspot์ด ๋ฐ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด shard balance, query distribution, ๊ทธ๋ฆฌ๊ณ replication lag์ ์ถ์ ํฉ๋๋ค.
MicrocosmWorks๋ scalar quantization (float32๋ฅผ int8๋ก ์ค์) ๋ฐ product quantization์ ์ ์ฉํ์ฌ vector storage๋ฅผ 4-8๋ฐฐ ์์ถํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก recall์์ 2% ๋ฏธ๋ง์ ์ ํ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ production์ ๋ฐฐํฌํ๊ธฐ ์ ์ ๊ณ ๊ฐ์ ์ค์ query workload์ ๋ํ A/B testing์ ํตํด ๊ฒ์ฆ๋ฉ๋๋ค. ๋ํ, quantized vectors๊ฐ ์ด๊ธฐ candidate retrieval์ ์ฌ์ฉ๋๊ณ full-precision vectors๋ ์์ ๊ฒฐ๊ณผ์ ์ต์ข re-ranking์๋ง ์ฌ์ฉ๋๋ 2๋จ๊ณ retrieval approach๋ฅผ ๊ตฌํํฉ๋๋ค. ์ด ํ์ด๋ธ๋ฆฌ๋ ์ ๋ต์ ํตํด ๊ณ ๊ฐ์ ์์ต ๊ฐ์ vectors๋ฅผ ๊ทนํ ์ผ๋ถ์ ๋น์ฉ์ผ๋ก ์ ์ฅํ๋ฉด์๋, ๋น์์ถ ์์ ๊ณผ ๊ตฌ๋ณํ ์ ์๋ ๊ฒ์ ํ์ง์ ์ ์งํ ์ ์์ต๋๋ค.
MicrocosmWorks๋ ์ฐ๊ธฐ ๋ด๊ตฌ์ฑ์ ์ํด ๋๊ธฐ์ ๋ณต์ ๋ฅผ ์ฌ์ฉํ๋ ๋ค์ค-๋ณต์ ๋ณธ ๊ตฌ์ฑ์ผ๋ก ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐฐํฌํ๊ณ , ๋ด๊ฒฐํจ์ฑ ๋ฐ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ํด ๊ฐ์ฉ ์์ญ์ ๊ฑธ์ณ ๋ถ์ฐ๋ ์ฝ๊ธฐ ๋ณต์ ๋ณธ์ ์ฌ์ฉํฉ๋๋ค. ๋น์ฌ๋ ๋ ธ๋ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ 10์ด ๋ฏธ๋ง์ ์ฝ๊ธฐ ๋ถ๊ฐ์ฉ์ฑ๋ง ๋ฐ์ํ๊ณ ๋ฐ์ดํฐ ์์ค์ ์ ํ ์๋๋ก ์ํ ํ์ธ ๊ธฐ๋ฐ์ ๋ฆฌ๋ ์ ์ถ์ ํตํ ์๋ํ๋ ํ์ผ์ค๋ฒ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๋น์ฌ์ ์ฝ๋ํ ์ธํ๋ผ ํ ํ๋ฆฟ์๋ ๊ฐ ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ ๋ง์ถฐ์ง ์ฌ์ ๊ตฌ์ฑ๋ ๋ฐฑ์ ์ผ์ , ํน์ ์์ ๋ณต๊ตฌ, ๊ทธ๋ฆฌ๊ณ ์ฌํด ๋ณต๊ตฌ ๋ฐ๋ถ์ด ํฌํจ๋์ด ์์ต๋๋ค.
MicrocosmWorks๋ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ์๋ฒ ๋ฉ ๋ชจ๋ธ์ด ์ ์ ํ ์ธ๋ฑ์ค ๊ตฌ์ฑ๊ณผ ํจ๊ป ์์ฒด์ ์ธ ๊ฒฉ๋ฆฌ๋ ์ปฌ๋ ์ ์ ๊ฐ์ง๋๋ก ํ๋ ๋ค์ค ์ปฌ๋ ์ ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฐํฌ๋ฅผ ์ค๊ณํ๋ฉฐ, ๋์์ ๋น์ฉ ํจ์จ์ฑ์ ์ํด ๊ธฐ๋ณธ ํด๋ฌ์คํฐ ์ธํ๋ผ๋ฅผ ๊ณต์ ํฉ๋๋ค. ์ ํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฒญ์ ์ฌ๋ฐ๋ฅธ ์ปฌ๋ ์ ์ผ๋ก ๋ผ์ฐํ ํ๊ณ , ์ผ์นํ๋ ๋ชจ๋ธ๋ก ์ฟผ๋ฆฌ ์๋ฒ ๋ฉ๊ณผ ๊ฐ์ ์ปฌ๋ ์ ๋ณ ์ฌ์ ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ๋ ํตํฉ ์ฟผ๋ฆฌ ๊ฒ์ดํธ์จ์ด๋ฅผ ๊ตฌํํฉ๋๋ค. ์ด๋ฌํ ๋ฉํฐํ ๋ํธ ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ๋ฐฉ์์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณ๋ก ๊ฐ๋ณ ํด๋ฌ์คํฐ๋ฅผ ์ด์ํ๋ ๊ฒ์ ๋นํด ์ธํ๋ผ ๋น์ฉ์ ์ผ๋ฐ์ ์ผ๋ก 40-60% ์ ๊ฐํฉ๋๋ค.
์ฐ๋ฆฌ์ ์ํคํ ํธ๋ค์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์ด ํจํด์ ์ฌ์ฉํ์ฌ ์์คํ ์ ์ค๊ณํ๊ณ ๊ตฌ์ถํ๋ ๋ฐ ๋์์ ๋๋ฆด ์ ์์ต๋๋ค.
์ฐ๋ฝํ๊ธฐํ์ฅ ๊ฐ๋ฅํ ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํคํ ์ฒ๋ ํ๋ก๋์ ๊ท๋ชจ์์ ๋ฒกํฐ ๊ฒ์์ ์ด์ํ๋ ๋ฐ ๋ฐ๋ฅด๋ ๊ณผ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค: ๋ ธ๋ ๊ฐ ์ธ๋ฑ์ค ํํฐ์ ๋(sharding), ๊ณ์ธตํ ์คํ ๋ฆฌ์ง(๋ฉ๋ชจ๋ฆฌ์ ํซ ์ธ๊ทธ๋จผํธ, SSD์ ์ ์ธ๊ทธ๋จผํธ, S3์ ์ฝ๋ ์ธ๊ทธ๋จผํธ), ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ํตํ ์ฟผ๋ฆฌ ๋ผ์ฐํ , ์ฟผ๋ฆฌ ๋ก๋ ๋ฐ ์ธ๋ฑ์ค ํฌ๊ธฐ์ ๊ธฐ๋ฐํ autoscaling. ์ด ํจํด์ ๋ฐฐํฌ ํ ํด๋ก์ง, ์ฉ๋ ๊ณํ, ์ฐ๊ธฐ/์ฝ๊ธฐ ๊ฒฉ๋ฆฌ, ๋น์ฉ ์ต์ ํ๋ฅผ ๋ค๋ฃน๋๋ค. ์ด๋ ๋๊ท๋ชจ RAG ๋ฐ ์ถ์ฒ ์์คํ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ธํ๋ผ ๊ณ์ธต์ ๋๋ค.
์ด ์ํคํ ์ฒ๋ ์ฟผ๋ฆฌ ๋ ธ๋(read path)์ ๋ฐ์ดํฐ ๋ ธ๋(write path)๋ฅผ ๋ถ๋ฆฌํ์ฌ ํด๋ฌ์คํฐํ ํ ํด๋ก์ง๋ก ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ธ๋๋ฅผ ๋ฐฐํฌํฉ๋๋ค. ์์ง ํ์ดํ๋ผ์ธ์ ์ฟผ๋ฆฌ latency์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ์ฐ๊ธฐ ๋ฒํผ๋ง์ ํตํด ์๋ฒ ๋ฉ ์์ฑ ๋ฐ ๋ฐฐ์น upsert๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ฟผ๋ฆฌ ๋ผ์ฐํฐ๋ shard ์์ค ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ก ์ฝ๊ธฐ ๋ณต์ ๋ณธ์ ๊ฒ์์ ๋ถ์ฐํฉ๋๋ค. ๊ณ์ธตํ ์คํ ๋ฆฌ์ง๋ ์์ฃผ ์ก์ธ์ค๋์ง ์๋ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ SSD๋ก, ๊ทธ๋ฆฌ๊ณ S3๋ก ์ด๋์ํค๋ฉฐ, ํฌ๋ช ํ ์ฟผ๋ฆฌ ์๊ฐ ๋ก๋ฉ์ ์ ๊ณตํฉ๋๋ค. Autoscaling์ ์ฟผ๋ฆฌ QPS ๋ฐ P99 latency๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณต์ ๋ณธ ์๋ฅผ ์กฐ์ ํฉ๋๋ค.
| ๊ณ์ธต | ๊ธฐ์ |
|---|---|
| Vector Database | Milvus (๋ถ์ฐ), Qdrant (๋จ์ผ ๋ ธ๋/์๊ท๋ชจ ํด๋ฌ์คํฐ), Pinecone (๊ด๋ฆฌํ) |
| Storage Backend | MinIO / S3 (์ธ๊ทธ๋จผํธ ์คํ ๋ฆฌ์ง), SSD (์ ํฐ์ด), RAM (ํซ ํฐ์ด) |
| ์กฐ์ | etcd (Milvus ๋ฉํ๋ฐ์ดํฐ), Pulsar/Kafka (write-ahead log) |
| Embedding Models | OpenAI text-embedding-3-large, Cohere embed-v4, BGE-M3, E5-large-v2 |
| ์ธํ๋ผ | Kubernetes (EKS/GKE) (์๋ฒ ๋ฉ์ ์ํ GPU ๋ ธ๋, ์ฟผ๋ฆฌ๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ ๋ ธ๋ ํฌํจ) |
| ๋ชจ๋ํฐ๋ง | Grafana + Milvus ๋ฉํธ๋ฆญ์ค ์ต์คํฌํฐ, ์ฌ์ฉ์ ์ง์ P99/recall ๋์๋ณด๋ |
| ์ฌ์ฉ ์๊ธฐ | ํผํด์ผ ํ ์๊ธฐ |
|---|---|
| ๋ฒกํฐ ์๊ฐ 5๋ฐฑ๋ง ๊ฐ๋ฅผ ์ด๊ณผํ๊ณ ์ฆ๊ฐํ๋ฉฐ, ์ํ์ ํ์ฅ์ด ํ์ํ ๋ | ๋ฒกํฐ ์๊ฐ 1๋ฐฑ๋ง ๊ฐ ๋ฏธ๋ง์ผ ๋ โ ๊ธฐ์กด PostgreSQL์ pgvector๋ก ์ถฉ๋ถํฉ๋๋ค |
| 100ms ๋ฏธ๋ง์ P99 ์ฟผ๋ฆฌ latency๊ฐ ํ์ ์๊ตฌ์ฌํญ์ผ ๋ | 500ms ์ด์์ ์ฟผ๋ฆฌ latency๊ฐ ํ์ฉ ๊ฐ๋ฅํ ๋ โ ๋ ๊ฐ๋จํ ์ต์ ์ผ๋ก๋ ์ถฉ๋ถํฉ๋๋ค |
| ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ /ํ ๋ํธ๊ฐ ๋ฒกํฐ ์ธํ๋ผ๋ฅผ ๊ณต์ ํ ๋ | ๋จ์ผ ์ปฌ๋ ์ ์ ๊ฐ์ง ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ผ ๋ โ ๊ด๋ฆฌํ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ธ์ |
| ๋น์ฉ ์ต์ ํ๋ฅผ ์ํด ๊ณ์ธตํ ์คํ ๋ฆฌ์ง๊ฐ ํ์ํ ๋ (๋ชจ๋ ๊ฒ์ด RAM์ ์์ง ์์๋ ๋จ) | ์์ฐ์ด ์์ ๊ด๋ฆฌํ ์๋น์ค๋ฅผ ํ์ฉํ๊ณ , ํด๋น ๊ณต๊ธ์ ์ฒด์ ๊ฐ๊ฒฉ ์ ์ฑ ์ด ํ์ฌ ๊ท๋ชจ์ ์ ํฉํ ๋ |
MW๋ "์ฒซ๋ ๋ถํฐ ์ ์ ํ ํฌ๊ธฐ๋ก, ์ธก์ ์ ๋ฐ๋ผ ํ์ฅ"ํ๋ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธํ๋ผ๋ฅผ ์ค๊ณํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ถ์ธก์ด ์๋ ๋ฒกํฐ ์, ์ฐจ์, ์ธ๋ฑ์ค ์ ํ ๋ฐ ๋ชฉํ latency๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฉ๋ ๊ณํ์ ์์ํฉ๋๋ค. Kubernetes์ ๋ฐฐํฌ๋ Milvus๋ ์ธ๊ทธ๋จผํธ ์, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ์ฟผ๋ฆฌ latency ๋ฐฑ๋ถ์์ ๋ฐ recall ์ถ์ ์น๋ฅผ ์ถ์ ํ๋ Grafana ๋์๋ณด๋๋ฅผ ํฌํจํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ ๋ฌด ์๊ฐ ๋์ 10๋ฐฐ์ ํธ๋ํฝ ๊ธ์ฆ์ ์ฒ๋ฆฌํ๊ณ ๋ฐค์ ์ค์ผ์ผ ๋ค์ดํ์ฌ, ์ ์ ํ๋ก๋น์ ๋์ ๋นํด ์ธํ๋ผ ๋น์ฉ์ 40-60% ์ ๊ฐํ๋ autoscaling Milvus ํด๋ฌ์คํฐ๋ฅผ ๊ตฌํํ์ต๋๋ค.
๋ฏธ์ธ ์กฐ์ (fine-tuning) ์์ด LLM์ด ๋ฐ์ดํฐ์ ์ ๊ทผํ๋๋ก ํ์ธ์. RAG๋ ๋ฒ์ฉ ์ธ์ด ๋ชจ๋ธ๊ณผ ๋๋ฉ์ธ๋ณ ์ง์ ๊ฐ์ ๊ฒฉ์ฐจ๋ฅผ ํด์ํฉ๋๋ค.