SOY NV AI
Add PostgreSQL support and update database configuration for data persistence in Hugging Face Spaces
9f9640b
| # Hugging Face Spaces ๋ฐ์ดํฐ ์์์ฑ ํด๊ฒฐ ๋ฐฉ๋ฒ | |
| ## ๋ฌธ์ ์์ธ | |
| Hugging Face Spaces๋ Docker ์ปจํ ์ด๋ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฏ๋ก, **์ปจํ ์ด๋๊ฐ ์ฌ์์๋๊ฑฐ๋ ์ ๋ฐ์ดํธ๋๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋๋ค.** | |
| ํ์ฌ ์ ์ฅ๋๋ ๋ฐ์ดํฐ: | |
| - ๋ฐ์ดํฐ๋ฒ ์ด์ค: `instance/finance_analysis.db` | |
| - ์ ๋ก๋ ํ์ผ: `uploads/` ํด๋ | |
| - ๋ฒกํฐ DB: `vector_db/` ํด๋ | |
| - ๋ก๊ทธ: `logs/` ํด๋ | |
| ## ํด๊ฒฐ ๋ฐฉ๋ฒ | |
| ### ๋ฐฉ๋ฒ 1: ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ (๊ถ์ฅ) | |
| PostgreSQL, MySQL ๋ฑ ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๊ฐ ์๊ตฌ์ ์ผ๋ก ๋ณด์กด๋ฉ๋๋ค. | |
| #### PostgreSQL ์ฌ์ฉ ์์ | |
| 1. **Supabase, Neon, ๋๋ Railway์์ ๋ฌด๋ฃ PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ** | |
| 2. **ํ๊ฒฝ ๋ณ์ ์ค์ ** (Hugging Face Spaces Settings > Repository secrets): | |
| ``` | |
| DATABASE_URL=postgresql://user:password@host:port/database | |
| ``` | |
| 3. **requirements.txt์ PostgreSQL ๋๋ผ์ด๋ฒ ์ถ๊ฐ**: | |
| ``` | |
| psycopg2-binary | |
| ``` | |
| 4. **์ฝ๋ ์์ ** (`app/core/config.py`): | |
| ```python | |
| SQLALCHEMY_DATABASE_URI: str = os.getenv( | |
| 'DATABASE_URL', | |
| f'sqlite:///{PROJECT_ROOT / "instance" / "finance_analysis.db"}' | |
| ) | |
| ``` | |
| ์ด๋ฏธ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก, `DATABASE_URL`๋ง ์ค์ ํ๋ฉด ์๋์ผ๋ก PostgreSQL์ ์ฌ์ฉํฉ๋๋ค. | |
| ### ๋ฐฉ๋ฒ 2: ์ธ๋ถ ์คํ ๋ฆฌ์ง ์ฌ์ฉ (ํ์ผ ์ ์ฅ์ฉ) | |
| ์ ๋ก๋๋ ํ์ผ๊ณผ ๋ฒกํฐ DB๋ฅผ ์ธ๋ถ ์คํ ๋ฆฌ์ง์ ์ ์ฅํฉ๋๋ค. | |
| #### AWS S3 ์ฌ์ฉ ์์ | |
| 1. **boto3 ์ค์น**: | |
| ``` | |
| pip install boto3 | |
| ``` | |
| 2. **ํ๊ฒฝ ๋ณ์ ์ค์ **: | |
| ``` | |
| AWS_ACCESS_KEY_ID=your_access_key | |
| AWS_SECRET_ACCESS_KEY=your_secret_key | |
| AWS_S3_BUCKET=your_bucket_name | |
| ``` | |
| 3. **์ฝ๋ ์์ **: ํ์ผ ์ ๋ก๋/๋ค์ด๋ก๋ ๋ก์ง์ S3๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ | |
| #### Google Cloud Storage ์ฌ์ฉ ์์ | |
| 1. **google-cloud-storage ์ค์น**: | |
| ``` | |
| pip install google-cloud-storage | |
| ``` | |
| 2. **ํ๊ฒฝ ๋ณ์ ์ค์ **: | |
| ``` | |
| GCS_BUCKET_NAME=your_bucket_name | |
| GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json | |
| ``` | |
| ### ๋ฐฉ๋ฒ 3: Hugging Face Dataset ์ฌ์ฉ (๊ฐ๋จํ ๋ฐฉ๋ฒ) | |
| Hugging Face์ Dataset API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. | |
| 1. **datasets ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น**: | |
| ``` | |
| pip install datasets | |
| ``` | |
| 2. **์ฝ๋ ์์**: | |
| ```python | |
| from datasets import Dataset | |
| import json | |
| # ๋ฐ์ดํฐ ์ ์ฅ | |
| def save_to_hf_dataset(data, dataset_name): | |
| dataset = Dataset.from_dict(data) | |
| dataset.push_to_hub(dataset_name, token=HF_TOKEN) | |
| # ๋ฐ์ดํฐ ๋ก๋ | |
| def load_from_hf_dataset(dataset_name): | |
| dataset = Dataset.from_hub(dataset_name, token=HF_TOKEN) | |
| return dataset.to_dict() | |
| ``` | |
| ### ๋ฐฉ๋ฒ 4: ์ ๊ธฐ์ ์ธ ๋ฐฑ์ ์์คํ | |
| ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ์ ํฉ๋๋ค. | |
| 1. **๋ฐฑ์ ์คํฌ๋ฆฝํธ ์์ฑ** (`backup_data.py`): | |
| ```python | |
| import shutil | |
| import os | |
| from datetime import datetime | |
| from huggingface_hub import HfApi | |
| def backup_to_hf(): | |
| # ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์ | |
| if os.path.exists('instance/finance_analysis.db'): | |
| timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') | |
| backup_name = f'backup_{timestamp}.db' | |
| shutil.copy('instance/finance_analysis.db', backup_name) | |
| # Hugging Face Hub์ ์ ๋ก๋ | |
| api = HfApi() | |
| api.upload_file( | |
| path_or_fileobj=backup_name, | |
| path_in_repo=f'backups/{backup_name}', | |
| repo_id='your-username/your-repo', | |
| token=os.getenv('HF_TOKEN') | |
| ) | |
| ``` | |
| 2. **์ค์ผ์ค๋ฌ ์ค์ **: GitHub Actions ๋๋ ์ธ๋ถ ์ค์ผ์ค๋ฌ ์ฌ์ฉ | |
| ## ์ฆ์ ์ ์ฉ ๊ฐ๋ฅํ ์์ ํด๊ฒฐ์ฑ | |
| ### ํ๊ฒฝ ๋ณ์๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒฝ๋ก ๋ณ๊ฒฝ | |
| Hugging Face Spaces์ ์์์ฑ ์คํ ๋ฆฌ์ง(์๋ ๊ฒฝ์ฐ)๋ฅผ ์ฌ์ฉ: | |
| ```python | |
| # app/core/config.py ์์ | |
| SQLALCHEMY_DATABASE_URI: str = os.getenv( | |
| 'DATABASE_URL', | |
| f'sqlite:///{os.getenv("HF_HOME", str(PROJECT_ROOT / "instance"))}/finance_analysis.db' | |
| ) | |
| ``` | |
| ## ๊ถ์ฅ ์ฌํญ | |
| 1. **ํ๋ก๋์ ํ๊ฒฝ**: ๋ฐฉ๋ฒ 1 (์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค) + ๋ฐฉ๋ฒ 2 (์ธ๋ถ ์คํ ๋ฆฌ์ง) | |
| 2. **๊ฐ๋ฐ/ํ ์คํธ ํ๊ฒฝ**: ๋ฐฉ๋ฒ 3 (Hugging Face Dataset) ๋๋ ๋ฐฉ๋ฒ 4 (์ ๊ธฐ ๋ฐฑ์ ) | |
| 3. **์ค์ํ ๋ฐ์ดํฐ**: ํญ์ ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ | |
| ## ์ฐธ๊ณ | |
| - [Hugging Face Spaces ๋ฌธ์](https://huggingface.co/docs/hub/spaces) | |
| - [Supabase (๋ฌด๋ฃ PostgreSQL)](https://supabase.com/) | |
| - [Neon (์๋ฒ๋ฆฌ์ค PostgreSQL)](https://neon.tech/) | |
| - [Railway (PostgreSQL)](https://railway.app/) | |