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 ํ๋ก์ ํธ ์์ฑ
- https://supabase.com/ ์ ์ ๋ฐ ๋ก๊ทธ์ธ
- "New Project" ํด๋ฆญ
- ํ๋ก์ ํธ ์ ๋ณด ์
๋ ฅ:
- Name: ์ํ๋ ํ๋ก์ ํธ ์ด๋ฆ
- Database Password: ๊ฐ๋ ฅํ ๋น๋ฐ๋ฒํธ ์์ฑ (์ ์ฅํด๋์ธ์!)
- Region: ๊ฐ์ฅ ๊ฐ๊น์ด ์ง์ญ ์ ํ
- "Create new project" ํด๋ฆญ (์ฝ 2๋ถ ์์)
2. ์ฐ๊ฒฐ ์ ๋ณด ํ์ธ
ํ๋ก์ ํธ ์์ฑ ํ:
- Settings > Database ๋ฉ๋ด๋ก ์ด๋
- Connection string ์น์
์์ URI ๋ณต์ฌ
- ํ์:
postgresql://postgres:[YOUR-PASSWORD]@db.xxxxx.supabase.co:5432/postgres [YOUR-PASSWORD]๋ฅผ ์ค์ ๋น๋ฐ๋ฒํธ๋ก ๊ต์ฒด
- ํ์:
3. Hugging Face Spaces์ ํ๊ฒฝ ๋ณ์ ์ค์
- Hugging Face Spaces ํ์ด์ง๋ก ์ด๋
- Settings ํญ ํด๋ฆญ
- Repository secrets ์น์ ์ผ๋ก ์คํฌ๋กค
- New secret ํด๋ฆญ
- ๋ค์ ์ ๋ณด ์
๋ ฅ:
- Key:
DATABASE_URL - Value: Supabase์์ ๋ณต์ฌํ ์ฐ๊ฒฐ ๋ฌธ์์ด (๋น๋ฐ๋ฒํธ ํฌํจ)
postgresql://postgres:your_password@db.xxxxx.supabase.co:5432/postgres
- Key:
- Add secret ํด๋ฆญ
4. Spaces ์ฌ๋น๋
ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๋ฉด Spaces๊ฐ ์๋์ผ๋ก ์ฌ๋น๋๋ฉ๋๋ค (์ฝ 2-5๋ถ ์์).
5. ์ฐ๊ฒฐ ํ์ธ
์ฌ๋น๋ ์๋ฃ ํ:
- ๋ธ๋ผ์ฐ์ ์์ ๋ค์ URL ์ ์:
https://wiizm-soyailabs.hf.space/api/admin/database/status - ์๋ต ํ์ธ:
{ "connected": true, "type": "PostgreSQL", // โ PostgreSQL ํ์ธ "version": "PostgreSQL 15.x...", "config_count": 1, "user_count": 1 }
Neon ์ค์ ๋ฐฉ๋ฒ (์์)
1. Neon ํ๋ก์ ํธ ์์ฑ
- https://neon.tech/ ์ ์ ๋ฐ ๋ก๊ทธ์ธ
- "Create a project" ํด๋ฆญ
- ํ๋ก์ ํธ ์ ๋ณด ์
๋ ฅ:
- Name: ์ํ๋ ํ๋ก์ ํธ ์ด๋ฆ
- Region: ๊ฐ์ฅ ๊ฐ๊น์ด ์ง์ญ ์ ํ
- "Create project" ํด๋ฆญ
2. ์ฐ๊ฒฐ ์ ๋ณด ํ์ธ
ํ๋ก์ ํธ ์์ฑ ํ:
- ํ๋ก์ ํธ ๋์๋ณด๋์์ Connection string ๋ณต์ฌ
- ํ์:
postgresql://user:password@ep-xxxxx.region.aws.neon.tech/neondb - ๋๋ Connection Details์์ ๊ฐ๋ณ ์ ๋ณด ํ์ธ
- ํ์:
3. Hugging Face Spaces์ ํ๊ฒฝ ๋ณ์ ์ค์
- Hugging Face Spaces > Settings > Repository secrets
- New secret ํด๋ฆญ
- ๋ค์ ์ ๋ณด ์
๋ ฅ:
- Key:
DATABASE_URL - Value: Neon ์ฐ๊ฒฐ ๋ฌธ์์ด
- Key:
- Add secret ํด๋ฆญ
4. Spaces ์ฌ๋น๋ ๋ฐ ํ์ธ
์์ ๋์ผํ๊ฒ ์ฌ๋น๋ ํ /api/admin/database/status๋ก ํ์ธ
๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ (์ ํ์ฌํญ)
PostgreSQL๋ก ์ ํํ๋ฉด ๊ธฐ์กด SQLite ๋ฐ์ดํฐ๋ ์๋์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ๋์ง ์์ต๋๋ค. ํ์์:
๊ธฐ์กด ๋ฐ์ดํฐ ๋ฐฑ์ (SQLite):
# ๋ก์ปฌ์์ ์คํ sqlite3 instance/finance_analysis.db .dump > backup.sqlPostgreSQL๋ก ๋ณต์ (๋ณต์กํจ, ์๋ ์์ ํ์)
์ฐธ๊ณ : ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์๋ก ์์ํ๋ ๊ฒ์ด ๋ ๊ฐ๋จํฉ๋๋ค. ์ฌ์ฉ์ ๊ณ์ ๊ณผ ์ค์ ๋ง ๋ค์ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
๋ฌธ์ ํด๊ฒฐ
PostgreSQL ์ฐ๊ฒฐ ์คํจ
์ฐ๊ฒฐ ๋ฌธ์์ด ํ์ธ:
- ๋น๋ฐ๋ฒํธ์ ํน์๋ฌธ์๊ฐ ์์ผ๋ฉด URL ์ธ์ฝ๋ฉ ํ์
- ์:
@โ%40,#โ%23
๋ฐฉํ๋ฒฝ ํ์ธ:
- Supabase/Neon์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ IP ํ์ฉ
- ํน์ IP๋ง ํ์ฉํ๋๋ก ์ค์ ํ๋ค๋ฉด Hugging Face IP ์ถ๊ฐ
๋ก๊ทธ ํ์ธ:
- Hugging Face Spaces > Logs ํญ
[๋ฐ์ดํฐ๋ฒ ์ด์ค] PostgreSQL ์ฐ๊ฒฐ ์คํจ: ...์ค๋ฅ ๋ฉ์์ง ํ์ธ
์ฌ์ ํ SQLite ์ฌ์ฉ ์ค
ํ๊ฒฝ ๋ณ์ ํ์ธ:
- Settings > Repository secrets์์
DATABASE_URL์กด์ฌ ํ์ธ - ๊ฐ์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธ (๋น๋ฐ๋ฒํธ ํฌํจ)
- Settings > Repository secrets์์
์ฌ๋น๋ ํ์ธ:
- ํ๊ฒฝ ๋ณ์ ๋ณ๊ฒฝ ํ Spaces๊ฐ ์ฌ๋น๋๋์๋์ง ํ์ธ
- Settings > Build logs ํ์ธ
์ฝ๋ ํ์ธ:
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