Tinkerbell Glitter
[250310] WebSocket์ด๋ž€?
AI ๐Ÿค–/Django โ›“๏ธ
WebSocket์ด๋ž€?1. WebSocket ์ •์˜WebSocket์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์–‘๋ฐฉํ–ฅ, ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ์ผ๋ฐ˜์ ์ธ HTTP ์š”์ฒญ/์‘๋‹ต ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ, WebSocket์€ ํ•œ ๋ฒˆ ์—ฐ๊ฒฐ์„ ๋งบ์œผ๋ฉด ์œ ์ง€๋œ ์ƒํƒœ์—์„œ ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค.2. WebSocket์˜ ์ฃผ์š” ํŠน์ง•ํ’€ ์ด์ค‘ ํ†ต์‹ (Full-Duplex Communication)ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ.๊ธฐ์กด HTTP์˜ ์š”์ฒญ-์‘๋‹ต ๋ชจ๋ธ๊ณผ ๋‹ค๋ฅด๊ฒŒ, ์„œ๋ฒ„๋„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Œ.์ง€์†์ ์ธ ์—ฐ๊ฒฐ(Persistent Connection)์ดˆ๊ธฐ ํ•ธ๋“œ์…ฐ์ดํฌ(Handshake) ํ›„, TCP ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€์ง€ ์•Š๊ณ  ์œ ์ง€๋จ.์ถ”๊ฐ€์ ์ธ ์—ฐ๊ฒฐ ์„ค์ •์ด ํ•„์š” ์—†์œผ๋ฏ€๋กœ..
[250307] FAISS vs ChromaDB ์ฐจ์ด์ 
AI ๐Ÿค–/ML & DL ๐Ÿง 
๐Ÿ” FAISS vs ChromaDB: ๊ธฐ๋Šฅ์  ์ฐจ์ด์ 1. FAISS (Facebook AI Similarity Search) ์ •๋ฆฌ์ฃผ์š” ๊ธฐ๋Šฅ: ๋Œ€๊ทœ๋ชจ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์‚ฌ์šฉ ๋ชฉ์ : ์ฃผ๋กœ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ธ๋ฑ์‹ฑ ๋ฐ ๊ฒ€์ƒ‰ ์—”์ง„ ์—ญํ• ํ•ต์‹ฌ ๊ธฐ๋Šฅ:๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์ƒ์„ฑ (`IndexFlatL2`, `IVFFlat`, `HNSW` ๋“ฑ)์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰ (L2 ๊ฑฐ๋ฆฌ, ๋‚ด์ , ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„ ๋“ฑ)GPU ๊ฐ€์† ์ง€์› (CUDA ํ™œ์šฉ ๊ฐ€๋Šฅ)๋ฒกํ„ฐ ์ €์žฅ ๊ธฐ๋Šฅ: ์ œ๊ณตํ•˜์ง€ ์•Š์Œ (๋””์Šคํฌ์— ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์žˆ์ง€๋งŒ, DB์ฒ˜๋Ÿผ ๊ด€๋ฆฌ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹˜)2. ChromaDB ์ •๋ฆฌ์ฃผ์š” ๊ธฐ๋Šฅ: ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(Vector DB)์‚ฌ์šฉ ๋ชฉ์ : ๋ฒกํ„ฐ ์ž„๋ฒ ๋”ฉ์„ ์ €์žฅํ•˜๊ณ , ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ CRUD(C..
[250306] update()์™€ save()์˜ ์ฐจ์ด
AI ๐Ÿค–/Django โ›“๏ธ
Django ORM์—์„œ `update()`์™€ `save()`์˜ ์ฐจ์ดDjango ORM์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ `update()`์™€ `save()`๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.ํ•˜์ง€๋งŒ ์ด ๋‘˜์˜ ๋™์ž‘ ๋ฐฉ์‹์€ ๋‹ค๋ฅด๋ฉฐ, ๋ฐ์ดํ„ฐ๊ฐ€ DB์— ๋ฐ˜์˜๋˜๋Š” ๋ฐฉ์‹์—์„œ๋„ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.1. `update()`: QuerySet์„ ํ†ตํ•œ ๋Œ€๋Ÿ‰ ์—…๋ฐ์ดํŠธโœ… ํŠน์ง•`update()`๋Š” QuerySet์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜์—ฌ DB์— ๋ฐ˜์˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.๋‹จ์ผ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ์— ์—…๋ฐ์ดํŠธํ•  ์ˆ˜๋„ ์žˆ๋‹ค.Django ๋ชจ๋ธ์˜ `save()` ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Œ → ์ฆ‰, `pre_save` ๋ฐ `post_save` ๊ฐ™์€ ์‹ ํ˜ธ(signals)๋„ ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š๋Š”๋‹ค.โœ… ์‚ฌ์šฉ ์˜ˆ์‹œfrom myapp.models import User# ..
[250305] Soft Delete๋ž€?
AI ๐Ÿค–/Django โ›“๏ธ
Soft Delete๋ž€? ๐Ÿ”™1. Soft Delete ์ •์˜Soft Delete(์†Œํ”„ํŠธ ๋”œ๋ฆฌํŠธ)๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ๋กœ ์‚ญ์ œํ•˜๋Š” ๋Œ€์‹ , ํŠน์ • ์ปฌ๋Ÿผ(์˜ˆ: `deleted_at` ๋˜๋Š”`is_deleted`)์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์‚ญ์ œ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.๐Ÿ” Hard Delete vs. Soft Delete๊ตฌ๋ถ„Hard DeleteSoft Delete๋ฐ์ดํ„ฐ ์‚ญ์ œ ์—ฌ๋ถ€์‹ค์ œ ์‚ญ์ œDB์— ๋‚จ์•„์žˆ์Œ๋ณต๊ตฌ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ถˆ๊ฐ€๋Šฅ๊ฐ€๋Šฅ์„ฑ๋Šฅ ์˜ํ–ฅ๋น ๋ฆ„์ผ๋ถ€ ์„ฑ๋Šฅ ๋ถ€๋‹ด๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์˜์กด์„ฑ ๋ฐ์ดํ„ฐ ์‚ญ์ œ ํ•„์š”์œ ์ง€ ๊ฐ€๋Šฅ์‚ฌ์šฉ ์‚ฌ๋ก€๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๊ธฐ๋ก ๋ณด์กด์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ2. Soft Delete ๊ตฌํ˜„ ๋ฐฉ์‹1๏ธโƒฃ `is_deleted` ํ”Œ๋ž˜๊ทธ ํ™œ์šฉ์‚ญ์ œ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Boolean ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹.ALTER TABLE users ADD ..
[250304] RAG ์ •๋ฆฌ
AI ๐Ÿค–/ML & DL ๐Ÿง 
RAG (Retrieval-Augmented Generation)๋ž€?1. RAG ์ •์˜RAG(Retrieval-Augmented Generation)๋Š” ์ •๋ณด ๊ฒ€์ƒ‰(Retrieval)๊ณผ ์ƒ์„ฑ ๋ชจ๋ธ(Generation)์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋” ์ •ํ™•ํ•˜๊ณ  ์ตœ์‹  ์ •๋ณด๋ฅผ์ œ๊ณตํ•˜๋Š” AI ๊ธฐ์ˆ ์ด๋‹ค. ๋‹จ์ˆœํžˆ ์‚ฌ์ „ ํ•™์Šต๋œ ์–ธ์–ด ๋ชจ๋ธ์ด ์•„๋‹Œ, ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋ฌธ์„œ์—์„œ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•œ ํ›„ ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‘๋‹ต์„์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.ํ•ต์‹ฌ ๊ฐœ๋…Retrieval (๊ฒ€์ƒ‰)์ฃผ์–ด์ง„ ์งˆ์˜(Query)์™€ ๊ด€๋ จ๋œ ๋ฌธ์„œ๋ฅผ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰(Vector Search) ๋˜๋Š” ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ์ฐพ์•„๋‚ธ๋‹ค.์ผ๋ฐ˜์ ์œผ๋กœ FAISS, ChromaDB, Weaviate, Elasticsearch ๊ฐ™์€ ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ™œ์šฉํ•œ๋‹ค.๋ฌธ์„œ ์ž„๋ฒ ๋”ฉ(Document Embedding)์„ ..
[250228] SA ๋ฌธ์„œ ์ž‘์„ฑ์˜ ์ค‘์š”์„ฑ
Today I Learned ๐Ÿ“–
SA ๋ฌธ์„œ ์ž‘์„ฑ์˜ ์ค‘์š”์„ฑ โœ๐Ÿป1. SA(Software Architecture) ๋ฌธ์„œ๋ž€?SA(Software Architecture) ๋ฌธ์„œ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์„œ๋กœ, ์‹œ์Šคํ…œ์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ,๋ฐ์ดํ„ฐ ํ๋ฆ„, ๋ชจ๋“ˆ ๊ฐ„ ๊ด€๊ณ„, ๊ธฐ์ˆ  ์Šคํƒ, ๋น„๊ธฐ๋Šฅ์  ์š”๊ตฌ ์‚ฌํ•ญ ๋“ฑ์„ ํฌํ•จํ•œ๋‹ค. ์ด ๋ฌธ์„œ๋Š” ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ํŒ€์› ๊ฐ„์˜ ์ดํ•ด๋ฅผ ๋•๊ณ , ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์‹œ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘์š”ํ•œ ๋ฌธ์„œ ์—ญํ• ์„ ํ•œ๋‹ค.2. SA ๋ฌธ์„œ ์ž‘์„ฑ์ด ์ค‘์š”ํ•œ ์ด์œ โ‘  ๋ช…ํ™•ํ•œ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฐ ๊ตฌ์กฐํ™”ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ ์š”์†Œ, ๋ชจ๋“ˆ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„ ๋“ฑ์„ ๋ฌธ์„œํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ํ˜ผ์„ ์„ ์ค„์ธ๋‹ค.๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค๊ณ„ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ , ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค.โ‘ก ..