cert-study-app / docs /07_troubleshooting.md
Kentlo's picture
Sync from GitHub b098d17dbed1a6386c212d28b4bfa6138ad59d75
88c7275 verified
|
Raw
History Blame Contribute Delete
9.24 kB
# 07. ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
์ด ๋ฌธ์„œ๋Š” ๊ฐœ๋ฐœ ์ค‘ ์ž์ฃผ ๋งŒ๋‚  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์™€ ํ™•์ธ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
## Docker๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์„ ๋•Œ
### ์ฆ์ƒ
`docker compose up --build` ์‹คํ–‰ ์‹œ Docker daemon ๊ด€๋ จ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
### ํ™•์ธํ•  ๊ฒƒ
Docker Desktop์ด ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
```bash
docker info
```
### ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
- Docker Desktop์„ ์‹คํ–‰ํ•œ๋‹ค.
- Docker๊ฐ€ ์™„์ „ํžˆ ์‹œ์ž‘๋œ ๋’ค ๋‹ค์‹œ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.
- ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ผฌ์˜€์œผ๋ฉด `docker compose down` ํ›„ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค.
## Streamlit ์•ฑ์— ์ ‘์†๋˜์ง€ ์•Š์„ ๋•Œ
### ์ฆ์ƒ
`http://localhost:8501`์— ์ ‘์†ํ•ด๋„ ํ™”๋ฉด์ด ์—ด๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
### ํ™•์ธํ•  ๊ฒƒ
์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
```bash
docker compose ps
```
๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
```bash
docker compose logs cert-study-app
```
### ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
- ์•ฑ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
- 8501 ํฌํŠธ๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉ ์ค‘์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
- ํ•„์š”ํ•˜๋ฉด `http://127.0.0.1:8501`๋กœ๋„ ์ ‘์†ํ•ด ๋ณธ๋‹ค.
๋กœ์ปฌ ๊ฐ€์ƒํ™˜๊ฒฝ์˜ `streamlit` ์‹คํ–‰ ํŒŒ์ผ์ด ์˜ˆ์ „ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์•„๋ž˜์ฒ˜๋Ÿผ Python ๋ชจ๋“ˆ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
```bash
python -m streamlit run streamlit_app.py
```
## PostgreSQL ์—ฐ๊ฒฐ ์˜ค๋ฅ˜
### ์ฆ์ƒ
์•ฑ ์‹คํ–‰ ์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
### ํ™•์ธํ•  ๊ฒƒ
PostgreSQL ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
```bash
docker compose ps postgres
```
๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
```bash
docker compose logs postgres
```
### ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
- `postgres` ์ปจํ…Œ์ด๋„ˆ๊ฐ€ healthy ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
- `DATABASE_URL`์ด Docker Compose ์„ค์ •๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
- ๋กœ์ปฌ์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•  ๋•Œ๋Š” host๊ฐ€ `postgres`๊ฐ€ ์•„๋‹ˆ๋ผ `localhost`์—ฌ์•ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
## SQLite fallback ๊ด€๋ จ ํ˜ผ๋™
### ์ฆ์ƒ
PostgreSQL์„ ์“ฐ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ SQLite ํŒŒ์ผ์ด ์ƒ๊ธฐ๊ฑฐ๋‚˜, ๋ฐ˜๋Œ€๋กœ SQLite fallback์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
### ์„ค๋ช…
ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋Š” PostgreSQL ์‚ฌ์šฉ์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. SQLite๋Š” ๊ฐœ๋ฐœ ์ค‘ ์ž„์‹œ fallback ์šฉ๋„์ž…๋‹ˆ๋‹ค.
### ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
PostgreSQL์„ ์‚ฌ์šฉํ•  ๋•Œ:
```env
DATABASE_URL=postgresql+pg8000://cert_study:cert_study@postgres:5432/cert_study
```
SQLite fallback์„ ๊ผญ ํ—ˆ์šฉํ•ด์•ผ ํ•  ๋•Œ:
```env
CERT_STUDY_DB_FALLBACK=1
```
์šด์˜ ๋˜๋Š” ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š” PostgreSQL์„ ๊ธฐ์ค€์œผ๋กœ ๋งž์ถ”๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
### `attempt to write a readonly database` ์˜ค๋ฅ˜๊ฐ€ ๋‚  ๋•Œ
๊ธฐ์กด SQLite ํŒŒ์ผ ๊ถŒํ•œ ๋•Œ๋ฌธ์— seed ๊ฐฑ์‹ ์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋น ๋ฅด๊ฒŒ ํ™”๋ฉด๋งŒ ํ™•์ธํ•˜๋ ค๋ฉด ์ƒˆ ์ž„์‹œ DB๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
```bash
DATABASE_URL=sqlite:////tmp/cert-study-local-check.db \
python -m streamlit run streamlit_app.py
```
๊ธฐ์กด DB๋ฅผ ๊ณ„์† ์“ฐ๋ ค๋ฉด `data/questions.db` ํŒŒ์ผ ๊ถŒํ•œ๊ณผ ์†Œ์œ ์ž๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
## Airflow ํ™”๋ฉด์— ์ ‘์†๋˜์ง€ ์•Š์„ ๋•Œ
### ์ฆ์ƒ
`http://localhost:8080`์— ์ ‘์†ํ•ด๋„ Airflow ํ™”๋ฉด์ด ์—ด๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
### ํ™•์ธํ•  ๊ฒƒ
```bash
docker compose ps airflow-webserver airflow-scheduler
```
```bash
docker compose logs airflow-webserver
```
### ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
- `airflow-init`์ด ๋จผ์ € ์‹คํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
- 8080 ํฌํŠธ๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉ ์ค‘์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
- Airflow DB ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š”์ง€ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•œ๋‹ค.
## PDF ์ฒ˜๋ฆฌ ์ž‘์—…์ด ๋ฉˆ์ถ˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ๋•Œ
### ์ฆ์ƒ
PDF ์—…๋กœ๋“œ ํ›„ ์ฒ˜๋ฆฌ ํ˜„ํ™ฉ์ด ์˜ค๋ž˜ ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
### ํ™•์ธํ•  ๊ฒƒ
- Airflow DAG๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
- `ingestion_jobs`์˜ `stage`, `message`, `current`, `total` ๊ฐ’์ด ๋ฐ”๋€Œ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
- Airflow ๋กœ๊ทธ์—์„œ ์‹คํŒจ ๋‹จ๊ณ„๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
### ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
- ํฐ PDF๋Š” ํŒŒ์‹ฑ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
- LLM ๋˜๋Š” ์ด๋ฏธ์ง€ ๋ถ„์„์„ ์ผœ๋ฉด ๋” ๋А๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค.
- ์‹คํŒจํ•œ ๊ฒฝ์šฐ ํ•ด๋‹น ์ž‘์—…์˜ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋จผ์ € ํ™•์ธํ•œ๋‹ค.
## ๋ฌธ์ œ ํŒŒ์‹ฑ ๊ฒฐ๊ณผ๊ฐ€ ์ด์ƒํ•  ๋•Œ
### ์ฆ์ƒ
๋ฌธ์ œ ๋ณธ๋ฌธ์ด ์ž˜๋ฆฌ๊ฑฐ๋‚˜, ๋ณด๊ธฐ๊ฐ€ ๋น ์ง€๊ฑฐ๋‚˜, ์ •๋‹ต์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
### ํ™•์ธํ•  ๊ฒƒ
- ํ’ˆ์งˆ ๋ฆฌํฌํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
- `quality_score`, `quality_status`, `quality_issues` ๊ฐ’์„ ํ™•์ธํ•œ๋‹ค.
- ์›๋ณธ PDF ํ…์ŠคํŠธ ์ถ”์ถœ์ด ๊ฐ€๋Šฅํ•œ PDF์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
### ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
- ํŒŒ์‹ฑ ๊ทœ์น™์„ ๊ฐœ์„ ํ•œ๋‹ค.
- OCR์ด ํ•„์š”ํ•œ PDF์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
- ๋ฌธ์ œ ๋ฒˆํ˜ธ ํŒจํ„ด๊ณผ ๋ณด๊ธฐ ํŒจํ„ด์„ ๋” ๋ช…ํ™•ํžˆ ์ฒ˜๋ฆฌํ•œ๋‹ค.
- ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ LLM์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋ณด๋‹ค, ์‹คํŒจ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๋ฌธ์ œ๋งŒ ๋ณด์ •ํ•˜๋Š” ๋ฐฉํ–ฅ์ด ์ข‹๋‹ค.
## ๊ณตํ†ต ์ง€๋ฌธ์ด ๋ณด์ด์ง€ ์•Š์„ ๋•Œ
### ์ฆ์ƒ
์ผ€์ด์Šค ์Šคํ„ฐ๋”” ๋ฌธ์ œ์ธ๋ฐ `๊ณตํ†ต ์ง€๋ฌธ ๋ณด๊ธฐ`๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
### ํ™•์ธํ•  ๊ฒƒ
- `questions_seed.json`์— `parent_stem`์ด ๋“ค์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
- ์•ฑ์ด ์˜ค๋ž˜๋œ DB๋ฅผ ๋ณด๊ณ  ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธํ•œ๋‹ค.
- seed refresh๊ฐ€ DB์— ์“ธ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
### ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
- Space ๋˜๋Š” ๋กœ์ปฌ ์•ฑ์„ ์žฌ์‹œ์ž‘ํ•œ๋‹ค.
- ๋กœ์ปฌ์—์„œ๋Š” ์ž„์‹œ SQLite DB๋กœ ๋‹ค์‹œ ์‹คํ–‰ํ•ด seed ์ž์ฒด๊ฐ€ ์ •์ƒ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
- ๊ธฐ์กด DB๊ฐ€ ์ฝ๊ธฐ ์ „์šฉ์ด๋ฉด ๊ถŒํ•œ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ƒˆ DB๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
## Yes/No ๋ฌธ์ œ๊ฐ€ ๊ฐ๊ด€์‹์ฒ˜๋Ÿผ ๋ณด์ผ ๋•Œ
### ์ฆ์ƒ
`๋‹ค์Œ ๊ฐ ์ง„์ˆ ์— ๋Œ€ํ•ด ์˜ˆ/์•„๋‹ˆ์˜ค๋ฅผ ์„ ํƒ`ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ A/B/C ๋ณด๊ธฐ์ฒ˜๋Ÿผ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
### ์„ค๋ช…
Yes/No ์ง„์ˆ ํ˜• ๋ฌธ์ œ๋Š” ์ผ๋ฐ˜ ๊ฐ๊ด€์‹๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ง„์ˆ ๋ณ„ `์˜ˆ / ์•„๋‹ˆ์˜ค` ์ž…๋ ฅ UI๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
### ํ™•์ธํ•  ๊ฒƒ
- `question_type`์ด `Hotspot (True/False)` ๋˜๋Š” ์œ ์‚ฌํ•œ ๊ฐ’์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
- ์ •๋‹ต์ด `Y,N,Y` ๋˜๋Š” `[{key, value}]` ํ˜•ํƒœ๋กœ ์ •๊ทœํ™”๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
- `1-A / 1-B / 2-A / 2-B` ํ˜•์‹์€ ํ•ญ๋ชฉ๋ณ„ ์„ ํƒ UI๋กœ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•œ๋‹ค.
### ํ™•์ธ ๋ช…๋ น
๋ฌธ์ œ ์œ ํ˜• alias์™€ ์ •๋‹ต ์ •๊ทœํ™” ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•œ๋‹ค.
```bash
python -m pytest tests/test_answer_normalizer.py tests/test_question_type_metadata_service.py
```
### ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
- ์ƒˆ ๋ฌธ์ œ ์œ ํ˜• ๋ฌธ์ž์—ด์ด ์ถ”๊ฐ€๋˜๋ฉด `question_type_metadata_service.py`์˜ alias์— ๋จผ์ € ๋“ฑ๋กํ•œ๋‹ค.
- ์ฑ„์ ์ด ์ด์ƒํ•˜๋ฉด ํ™”๋ฉด ์ฝ”๋“œ๋ณด๋‹ค `answer_normalizer.py`์—์„œ `chosen`๊ณผ `answer`๊ฐ€ ๊ฐ™์€ ๊ธฐ์ค€์œผ๋กœ ์ •๊ทœํ™”๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
- Yes/No๋Š” ์ผ๋ฐ˜ ๊ฐ๊ด€์‹ A/B/C๊ฐ€ ์•„๋‹ˆ๋ผ `Y,N,Y`์ฒ˜๋Ÿผ ํ–‰๋ณ„ ๋‹ต์•ˆ์œผ๋กœ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ์ค€์ด๋‹ค.
## ๋ชจ๋ฐ”์ผ ํ™”๋ฉด์ด ๋ณต์žกํ•˜๊ฒŒ ๋ณด์ผ ๋•Œ
### ์ฆ์ƒ
ํœด๋Œ€ํฐ์—์„œ ๋ฉ”๋‰ด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๊ฑฐ๋‚˜, ๋‹ต์•ˆ ์„ ํƒ ์˜์—ญ์ด ์ž‘์•„ ๋ณด์ž…๋‹ˆ๋‹ค.
### ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
- ํ™ˆ ํ™”๋ฉด์€ ๋ฌธ์ œํ’€์ด, ์˜ค๋‹ต/๋ณต์Šต, ๊ฐœ๋… ์ •๋ฆฌ ๊ฐ™์€ ํ•™์Šต ๊ธฐ๋Šฅ์„ ๋จผ์ € ๋ณด์—ฌ์ค€๋‹ค.
- PDF ์—…๋กœ๋“œ, ์ฒ˜๋ฆฌ ํ˜„ํ™ฉ, AI ์ƒ‰์ธ์€ `์—…๋กœ๋“œ/๊ด€๋ฆฌ` ์˜์—ญ์œผ๋กœ ๋ฌถ๋Š”๋‹ค.
- ๋‹ต์•ˆ ์„ ํƒ UI๋Š” ์ตœ์†Œ 44px ์ด์ƒ์˜ ํ„ฐ์น˜ ์˜์—ญ์„ ์œ ์ง€ํ•œ๋‹ค.
- ๋ฌธ์ œ ์œ ํ˜•๋ณ„๋กœ radio, checkbox, selectbox, Yes/No matrix๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
## Chroma ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์ด์ƒํ•  ๋•Œ
### ์ฆ์ƒ
์œ ์‚ฌ ๋ฌธ์ œ๊ฐ€ ์ž˜ ๋‚˜์˜ค์ง€ ์•Š๊ฑฐ๋‚˜, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
### ํ™•์ธํ•  ๊ฒƒ
- ๋ฌธ์ œ๊ฐ€ Chroma์— ์ƒ‰์ธ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
- ์‚ฌ์šฉ ์ค‘์ธ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์ด ์ƒ‰์ธํ•  ๋•Œ์˜ ๋ชจ๋ธ๊ณผ ๊ฐ™์€์ง€ ํ™•์ธํ•œ๋‹ค.
- `chroma_db` ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์œ ์ง€๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
### ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
- ๊ฐ™์€ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ๋กœ ๋‹ค์‹œ ์ƒ‰์ธํ•œ๋‹ค.
- ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ๋ณ„๋กœ ์ปฌ๋ ‰์…˜์„ ๋ถ„๋ฆฌํ•œ๋‹ค.
- PostgreSQL์—๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”๋ฐ Chroma์—๋งŒ ์—†๋‹ค๋ฉด ์ƒ‰์ธ ์ž‘์—…์„ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค.
## AI ์งˆ๋ฌธ ๊ธฐ๋Šฅ์—์„œ ํ™”๋ฉด์ด ๊นจ์งˆ ๋•Œ (2026-07-04 ์ถ”๊ฐ€)
### ์ฆ์ƒ
๋ฌธ์ œ ํ’€์ด ์ค‘ "์งˆ๋ฌธํ•˜๊ธฐ" ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํŽ˜์ด์ง€ ์ „์ฒด๊ฐ€ ์—๋Ÿฌ๋กœ ๊นจ์ง‘๋‹ˆ๋‹ค.
### ์›์ธ๊ณผ ํ™•์ธ
**โ‘  ๋ฌธ์ œ ์ƒ‰์ธ(ChromaDB)์ด ๋น„์–ด ์žˆ์„ ๋•Œ**
ํ•œ ๋ฒˆ๋„ AI ์ƒ‰์ธ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๊ฒ€์ƒ‰ํ•˜๋ฉด `n_results > n_documents` ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.
**โ‘ก Ollama๊ฐ€ ์‘๋‹ตํ•˜์ง€ ์•Š์„ ๋•Œ**
๋ชจ๋ธ ๋ฏธ์„ค์น˜ ๋˜๋Š” ์„œ๋ฒ„ ์ค‘์ง€ ์ƒํƒœ์—์„œ ์ŠคํŠธ๋ฆฌ๋ฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.
```bash
curl http://localhost:11434/api/tags
```
### ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
- AI ์ƒ‰์ธ ๋ฉ”๋‰ด์—์„œ ๋จผ์ € ์ƒ‰์ธ์„ ์‹คํ–‰ํ•œ๋‹ค.
- Ollama ์‹คํ–‰ ์ƒํƒœ์™€ ๋ชจ๋ธ ์„ค์น˜๋ฅผ ํ™•์ธํ•œ๋‹ค.
- ์•ฑ์ด ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋ฉด ํ™”๋ฉด์—์„œ URLยท๋ชจ๋ธ๋ช… ํžŒํŠธ๋ฅผ ํ™•์ธํ•œ๋‹ค.
> 2026-07-04 ์ˆ˜์ •: ์ด์ œ ๋นˆ ์ปฌ๋ ‰์…˜์ด๊ฑฐ๋‚˜ Ollama ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋„ ํŽ˜์ด์ง€๊ฐ€ ๊นจ์ง€์ง€ ์•Š๊ณ  ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
## Ollama ๋˜๋Š” LLM ๊ด€๋ จ ์˜ค๋ฅ˜
### ์ฆ์ƒ
LLM ํŒŒ์‹ฑ, ์„ค๋ช… ์ƒ์„ฑ, ์ด๋ฏธ์ง€ ๋ถ„์„ ๋‹จ๊ณ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
### ํ™•์ธํ•  ๊ฒƒ
```bash
ollama list
```
### ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
- ํ•„์š”ํ•œ ๋ชจ๋ธ์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
- Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ ‘๊ทผํ•˜๋Š” `OLLAMA_BASE_URL`์ด ๋งž๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
- LLM์„ ๋„๊ณ  ๊ทœ์น™ ๊ธฐ๋ฐ˜ ํŒŒ์‹ฑ๋งŒ์œผ๋กœ ๋จผ์ € ์‹คํ–‰ํ•ด ๋ณธ๋‹ค.
## Git์— ์˜ฌ๋ฆฌ๋ฉด ์•ˆ ๋˜๋Š” ๋ฐ์ดํ„ฐ
๋‹ค์Œ ๋ฐ์ดํ„ฐ๋Š” ์‹คํ–‰ ์ค‘ ์ƒ์„ฑ๋˜๋Š” ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ ๋ณดํ†ต Git์— ์˜ฌ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
- ์—…๋กœ๋“œ PDF
- ํŒŒ์‹ฑ ๊ฒฐ๊ณผ JSON
- Chroma ์ธ๋ฑ์Šค
- PostgreSQL ๋ฐ์ดํ„ฐ ๋ณผ๋ฅจ
- Airflow ๋กœ๊ทธ
- Airflow DB
- ๊ฐœ์ธ `.env` ํŒŒ์ผ
GitHub์—๋Š” ์ฝ”๋“œ์™€ ๋ฌธ์„œ, ์„ค์ • ์˜ˆ์‹œ ์ค‘์‹ฌ์œผ๋กœ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.