cert-study-app / docs /04_database.md
github-actions
Sync from GitHub d2682fe6d3fcffe93aa302c286320962009f6436
9381502
|
Raw
History Blame Contribute Delete
4.52 kB

04. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ

๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐฉ์‹

์ด ํ”„๋กœ์ ํŠธ๋Š” PostgreSQL๊ณผ Chroma๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‘ ์ €์žฅ์†Œ๋Š” ๋ชฉ์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ €์žฅ์†Œ ์—ญํ• 
PostgreSQL ๋ฌธ์ œ, ์ •๋‹ต, ํ•ด์„ค, ํ’€์ด ๊ธฐ๋ก์ฒ˜๋Ÿผ ์ •ํ™•ํžˆ ๋ณด๊ด€ํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ
Chroma ์œ ์‚ฌ ๋ฌธ์ œ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ ์ €์žฅ

PostgreSQL์„ ์“ฐ๋Š” ์ด์œ 

PostgreSQL์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. ์ •ํ•ด์ง„ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์กฐํšŒํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์•„๋ž˜ ๋ฐ์ดํ„ฐ๋ฅผ PostgreSQL์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฌธ์ œ ๋ณธ๋ฌธ
  • ๋ณด๊ธฐ
  • ์ •๋‹ต
  • ํ•ด์„ค
  • ๋ฌธ์ œ ์œ ํ˜•
  • ์‹œํ—˜๋ช… ๋˜๋Š” ์ถœ์ฒ˜
  • ํ’€์ด ๊ธฐ๋ก
  • ๊ฐœ๋… ์ •๋ฆฌ
  • PDF ์ฒ˜๋ฆฌ ์ž‘์—… ์ƒํƒœ

๋ฌธ์ œํ’€์ด ์›น์—์„œ๋Š” โ€œ์ •๋‹ต์ด ๋ฌด์—‡์ธ์ง€โ€, โ€œ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ‹€๋ ธ๋Š”์ง€โ€ ๊ฐ™์€ ์ •๋ณด๊ฐ€ ์ •ํ™•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฐ์ดํ„ฐ๋Š” Chroma๋ณด๋‹ค PostgreSQL์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ํ…Œ์ด๋ธ”

ํ˜„์žฌ ๋ชจ๋ธ์€ cert_study_app/models.py์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

questions

๋ฌธ์ œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํ•ต์‹ฌ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ์ปฌ๋Ÿผ:

  • stem: ๋ฌธ์ œ ๋ณธ๋ฌธ
  • answer: ์ •๋‹ต
  • explanation: ํ•ด์„ค
  • question_type: ๋ฌธ์ œ ์œ ํ˜•
  • question_number: ๋ฌธ์ œ ๋ฒˆํ˜ธ
  • source: ์‹œํ—˜๋ช… ๋˜๋Š” ํŒŒ์ผ ์ถœ์ฒ˜
  • raw_text: ์›๋ณธ ํŒŒ์‹ฑ ํ…์ŠคํŠธ
  • options_json: ๋ณด๊ธฐ ๋ฐ์ดํ„ฐ
  • quality_score: ํŒŒ์‹ฑ ํ’ˆ์งˆ ์ ์ˆ˜
  • quality_status: ํŒŒ์‹ฑ ํ’ˆ์งˆ ์ƒํƒœ
  • chunk_key: ์ฒญํ‚น ์‹๋ณ„์ž

PDF ํŒŒ์‹ฑ ๊ฒฐ๊ณผ๊ฐ€ ๋ฌธ์ œ ๋‹จ์œ„๋กœ ์ •๋ฆฌ๋˜๋ฉด ์ด ํ…Œ์ด๋ธ”์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

attempts

์‚ฌ์šฉ์ž์˜ ํ’€์ด ๊ธฐ๋ก์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์ปฌ๋Ÿผ:

  • user_id: ์‚ฌ์šฉ์ž ์‹๋ณ„์ž
  • question_id: ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋Š”์ง€
  • chosen: ์‚ฌ์šฉ์ž๊ฐ€ ๊ณ ๋ฅธ ๋‹ต
  • correct: ์ •๋‹ต ์—ฌ๋ถ€
  • note_type: ์˜ค๋‹ต๋…ธํŠธ ๋“ฑ ๋ณต์Šต ์ƒํƒœ

ํ˜„์žฌ๋Š” ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์ด๋ฏ€๋กœ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ํ๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

concept_notes

๊ฐœ๋… ์ •๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์ปฌ๋Ÿผ:

  • concept_name: ๊ฐœ๋… ์ด๋ฆ„
  • summary: ๊ฐœ๋… ์š”์•ฝ
  • exam_point: ์‹œํ—˜์—์„œ ์ค‘์š”ํ•œ ํฌ์ธํŠธ
  • trap_point: ํ—ท๊ฐˆ๋ฆฌ๊ธฐ ์‰ฌ์šด ํฌ์ธํŠธ
  • keywords: ๊ด€๋ จ ํ‚ค์›Œ๋“œ
  • source_question_id: ์–ด๋–ค ๋ฌธ์ œ์—์„œ ๋‚˜์˜จ ๊ฐœ๋…์ธ์ง€

ingestion_jobs

PDF ์ฒ˜๋ฆฌ ์ž‘์—… ์ƒํƒœ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์ปฌ๋Ÿผ:

  • exam_name: ์‹œํ—˜๋ช…
  • pdf_path: PDF ๊ฒฝ๋กœ
  • status: ์ž‘์—… ์ƒํƒœ
  • stage: ํ˜„์žฌ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„
  • current, total: ์ง„ํ–‰๋ฅ  ๊ณ„์‚ฐ์šฉ ๊ฐ’
  • inserted: ์ €์žฅ๋œ ๋ฌธ์ œ ์ˆ˜
  • quality_score: ํ’ˆ์งˆ ์ ์ˆ˜
  • quality_report_json: ํ’ˆ์งˆ ๋ฆฌํฌํŠธ ๊ฒฝ๋กœ
  • quality_gate_json: ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ ๊ฒฐ๊ณผ ๊ฒฝ๋กœ
  • error_message: ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€

์ด ํ…Œ์ด๋ธ” ๋•๋ถ„์— PDF ์ฒ˜๋ฆฌ ํ˜„ํ™ฉ ํ™”๋ฉด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

azure_docs_syncs

์™ธ๋ถ€ ๋ฌธ์„œ ์ƒ‰์ธ ์ƒํƒœ๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•œ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ์ปฌ๋Ÿผ:

  • embedding_model
  • status
  • urls_checked
  • documents_indexed
  • chunks_indexed

Chroma๋ฅผ ์“ฐ๋Š” ์ด์œ 

Chroma๋Š” ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. ํ…์ŠคํŠธ๋ฅผ ์ˆซ์ž ๋ฒกํ„ฐ๋กœ ๋ฐ”๊พผ ๋’ค, ์˜๋ฏธ๊ฐ€ ๋น„์Šทํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ์žˆ์„ ๋•Œ, Chroma๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ˜„์žฌ ๋ฌธ์ œ์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ ์ฐพ๊ธฐ
  • ๊ฐ™์€ ๊ฐœ๋…์„ ๋ฌป๋Š” ๋ฌธ์ œ ์ฐพ๊ธฐ
  • ๊ณต์‹ ๋ฌธ์„œ๋‚˜ ์„ค๋ช… ์ž๋ฃŒ์—์„œ ๊ด€๋ จ ๋‚ด์šฉ ์ฐพ๊ธฐ

PostgreSQL๊ณผ Chroma๋ฅผ ํ•จ๊ป˜ ์“ฐ๋Š” ์ด์œ 

PostgreSQL์€ ์ •ํ™•ํ•œ ์ €์žฅ๊ณผ ์กฐํšŒ์— ๊ฐ•ํ•˜๊ณ , Chroma๋Š” ์˜๋ฏธ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์— ๊ฐ•ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‘ ์ €์žฅ์†Œ๋ฅผ ์ด๋ ‡๊ฒŒ ๋‚˜๋ˆ  ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • PostgreSQL: ์›๋ณธ ๋ฐ์ดํ„ฐ์˜ ๊ธฐ์ค€ ์ €์žฅ์†Œ
  • Chroma: ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ๋ณด์กฐ ์ƒ‰์ธ

์ฆ‰, Chroma๋Š” PostgreSQL์„ ๋Œ€์ฒดํ•˜๋Š” ์ €์žฅ์†Œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Chroma ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋Š” ๋‹ค์‹œ PostgreSQL์˜ ๋ฌธ์ œ ID์™€ ์—ฐ๊ฒฐ๋˜์–ด ์‹ค์ œ ๋ฌธ์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์ด ์ข‹์Šต๋‹ˆ๋‹ค.

SQLite์— ๋Œ€ํ•œ ์ •๋ฆฌ

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋Š” PostgreSQL ์‚ฌ์šฉ์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

SQLite๋Š” ๊ฐœ๋ฐœ ์ดˆ๊ธฐ์— ๊ฐ„๋‹จํžˆ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์ข‹์ง€๋งŒ, Docker Compose์™€ Airflow๊นŒ์ง€ ํ•จ๊ป˜ ์“ฐ๋Š” ๊ตฌ์กฐ์—์„œ๋Š” PostgreSQL์„ ๊ธฐ์ค€์œผ๋กœ ๋งž์ถ”๋Š” ํŽธ์ด ๋” ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ CERT_STUDY_DB_FALLBACK=1๋กœ SQLite fallback์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์ด ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.