soyailabs / POSTGRESQL_SETUP_GUIDE.md
SOY NV AI
Fix Ollama communication error and update Railway PostgreSQL setup guide
ef22967
# 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