AI Wiki - 100-hours-a-week/KTB4-13th-wiki GitHub Wiki

๋ถ์ ๋ถ์  AI Wiki

๋‹ด๋‹น์ž: Sevan, Jimmy ยท ์ƒํƒœ: ๐Ÿšง ์ž‘์„ฑ์ค‘ ยท ์ตœ์ข… ์ˆ˜์ •: 2026-09-17

AI Repository

AI ํŒŒํŠธ๋Š” ์ž์—ฐ์–ด ๋„์„œ ๊ฒ€์ƒ‰, ์„ค๋ช… ๊ฐ€๋Šฅํ•œ AI ๋„์„œ ์ถ”์ฒœ, ์‚ฌ์ง„์œผ๋กœ ์ฑ… ์ฐพ๊ธฐ(VLM) ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.


๋ชฉ์ฐจ


๊ฐœ๋ฐœ ์ผ์ •

๊ธฐ๊ฐ„ ์ฃผ์š” ์ž‘์—…
MM/DD ~ ์ž‘์—… ๋‚ด์šฉ

๋‹ด๋‹น ๊ธฐ๋Šฅ

๊ธฐ๋Šฅ ๋ฒ„์ „ ์„ค๋ช…
์ž์—ฐ์–ด ๋„์„œ ๊ฒ€์ƒ‰ V1 ํ‚ค์›Œ๋“œ + ๋ฒกํ„ฐ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ (LLM ๋ฏธ์‚ฌ์šฉ)
AI ๋„์„œ ์ถ”์ฒœ V1 ๋Œ€ํ™”ํ˜• ๋‹จ์ผํ„ด ์ถ”์ฒœ, ์ถ”์ฒœ ์ด์œ  ์ œ๊ณต
์‚ฌ์ง„์œผ๋กœ ์ฑ… ์ฐพ๊ธฐ V1 ํ‘œ์ง€ ์ด๋ฏธ์ง€๋ฅผ VLM์œผ๋กœ ์ธ์‹ํ•ด ์นดํƒˆ๋กœ๊ทธ ๋งค์นญ
๊ฐœ์ธํ™” ์ถ”์ฒœ ยท ์žฌ๋žญํ‚น V2 ์‚ฌ์šฉ์ž ํ–‰๋™ ๊ธฐ๋ฐ˜ ์ถ”์ฒœ, ์ทจํ–ฅ ๊ธฐ์–ต
์‡ผํ•‘ ์—์ด์ „ํŠธ V2 ๋Œ€ํ™” ์ค‘ ๋‹ด๊ธฐยท์กฐํšŒ ๋“ฑ tool ์‹คํ–‰

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

(์ด๋ฏธ์ง€ ๋˜๋Š” ๋„์‹ ์ฒจ๋ถ€)

  • ๊ฒ€์ƒ‰ ์„œ๋ฒ„: FastAPI. ๊ทœ์น™ ํŒŒ์„œ โ†’ ํ‚ค์›Œ๋“œ + ๋ฒกํ„ฐ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ โ†’ ๋žญํ‚น. LLM ๋น„์˜์กด.
  • ์ถ”์ฒœ ์„œ๋ฒ„: ์ž…๋ ฅ ํ•ด์„ โ†’ ํ›„๋ณด ๊ฒ€์ƒ‰ โ†’ ์ถ”์ฒœ ์ด์œ  ์ƒ์„ฑ. ์™ธ๋ถ€ LLM API ์‚ฌ์šฉ.
  • ๋ฐ์ดํ„ฐ ๊ณ„์ธต: AI ์ „์šฉ PostgreSQL + pgvector. ๋ฐฑ์—”๋“œ์™€ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ปค๋จธ์Šค ๋ฐ์ดํ„ฐ๋Š” BE MySQL โ†’ AI Postgres ๋‹จ๋ฐฉํ–ฅ ๋ณต์ œ๋กœ๋งŒ ๋“ค์–ด์˜ค๊ณ (v_* ์‚ฌ๋ณธ, ์ฝ๊ธฐ ์ „์šฉ), AI๊ฐ€ ์“ฐ๋Š” ๊ฒƒ์€ book_embeddingsยทtaste_profileยทidempotency_records ์…‹๋ฟ์ด๋‹ค.
  • ์ƒ์„ธ: ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ๋ชจ๋“ˆํ™”

๊ธฐ์ˆ  ์Šคํƒ

๋ถ„๋ฅ˜ ๊ธฐ์ˆ 
์–ธ์–ด Python 3.12 (uv๋กœ ๊ด€๋ฆฌ)
์„œ๋น™ FastAPI + uvicorn
์ž„๋ฒ ๋”ฉ multilingual-e5-small (384์ฐจ์›), ์ž์ฒด ์„œ๋น™ ยท CPU
LLM ยท VLM ์™ธ๋ถ€ API (๊ฒŒ์ดํŠธ์›จ์ด ์–ด๋Œ‘ํ„ฐ ๋’ค)
๋ฒกํ„ฐ ๊ฒ€์ƒ‰ PostgreSQL 17 + pgvector (HNSW)
ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ tsvector + pg_trgm
์นดํƒˆ๋กœ๊ทธ ๋ฐ์ดํ„ฐ ๊ตญ๋ฆฝ์ค‘์•™๋„์„œ๊ด€ ์„œ์ง€ API + ๋„์„œ๊ด€์ •๋ณด๋‚˜๋ฃจ

๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ

๋ฌธ์„œ ์–ธ์ œ ๋ณด๋‚˜
๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ… ํ•ฉ๋ฅ˜ํ•  ๋•Œ ํ•œ ๋ฒˆ. ๋”ฐ๋ผ ํ•˜๋ฉด /health๊นŒ์ง€ ๋œฌ๋‹ค
๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ ๋งค์ผ. ๋ธŒ๋žœ์น˜ยท์ปค๋ฐ‹ยทPRยท๋ฆฌ๋ทฐยท๋จธ์ง€ ์‹ค์ œ ์ˆœ์„œ

์ปจ๋ฒค์…˜ ๋ฃฐ

๋ธŒ๋žœ์น˜ยท์ปค๋ฐ‹ยทPRยท๋จธ์ง€ ๊ทœ์น™์€ ํŒ€ ๊ณตํ†ต ๋ฌธ์„œ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

โ†’ ํŒ€ ์ปจ๋ฒค์…˜

์š”์•ฝํ•˜๋ฉด ์ด๋ ‡๋‹ค.

ํ•ญ๋ชฉ ๊ทœ์น™
๋ธŒ๋žœ์น˜ `feature
์ปค๋ฐ‹ <type>: <summary> ยท ๋งˆ์นจํ‘œ ์—†์Œ ยท ์ €์žฅ์†Œ ์ด๋ฆ„์„ scope๋กœ ์“ฐ์ง€ ์•Š์Œ
PR ์Šน์ธ 1๋ช… ํ•„์ˆ˜ ยท ์ž๊ฐ€ ์Šน์ธ ๋ถˆ๊ฐ€ ยท 400์ค„ ๊ถŒ์žฅ
๋จธ์ง€ Squash Merge๋งŒ ยท main ์ง์ ‘ push ๊ธˆ์ง€

์ฝ”๋“œ ์Šคํƒ€์ผ (Python)

ํŒ€ ๊ณตํ†ต ๋ฌธ์„œ์—๋Š” JavaยทJS ๊ทœ์น™๋งŒ ์žˆ์–ด AI ํŒŒํŠธ ๊ทœ์น™์„ ์—ฌ๊ธฐ์— ๋‘”๋‹ค.

๋Œ€์ƒ ๊ทœ์น™ ์˜ˆ์‹œ
ํ•จ์ˆ˜ยท๋ณ€์ˆ˜ snake_case check_database
ํด๋ž˜์Šค PascalCase Settings
์ƒ์ˆ˜ UPPER_SNAKE_CASE MAX_BATCH_SIZE
๋ชจ๋“ˆยทํŒŒ์ผ snake_case book_embedding.py
๋‚ด๋ถ€ ์ „์šฉ ์•ž์— _ _pool
  • ํฌ๋งคํ„ฐยท๋ฆฐํ„ฐ๋Š” ruff๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค. CI์˜ Lint ๋‹จ๊ณ„๊ฐ€ ์ด๊ฒƒ์œผ๋กœ ํŒ์ •ํ•œ๋‹ค
  • ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜์— ํƒ€์ž… ํžŒํŠธ๋ฅผ ๋ถ™์ธ๋‹ค. pydantic์€ ์ด ํƒ€์ž…์œผ๋กœ ์‹ค์ œ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค
  • ์™ธ๋ถ€ I/O(DBยทHTTP)๋ฅผ ํ•˜๋Š” ํ•จ์ˆ˜๋Š” async def๋กœ ์“ด๋‹ค
  • ์‹œ๊ฐ์€ ํ•ญ์ƒ aware datetime์„ ์“ด๋‹ค. datetime.now()(naive)๋Š” ์“ฐ์ง€ ์•Š๋Š”๋‹ค

AI ํŒŒํŠธ ์ถ”๊ฐ€ ๊ทœ์น™

  • ๋ชจ๋ธยทํ”„๋กฌํ”„ํŠธ๋ฅผ ๋ฐ”๊พธ๋Š” PR์—๋Š” Provider, Model ID, Prompt Version, ๊ณ ์ • Dataset ๊ฒ€์ฆ ๊ฒฐ๊ณผ, ์‘๋‹ต ์‹œ๊ฐ„ยท๋น„์šฉ ๋ณ€ํ™”๋ฅผ ์ ๋Š”๋‹ค
  • ๋ฒกํ„ฐ ์ฐจ์›์ด ๋ฐ”๋€Œ๋Š” ๋ณ€๊ฒฝ์€ book_embeddingsยทtaste_profile ์ „๋Ÿ‰ ์žฌ์ƒ์„ฑ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ๋‹จ๋… ๋ฐฐํฌ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค
  • ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์€ ๋ฐ˜๋“œ์‹œ db/migrations/ ํŒŒ์ผ๋กœ ๋‚จ๊ธด๋‹ค. ์šด์˜ DB ์ˆ˜๋™ DDL ๊ธˆ์ง€

ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

์‹ค์ œ๋กœ ๋ง‰ํ˜”๋‹ค๊ฐ€ ํ‘ผ ๊ธฐ๋ก. ๋‚ ์งœ๋ณ„๋กœ ์Œ“๋Š”๋‹ค.

  • ๊ฒช์€ ์—๋Ÿฌ๋Š” AI ์ €์žฅ์†Œ docs/trouble/YYYY-MM-DD.md์— ์ •๋ฆฌํ•œ๋‹ค
  • ํŒ€ ์ „์ฒด๊ฐ€ ์•Œ์•„์•ผ ํ•  ๊ฒƒ๋งŒ ์—ฌ๊ธฐ๋กœ ์˜ฌ๋ฆฐ๋‹ค

์„ค๊ณ„ ๊ณผ์ œ ๋ฌธ์„œ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ