Spaces:
Running
Running
| # 05. ๋ฐฐํฌ ๊ณํ | |
| ## ํ์ฌ ์คํ ๋ฐฉ์ | |
| ํ์ฌ ํ๋ก์ ํธ๋ Docker Compose๋ก ๋ก์ปฌ ์คํ ํ๊ฒฝ์ ๋ง์ถ๋ ๊ตฌ์กฐ์ ๋๋ค. | |
| ์ฃผ์ ์๋น์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. | |
| - `postgres`: PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค | |
| - `cert-study-app`: Streamlit ์น ์ฑ | |
| - `airflow-init`: Airflow ์ด๊ธฐํ | |
| - `airflow-webserver`: Airflow ์น ํ๋ฉด | |
| - `airflow-scheduler`: Airflow ์์ ์ค์ผ์ค๋ฌ | |
| ## ๋ก์ปฌ ์คํ | |
| ```bash | |
| cp .env.example .env | |
| docker compose up --build | |
| ``` | |
| ์ ์ ์ฃผ์: | |
| - Streamlit ์ฑ: `http://localhost:8501` | |
| - Airflow: `http://localhost:8080` | |
| - PostgreSQL: `localhost:5432` | |
| Streamlit ํ๋ฉด๋ง ๋น ๋ฅด๊ฒ ํ์ธํ ๋๋ Docker ์์ด ์คํํ ์๋ ์์ต๋๋ค. | |
| ```bash | |
| DATABASE_URL=sqlite:////tmp/cert-study-local-check.db \ | |
| python -m streamlit run streamlit_app.py | |
| ``` | |
| ์ด ๋ฐฉ์์ ์์ SQLite DB๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ก์ปฌ ํ๋ฉด ํ์ธ์ ์ ํฉํฉ๋๋ค. ๊ธฐ์กด `data/questions.db` ํ์ผ ๊ถํ์ด ๊ผฌ์๊ฑฐ๋ ์ฝ๊ธฐ ์ ์ฉ ์ํ์ผ ๋๋ ์ DB๋ก ๋ฌธ์ seed ๋์์ ํ์ธํ ์ ์์ต๋๋ค. | |
| ## Docker๋ฅผ ์ฐ๋ ์ด์ | |
| ์ด ํ๋ก์ ํธ๋ Streamlit, PostgreSQL, Airflow, PDF ์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, Chroma ๋ฑ ์ฌ๋ฌ ๊ตฌ์ฑ ์์๋ฅผ ํจ๊ป ์ฌ์ฉํฉ๋๋ค. | |
| ๊ฐ๋ฐ PC์์ ์ง์ ๋ชจ๋ ์ค์นํ๋ฉด ๋ฒ์ ์ถฉ๋์ด ์๊ธฐ๊ธฐ ์ฝ์ต๋๋ค. Docker๋ฅผ ์ฌ์ฉํ๋ฉด ์คํ ํ๊ฒฝ์ ์ฝ๋๋ก ์ ๋ฆฌํ ์ ์๊ณ , ๋ค๋ฅธ PC๋ ์๋ฒ์์๋ ๋น์ทํ ๋ฐฉ์์ผ๋ก ์คํํ ์ ์์ต๋๋ค. | |
| Docker๋ฅผ ์ฐ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. | |
| - ์คํ ํ๊ฒฝ์ ํต์ผํ ์ ์๋ค. | |
| - PostgreSQL๊ณผ Airflow๋ฅผ ํจ๊ป ๋์ฐ๊ธฐ ์ฝ๋ค. | |
| - ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์๋ฒ ํ๊ฒฝ ์ฐจ์ด๋ฅผ ์ค์ผ ์ ์๋ค. | |
| - ๋ฐฐํฌํ ๋ ํ์ํ ๋ช ๋ น์ ๋จ์ํํ ์ ์๋ค. | |
| ## Docker Compose ๋ณผ๋ฅจ | |
| ํ์ฌ Compose์์๋ ๋ฐํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๊ธฐ ์ํด ๋ณผ๋ฅจ๊ณผ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. | |
| ์์: | |
| - `postgres_data`: PostgreSQL ๋ฐ์ดํฐ | |
| - `./data`: ์ ๋ก๋ PDF, ํ์ฑ ๊ฒฐ๊ณผ ๋ฑ ๋ฐํ์ ๋ฐ์ดํฐ | |
| - `./chroma_db`: Chroma ์ธ๋ฑ์ค | |
| - `./airflow_logs`: Airflow ๋ก๊ทธ | |
| - `./airflow_db`: Airflow ๋ฉํ๋ฐ์ดํฐ | |
| ์ด๋ฐ ํ์ผ์ ์คํ ์ค ์์ฑ๋๋ ๋ฐ์ดํฐ์ด๋ฏ๋ก ๋ณดํต Git์ ์ฌ๋ฆฌ์ง ์์ต๋๋ค. | |
| ## Hugging Face Space ๋ฐฐํฌ | |
| Hugging Face Space๋ GitHub Actions๋ฅผ ํตํด ํ์ฌ ํ๋ก์ ํธ ์ค๋ ์ท์ ๋๊ธฐํํฉ๋๋ค. | |
| Space์๋ ์๋ ๋ฐํ์ ๋ฐ์ดํฐ๋ ์ฌ๋ฆฌ์ง ์์ต๋๋ค. | |
| - ์ ๋ก๋ PDF ์๋ณธ | |
| - ๋ก์ปฌ PostgreSQL/SQLite DB | |
| - Chroma ์ธ๋ฑ์ค | |
| - Airflow ๋ก๊ทธ์ ๋ฉํ๋ฐ์ดํฐ | |
| ๋์ `cert_study_app/demo_data/questions_seed.json`๊ณผ `static/question_assets/`๋ฅผ ํฌํจํฉ๋๋ค. ์ฑ ์์ ์ DB๊ฐ ๋น์ด ์๊ฑฐ๋ ๊ธฐ์กด seed๊ฐ ์ค๋๋ ๊ฒฝ์ฐ seed ๊ธฐ์ค์ผ๋ก ๋ฌธ์ ๋ฅผ ์ถ๊ฐ/๊ฐฑ์ ํฉ๋๋ค. | |
| ํ์ฌ seed์๋ 321๋ฌธํญ, ๊ณตํต ์ง๋ฌธ ํฌํจ 36๋ฌธํญ, ์๋ฌธ ์ด๋ฏธ์ง, Yes/No ์ง์ ํ ๋ฌธ์ ๊ตฌ์กฐ๊ฐ ํฌํจ๋ฉ๋๋ค. | |
| seed๋ฅผ ๋ค์ ๋ง๋ค๋ฉด ๊ฒ์ฆ ๋ฆฌํฌํธ๋ ํจ๊ป ์์ฑ๋ฉ๋๋ค. | |
| ```bash | |
| python scripts/export_hf_seed.py | |
| ``` | |
| ์์ฑ ํ์ผ: | |
| - `cert_study_app/demo_data/questions_seed.json` | |
| - `cert_study_app/demo_data/questions_seed.report.json` | |
| ๋ฆฌํฌํธ์์๋ ์ ์ฒด ๋ฌธํญ ์, ๊ณตํต ์ง๋ฌธ ํฌํจ ๋ฌธํญ ์, ์ ํ๋ณ ๊ฐ์, ์ค๋ณต ๋ฒํธ, ์ ๋ต ๋๋ฝ, ์ด๋ฏธ์ง ๋๋ฝ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. | |
| ## ํ๊ฒฝ ๋ณ์ | |
| ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ PostgreSQL์ ์ฌ์ฉํฉ๋๋ค. | |
| ```env | |
| DATABASE_URL=postgresql+pg8000://cert_study:cert_study@postgres:5432/cert_study | |
| ``` | |
| LLM๊ณผ ์๋ฒ ๋ฉ ๊ด๋ จ ํ๊ฒฝ ๋ณ์ ์์: | |
| ```env | |
| CERT_STUDY_LLM_PROVIDER=ollama | |
| OLLAMA_MODEL=qwen2.5:14b | |
| OLLAMA_FAST_MODEL=qwen3.5:9b | |
| OLLAMA_VISUAL_MODEL=qwen3-vl:8b-instruct-q4_K_M | |
| EMBEDDING_MODEL=BAAI/bge-m3 | |
| OLLAMA_BASE_URL=http://host.docker.internal:11434 | |
| ``` | |
| ์ด์ ๋ฐฐํฌ์์๋ ๋น๋ฐ๋ฒํธ์ API ์ ๋ณด๊ฐ ์ฝ๋์ ์ง์ ๋ค์ด๊ฐ์ง ์๋๋ก `.env` ๋๋ ์๋ฒ ๋น๋ฐ๊ฐ ๊ด๋ฆฌ ๋ฐฉ์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. | |
| ์ฒ์ ์คํํ ๋๋ ์์ ํ์ผ์ ๋ณต์ฌํด์ ์์ํฉ๋๋ค. | |
| ```bash | |
| cp .env.example .env | |
| ``` | |
| ์ด์ ํ๊ฒฝ์์๋ ์ต์ํ ์๋ ๊ฐ์ ๊ธฐ๋ณธ๊ฐ์์ ๋ฐ๊พธ๋ ๊ฒ์ด ์ข์ต๋๋ค. | |
| - `POSTGRES_PASSWORD` | |
| - `DATABASE_URL` | |
| - `AIRFLOW_API_PASSWORD` | |
| - `AIRFLOW_ADMIN_PASSWORD` | |
| ## Oracle Cloud Ubuntu์ ๋ฐฐํฌํ๋ ค๋ ์ด์ | |
| ํฅํ ๋ฐฐํฌ ๋์์ Oracle Cloud Ubuntu ์๋ฒ๋ฅผ ๊ณํํ๊ณ ์์ต๋๋ค. | |
| ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. | |
| - ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ์ธ๋ถ์์ ์ ์ ๊ฐ๋ฅํ ํํ๋ก ์ด์ํด ๋ณผ ์ ์๋ค. | |
| - Ubuntu ์๋ฒ๋ Docker ๊ธฐ๋ฐ ๋ฐฐํฌ ์๋ฃ๊ฐ ๋ง์ ํ์ตํ๊ธฐ ์ข๋ค. | |
| - Streamlit, PostgreSQL, Airflow ๊ฐ์ ๊ตฌ์ฑ ์์๋ฅผ ํ ์๋ฒ์์ ์คํํ๊ธฐ ์ฝ๋ค. | |
| - ํฌํธํด๋ฆฌ์ค ํ๋ก์ ํธ๋ก ์ค์ ๋ฐฐํฌ ๊ฒฝํ์ ๋จ๊ธธ ์ ์๋ค. | |
| ## ์์ ๋ฐฐํฌ ํ๋ฆ | |
| 1. Oracle Cloud์์ Ubuntu ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค. | |
| 2. ์๋ฒ์ Docker์ Docker Compose๋ฅผ ์ค์นํ๋ค. | |
| 3. GitHub ์ ์ฅ์๋ฅผ ์๋ฒ์ cloneํ๋ค. | |
| 4. `.env` ํ์ผ์ ์๋ฒ ํ๊ฒฝ์ ๋ง๊ฒ ์์ฑํ๋ค. | |
| 5. `docker compose up -d --build`๋ก ์คํํ๋ค. | |
| 6. ๋ฐฉํ๋ฒฝ๊ณผ ๋ณด์ ๋ชฉ๋ก์์ ํ์ํ ํฌํธ๋ฅผ ์ฐ๋ค. | |
| 7. ์ ์ ์ฃผ์๋ฅผ ํ์ธํ๋ค. | |
| 8. ํ์ํ๋ฉด Nginx์ HTTPS๋ฅผ ์ถ๊ฐํ๋ค. | |
| ## ๋ฐฐํฌ ์ ์ ์ ๋ฆฌํ ๊ฒ | |
| - ์ด์์ฉ ๋น๋ฐ๋ฒํธ๋ฅผ `.env`๋ก ๋ถ๋ฆฌ | |
| - PostgreSQL ๋ฐ์ดํฐ ๋ฐฑ์ ๋ฐฉ์ | |
| - Chroma ์ธ๋ฑ์ค ์ฌ์์ฑ ๋ฐฉ์ | |
| - Airflow ๊ด๋ฆฌ์ ๊ณ์ ์ค์ | |
| - ์ ๋ก๋ ํ์ผ ์ ์ฅ ์์น | |
| - ๋ก๊ทธ ๊ด๋ฆฌ | |
| - HTTPS ์ ์ฉ ์ฌ๋ถ | |
| - `python scripts/check_quality.py` ํต๊ณผ ์ฌ๋ถ | |
| ## ํ์ฌ ์ํ | |
| ํ์ฌ๋ Docker Compose ๊ธฐ๋ฐ ๋ก์ปฌ ์คํ ๊ตฌ์กฐ๊ฐ ์ค์ฌ์ ๋๋ค. Oracle Cloud ๋ฐฐํฌ๋ ํฅํ ์งํํ ๊ณํ์ด๋ฉฐ, ๋ฐฐํฌ ์ ์ ํ๊ฒฝ ๋ณ์, ๋ฐ์ดํฐ ๋ณผ๋ฅจ, ๋ณด์ ์ค์ ์ ๋ ์ ๋ฆฌํด์ผ ํฉ๋๋ค. | |