Spaces:
Running
Running
| # 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์ ํ์ฉํ๋ ๋ฐฉํฅ์ด ์ ํฉํฉ๋๋ค. | |