| # PostgreSQL ์ค์ ๊ฐ์ด๋ | |
| ํ์ฌ SQLite๋ฅผ ์ฌ์ฉ ์ค์ด๋ฉฐ, ์ปจํ ์ด๋ ์ฌ์์ ์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋ ์ ์์ต๋๋ค. PostgreSQL๋ก ์ ํํ๋ฉด ๋ฐ์ดํฐ๊ฐ ์๊ตฌ์ ์ผ๋ก ๋ณด์กด๋ฉ๋๋ค. | |
| ## ๋ฌด๋ฃ PostgreSQL ์๋น์ค ์ ํ | |
| ### 1. Supabase (๊ถ์ฅ) | |
| - **URL**: https://supabase.com/ | |
| - **๋ฌด๋ฃ ํฐ์ด**: 500MB ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์๋ ๋ฐฑ์ | |
| - **์ฅ์ **: ์ฌ์ฉํ๊ธฐ ์ฌ์, ์๋ ๋ฐฑ์ , ๋์๋ณด๋ ์ ๊ณต | |
| ### 2. Neon | |
| - **URL**: https://neon.tech/ | |
| - **๋ฌด๋ฃ ํฐ์ด**: 3GB ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์๋ฒ๋ฆฌ์ค | |
| - **์ฅ์ **: ๋น ๋ฅธ ์ฑ๋ฅ, ์๋ ์ค์ผ์ผ๋ง | |
| ### 3. Railway | |
| - **URL**: https://railway.app/ | |
| - **๋ฌด๋ฃ ํฐ์ด**: $5 ํฌ๋ ๋ง/์ | |
| - **์ฅ์ **: ๊ฐ๋จํ ์ค์ , ๋ค์ํ ์๋น์ค ํตํฉ | |
| ## Supabase ์ค์ ๋ฐฉ๋ฒ (์์) | |
| ### 1. Supabase ํ๋ก์ ํธ ์์ฑ | |
| 1. https://supabase.com/ ์ ์ ๋ฐ ๋ก๊ทธ์ธ | |
| 2. "New Project" ํด๋ฆญ | |
| 3. ํ๋ก์ ํธ ์ ๋ณด ์ ๋ ฅ: | |
| - **Name**: ์ํ๋ ํ๋ก์ ํธ ์ด๋ฆ | |
| - **Database Password**: ๊ฐ๋ ฅํ ๋น๋ฐ๋ฒํธ ์์ฑ (์ ์ฅํด๋์ธ์!) | |
| - **Region**: ๊ฐ์ฅ ๊ฐ๊น์ด ์ง์ญ ์ ํ | |
| 4. "Create new project" ํด๋ฆญ (์ฝ 2๋ถ ์์) | |
| ### 2. ์ฐ๊ฒฐ ์ ๋ณด ํ์ธ | |
| ํ๋ก์ ํธ ์์ฑ ํ: | |
| 1. **Settings** > **Database** ๋ฉ๋ด๋ก ์ด๋ | |
| 2. **Connection string** ์น์ ์์ **URI** ๋ณต์ฌ | |
| - ํ์: `postgresql://postgres:[YOUR-PASSWORD]@db.xxxxx.supabase.co:5432/postgres` | |
| - `[YOUR-PASSWORD]`๋ฅผ ์ค์ ๋น๋ฐ๋ฒํธ๋ก ๊ต์ฒด | |
| ### 3. Hugging Face Spaces์ ํ๊ฒฝ ๋ณ์ ์ค์ | |
| 1. Hugging Face Spaces ํ์ด์ง๋ก ์ด๋ | |
| 2. **Settings** ํญ ํด๋ฆญ | |
| 3. **Repository secrets** ์น์ ์ผ๋ก ์คํฌ๋กค | |
| 4. **New secret** ํด๋ฆญ | |
| 5. ๋ค์ ์ ๋ณด ์ ๋ ฅ: | |
| - **Key**: `DATABASE_URL` | |
| - **Value**: Supabase์์ ๋ณต์ฌํ ์ฐ๊ฒฐ ๋ฌธ์์ด (๋น๋ฐ๋ฒํธ ํฌํจ) | |
| ``` | |
| postgresql://postgres:your_password@db.xxxxx.supabase.co:5432/postgres | |
| ``` | |
| 6. **Add secret** ํด๋ฆญ | |
| ### 4. Spaces ์ฌ๋น๋ | |
| ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๋ฉด Spaces๊ฐ ์๋์ผ๋ก ์ฌ๋น๋๋ฉ๋๋ค (์ฝ 2-5๋ถ ์์). | |
| ### 5. ์ฐ๊ฒฐ ํ์ธ | |
| ์ฌ๋น๋ ์๋ฃ ํ: | |
| 1. ๋ธ๋ผ์ฐ์ ์์ ๋ค์ URL ์ ์: | |
| ``` | |
| https://wiizm-soyailabs.hf.space/api/admin/database/status | |
| ``` | |
| 2. ์๋ต ํ์ธ: | |
| ```json | |
| { | |
| "connected": true, | |
| "type": "PostgreSQL", // โ PostgreSQL ํ์ธ | |
| "version": "PostgreSQL 15.x...", | |
| "config_count": 1, | |
| "user_count": 1 | |
| } | |
| ``` | |
| ## Neon ์ค์ ๋ฐฉ๋ฒ (์์) | |
| ### 1. Neon ํ๋ก์ ํธ ์์ฑ | |
| 1. https://neon.tech/ ์ ์ ๋ฐ ๋ก๊ทธ์ธ | |
| 2. "Create a project" ํด๋ฆญ | |
| 3. ํ๋ก์ ํธ ์ ๋ณด ์ ๋ ฅ: | |
| - **Name**: ์ํ๋ ํ๋ก์ ํธ ์ด๋ฆ | |
| - **Region**: ๊ฐ์ฅ ๊ฐ๊น์ด ์ง์ญ ์ ํ | |
| 4. "Create project" ํด๋ฆญ | |
| ### 2. ์ฐ๊ฒฐ ์ ๋ณด ํ์ธ | |
| ํ๋ก์ ํธ ์์ฑ ํ: | |
| 1. ํ๋ก์ ํธ ๋์๋ณด๋์์ **Connection string** ๋ณต์ฌ | |
| - ํ์: `postgresql://user:password@ep-xxxxx.region.aws.neon.tech/neondb` | |
| - ๋๋ **Connection Details**์์ ๊ฐ๋ณ ์ ๋ณด ํ์ธ | |
| ### 3. Hugging Face Spaces์ ํ๊ฒฝ ๋ณ์ ์ค์ | |
| 1. Hugging Face Spaces > Settings > Repository secrets | |
| 2. **New secret** ํด๋ฆญ | |
| 3. ๋ค์ ์ ๋ณด ์ ๋ ฅ: | |
| - **Key**: `DATABASE_URL` | |
| - **Value**: Neon ์ฐ๊ฒฐ ๋ฌธ์์ด | |
| 4. **Add secret** ํด๋ฆญ | |
| ### 4. Spaces ์ฌ๋น๋ ๋ฐ ํ์ธ | |
| ์์ ๋์ผํ๊ฒ ์ฌ๋น๋ ํ `/api/admin/database/status`๋ก ํ์ธ | |
| ## ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ (์ ํ์ฌํญ) | |
| PostgreSQL๋ก ์ ํํ๋ฉด ๊ธฐ์กด SQLite ๋ฐ์ดํฐ๋ ์๋์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ๋์ง ์์ต๋๋ค. ํ์์: | |
| 1. **๊ธฐ์กด ๋ฐ์ดํฐ ๋ฐฑ์ ** (SQLite): | |
| ```bash | |
| # ๋ก์ปฌ์์ ์คํ | |
| sqlite3 instance/finance_analysis.db .dump > backup.sql | |
| ``` | |
| 2. **PostgreSQL๋ก ๋ณต์** (๋ณต์กํจ, ์๋ ์์ ํ์) | |
| **์ฐธ๊ณ **: ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์๋ก ์์ํ๋ ๊ฒ์ด ๋ ๊ฐ๋จํฉ๋๋ค. ์ฌ์ฉ์ ๊ณ์ ๊ณผ ์ค์ ๋ง ๋ค์ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค. | |
| ## ๋ฌธ์ ํด๊ฒฐ | |
| ### PostgreSQL ์ฐ๊ฒฐ ์คํจ | |
| 1. **์ฐ๊ฒฐ ๋ฌธ์์ด ํ์ธ**: | |
| - ๋น๋ฐ๋ฒํธ์ ํน์๋ฌธ์๊ฐ ์์ผ๋ฉด URL ์ธ์ฝ๋ฉ ํ์ | |
| - ์: `@` โ `%40`, `#` โ `%23` | |
| 2. **๋ฐฉํ๋ฒฝ ํ์ธ**: | |
| - Supabase/Neon์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ IP ํ์ฉ | |
| - ํน์ IP๋ง ํ์ฉํ๋๋ก ์ค์ ํ๋ค๋ฉด Hugging Face IP ์ถ๊ฐ | |
| 3. **๋ก๊ทธ ํ์ธ**: | |
| - Hugging Face Spaces > Logs ํญ | |
| - `[๋ฐ์ดํฐ๋ฒ ์ด์ค] PostgreSQL ์ฐ๊ฒฐ ์คํจ: ...` ์ค๋ฅ ๋ฉ์์ง ํ์ธ | |
| ### ์ฌ์ ํ SQLite ์ฌ์ฉ ์ค | |
| 1. **ํ๊ฒฝ ๋ณ์ ํ์ธ**: | |
| - Settings > Repository secrets์์ `DATABASE_URL` ์กด์ฌ ํ์ธ | |
| - ๊ฐ์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธ (๋น๋ฐ๋ฒํธ ํฌํจ) | |
| 2. **์ฌ๋น๋ ํ์ธ**: | |
| - ํ๊ฒฝ ๋ณ์ ๋ณ๊ฒฝ ํ Spaces๊ฐ ์ฌ๋น๋๋์๋์ง ํ์ธ | |
| - Settings > Build logs ํ์ธ | |
| 3. **์ฝ๋ ํ์ธ**: | |
| - `app/core/config.py`์์ `DATABASE_URL` ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฝ๋์ง ํ์ธ | |
| - (์ด๋ฏธ ๊ตฌํ๋์ด ์์) | |
| ## ํ์ธ ์ฒดํฌ๋ฆฌ์คํธ | |
| PostgreSQL ์ ํ ํ ๋ค์์ ํ์ธํ์ธ์: | |
| - [ ] `/api/admin/database/status`์์ `type: "PostgreSQL"` ํ์ธ | |
| - [ ] `connected: true` ํ์ธ | |
| - [ ] Gemini API ํค ์ ์ฅ ํ `config_count` ์ฆ๊ฐ ํ์ธ | |
| - [ ] ์ปจํ ์ด๋ ์ฌ์์ ํ์๋ ๋ฐ์ดํฐ ์ ์ง ํ์ธ | |
| ## ์ถ๊ฐ ์ ๋ณด | |
| - **Supabase ๋ฌธ์**: https://supabase.com/docs/guides/database | |
| - **Neon ๋ฌธ์**: https://neon.tech/docs | |
| - **PostgreSQL ์ฐ๊ฒฐ ๋ฌธ์์ด ํ์**: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING | |