soyailabs / RAILWAY_POSTGRESQL_SETUP.md
SOY NV AI
Fix Ollama communication error and update Railway PostgreSQL setup guide
ef22967
|
raw
history blame
10.6 kB
# Railway PostgreSQL ์„ค์ • ๊ฐ€์ด๋“œ
Railway์—์„œ PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  Hugging Face Spaces์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
## 1. Railway์—์„œ PostgreSQL ์„œ๋น„์Šค ์ƒ์„ฑ
### ๋ฐฉ๋ฒ• 1: ์ƒˆ ํ”„๋กœ์ ํŠธ์—์„œ PostgreSQL ์ถ”๊ฐ€ (๊ถŒ์žฅ)
1. **Railway ๋Œ€์‹œ๋ณด๋“œ ์ ‘์†**
- https://railway.app ์ ‘์† ๋ฐ ๋กœ๊ทธ์ธ
2. **์ƒˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ**
- ์ขŒ์ธก ์ƒ๋‹จ์˜ **"+ New Project"** ํด๋ฆญ
- **"Deploy from GitHub repo"** ๋˜๋Š” **"Empty Project"** ์„ ํƒ
- ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์ž…๋ ฅ (์˜ˆ: `soy-nv-ai-db`)
3. **PostgreSQL ์„œ๋น„์Šค ์ถ”๊ฐ€**
- ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ **"+ New"** ๋ฒ„ํŠผ ํด๋ฆญ
- **"Database"** ์„ ํƒ
- **"Add PostgreSQL"** ํด๋ฆญ
- Railway๊ฐ€ ์ž๋™์œผ๋กœ PostgreSQL ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค (์•ฝ 1-2๋ถ„ ์†Œ์š”)
### ๋ฐฉ๋ฒ• 2: ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— PostgreSQL ์ถ”๊ฐ€
1. ๊ธฐ์กด ํ”„๋กœ์ ํŠธ ์„ ํƒ
2. **"+ New"** ๋ฒ„ํŠผ ํด๋ฆญ
3. **"Database"** > **"Add PostgreSQL"** ์„ ํƒ
## 2. PostgreSQL ์—ฐ๊ฒฐ ์ •๋ณด ํ™•์ธ
PostgreSQL ์„œ๋น„์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด:
1. **PostgreSQL ์„œ๋น„์Šค ํด๋ฆญ**
- ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ์ƒ์„ฑ๋œ PostgreSQL ์„œ๋น„์Šค๋ฅผ ํด๋ฆญ
2. **Variables ํƒญ ํ™•์ธ**
- ์ƒ๋‹จ ๋ฉ”๋‰ด์—์„œ **"Variables"** ํƒญ ํด๋ฆญ
- ๋‹ค์Œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:
- `PGHOST`: ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ
- `PGPORT`: ํฌํŠธ ๋ฒˆํ˜ธ (๊ธฐ๋ณธ๊ฐ’: 5432)
- `PGDATABASE`: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„
- `PGUSER`: ์‚ฌ์šฉ์ž ์ด๋ฆ„
- `PGPASSWORD`: ๋น„๋ฐ€๋ฒˆํ˜ธ
- `DATABASE_URL`: ์ „์ฒด ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด โญ (์ด๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค!)
3. **DATABASE_URL ๋ณต์‚ฌ**
- `DATABASE_URL` ๋ณ€์ˆ˜์˜ **๊ฐ’**์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค
- ํ˜•์‹: `postgresql://postgres:password@hostname:port/railway`
- ์˜ˆ์‹œ: `postgresql://postgres:abc123@containers-us-west-123.railway.app:5432/railway`
## 3. Hugging Face Spaces์— ์—ฐ๊ฒฐ ์ •๋ณด ์„ค์ •
### 3-1. Hugging Face Spaces ์ ‘์†
1. https://huggingface.co/spaces ์ ‘์†
2. ํ•ด๋‹น Space ํŽ˜์ด์ง€๋กœ ์ด๋™ (์˜ˆ: `wiizm/soyailabs`)
### 3-2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ถ”๊ฐ€
1. **Settings ํƒญ ํด๋ฆญ**
- Space ํŽ˜์ด์ง€ ์ƒ๋‹จ์˜ **"Settings"** ํƒญ ํด๋ฆญ
2. **Repository secrets ์„น์…˜์œผ๋กœ ์ด๋™**
- ์ขŒ์ธก ๋ฉ”๋‰ด์—์„œ **"Repository secrets"** ํด๋ฆญ
- ๋˜๋Š” ํŽ˜์ด์ง€๋ฅผ ์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•˜์—ฌ **"Repository secrets"** ์„น์…˜ ์ฐพ๊ธฐ
3. **์ƒˆ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ถ”๊ฐ€**
- **"New secret"** ๋ฒ„ํŠผ ํด๋ฆญ
- ๋‹ค์Œ ์ •๋ณด ์ž…๋ ฅ:
- **Key**: `DATABASE_URL`
- **Value**: Railway์—์„œ ๋ณต์‚ฌํ•œ `DATABASE_URL` ๊ฐ’ ๋ถ™์—ฌ๋„ฃ๊ธฐ
```
postgresql://postgres:password@hostname:port/railway
```
- **"Add secret"** ๋ฒ„ํŠผ ํด๋ฆญ
4. **ํ™•์ธ**
- `DATABASE_URL`์ด secrets ๋ชฉ๋ก์— ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
## 4. Spaces ์žฌ๋นŒ๋“œ ๋ฐ ํ™•์ธ
### 4-1. ์ž๋™ ์žฌ๋นŒ๋“œ
ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด Hugging Face Spaces๊ฐ€ ์ž๋™์œผ๋กœ ์žฌ๋นŒ๋“œ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
1. **Settings ํƒญ์—์„œ ๋นŒ๋“œ ์ƒํƒœ ํ™•์ธ**
- ๋˜๋Š” **"Logs"** ํƒญ์—์„œ ๋นŒ๋“œ ์ง„ํ–‰ ์ƒํ™ฉ ํ™•์ธ
- ๋นŒ๋“œ ์™„๋ฃŒ๊นŒ์ง€ ์•ฝ 2-5๋ถ„ ์†Œ์š”
### 4-2. ์—ฐ๊ฒฐ ํ™•์ธ
์žฌ๋นŒ๋“œ ์™„๋ฃŒ ํ›„:
**โš ๏ธ ์ค‘์š”: ๊ด€๋ฆฌ์ž ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•œ ์ƒํƒœ์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.**
1. **๊ด€๋ฆฌ์ž ๋กœ๊ทธ์ธ**:
- ๋จผ์ € ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ด€๋ฆฌ์ž ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค
- ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
2. **๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค์Œ URL ์ ‘์†** (GET ์š”์ฒญ):
```
https://wiizm-soyailabs.hf.space/api/admin/database/status
```
- โš ๏ธ **GET ๋ฉ”์„œ๋“œ๋งŒ ์ง€์›**: POST๋‚˜ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋กœ ์š”์ฒญํ•˜๋ฉด "Method Not Allowed" ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค
- ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— ์ง์ ‘ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜, ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ `fetch()` ์‚ฌ์šฉ ์‹œ GET ์š”์ฒญ์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”
3. **๋˜๋Š” ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ ํ™•์ธ**:
- ๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ(F12) ์—ด๊ธฐ
- Console ํƒญ์—์„œ ๋‹ค์Œ ๋ช…๋ น ์‹คํ–‰:
```javascript
fetch('/api/admin/database/status', {
method: 'GET', // GET ๋ฉ”์„œ๋“œ ๋ช…์‹œ
credentials: 'include' // ์ฟ ํ‚ค ํฌํ•จ (๋กœ๊ทธ์ธ ์„ธ์…˜)
})
.then(res => res.json())
.then(data => console.log('DB ์ƒํƒœ:', data));
```
4. **์‘๋‹ต ํ™•์ธ**:
```json
{
"config_count": 1,
"connected": true,
"error": null,
"table_count": 11,
"test_query": "ํ˜„์žฌ ์‹œ๊ฐ„: 2025-12-08 17:40:35.168889+00:00",
"type": "PostgreSQL",
"uri_masked": "postgresql://***@hopper.proxy.rlwy.net:15569/railway",
"user_count": 1,
"version": "PostgreSQL 17.7 (Debian 17.7-3.pgdg13+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 14.2.0-19) "
}
```
3. **์„ฑ๊ณต ํ™•์ธ ์‚ฌํ•ญ**:
- โœ… `type: "PostgreSQL"` (SQLite๊ฐ€ ์•„๋‹˜)
- โœ… `connected: true`
- โœ… `version`์— PostgreSQL ๋ฒ„์ „ ํ‘œ์‹œ
## 5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ์ž๋™ ์ƒ์„ฑ ํ™•์ธ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋˜๋ฉด ์ž๋™์œผ๋กœ ํ•„์š”ํ•œ ํ…Œ์ด๋ธ”๋“ค์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
1. **Logs ํƒญ ํ™•์ธ**:
- `[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] PostgreSQL ์—ฐ๊ฒฐ ์„ฑ๊ณต!` ๋ฉ”์‹œ์ง€ ํ™•์ธ
- `[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์™„๋ฃŒ` ๋ฉ”์‹œ์ง€ ํ™•์ธ
2. **Railway์—์„œ ํ™•์ธ** (์„ ํƒ์‚ฌํ•ญ):
- Railway ํ”„๋กœ์ ํŠธ > PostgreSQL ์„œ๋น„์Šค > **"Data"** ํƒญ
- ์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ” ๋ชฉ๋ก ํ™•์ธ
## 6. ์„ค์ • ์ €์žฅ ํ…Œ์ŠคํŠธ
PostgreSQL ์—ฐ๊ฒฐ์ด ํ™•์ธ๋˜๋ฉด:
1. **๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ์ ‘์†**
- https://wiizm-soyailabs.hf.space/admin/settings
2. **Gemini API ํ‚ค ์ €์žฅ**
- API ํ‚ค ์ž…๋ ฅ ํ›„ ์ €์žฅ
3. **์ €์žฅ ํ™•์ธ**
- `/api/admin/database/status`์—์„œ `config_count` ํ™•์ธ
- `config_count`๊ฐ€ 1 ์ด์ƒ์ด๋ฉด ์ €์žฅ ์„ฑ๊ณต
4. **์˜๊ตฌ ์ €์žฅ ํ™•์ธ**
- Spaces๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•ด๋„
- `/api/admin/database/status`์—์„œ `config_count`๊ฐ€ ์œ ์ง€๋˜๋Š”์ง€ ํ™•์ธ
## ๋ฌธ์ œ ํ•ด๊ฒฐ
### Method Not Allowed ์˜ค๋ฅ˜
**์ฆ์ƒ**: `/api/admin/database/status` ์ ‘์† ์‹œ "Method Not Allowed" ์˜ค๋ฅ˜ ๋ฐœ์ƒ
**์›์ธ**:
- ์—”๋“œํฌ์ธํŠธ๋Š” **GET ๋ฉ”์„œ๋“œ๋งŒ** ์ง€์›ํ•ฉ๋‹ˆ๋‹ค
- POST, PUT, DELETE ๋“ฑ์˜ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋กœ ์š”์ฒญํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค
**ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•**:
1. **๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์—์„œ ์ง์ ‘ ์ ‘์†**:
- ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— URL์„ ์ง์ ‘ ์ž…๋ ฅํ•˜๋ฉด ์ž๋™์œผ๋กœ GET ์š”์ฒญ์ด ๋ฉ๋‹ˆ๋‹ค
- ์˜ˆ: `https://wiizm-soyailabs.hf.space/api/admin/database/status`
2. **๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ GET ๋ฉ”์„œ๋“œ ๋ช…์‹œ**:
```javascript
fetch('/api/admin/database/status', {
method: 'GET', // GET ๋ช…์‹œ
credentials: 'include'
})
```
3. **๊ด€๋ฆฌ์ž ๋กœ๊ทธ์ธ ํ™•์ธ**:
- ๊ด€๋ฆฌ์ž ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
- ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ๊ณ„์ •์ด๋ฉด ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
4. **curl ๋ช…๋ น์–ด ์‚ฌ์šฉ ์‹œ**:
```bash
curl -X GET https://wiizm-soyailabs.hf.space/api/admin/database/status
```
- `-X GET` ์˜ต์…˜์œผ๋กœ GET ๋ฉ”์„œ๋“œ ๋ช…์‹œ (๊ธฐ๋ณธ๊ฐ’์ด์ง€๋งŒ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „)
### PostgreSQL ์—ฐ๊ฒฐ ์‹คํŒจ
**์ฆ์ƒ**: `/api/admin/database/status`์—์„œ `connected: false` ๋˜๋Š” `type: "SQLite"`
**ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•**:
1. **ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํ™•์ธ**:
- Hugging Face Spaces > Settings > Repository secrets
- `DATABASE_URL`์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
- ๊ฐ’์— ๊ณต๋ฐฑ์ด๋‚˜ ์ค„๋ฐ”๊ฟˆ์ด ์—†๋Š”์ง€ ํ™•์ธ
2. **์—ฐ๊ฒฐ ๋ฌธ์ž์—ด ํ˜•์‹ ํ™•์ธ**:
- `postgresql://` ๋˜๋Š” `postgres://`๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•จ
- ๋น„๋ฐ€๋ฒˆํ˜ธ์— ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ์žˆ์œผ๋ฉด URL ์ธ์ฝ”๋”ฉ ํ•„์š”
- `@` โ†’ `%40`
- `#` โ†’ `%23`
- `%` โ†’ `%25`
- `&` โ†’ `%26`
3. **Railway ์—ฐ๊ฒฐ ์ •๋ณด ์žฌํ™•์ธ**:
- Railway > PostgreSQL ์„œ๋น„์Šค > Variables ํƒญ
- `DATABASE_URL` ๊ฐ’์„ ๋‹ค์‹œ ๋ณต์‚ฌํ•˜์—ฌ ํ™•์ธ
4. **๋กœ๊ทธ ํ™•์ธ**:
- Hugging Face Spaces > Logs ํƒญ
- `[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] PostgreSQL ์—ฐ๊ฒฐ ์‹คํŒจ: ...` ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ํ™•์ธ
- ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ
### Railway ์™ธ๋ถ€ ์—ฐ๊ฒฐ ๋ฌธ์ œ
**์ฆ์ƒ**: Railway์—์„œ ์™ธ๋ถ€ ์—ฐ๊ฒฐ์ด ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ
**ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•**:
1. **TCP Proxy ํ™•์ธ**:
- Railway๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ TCP Proxy๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค
- PostgreSQL ์„œ๋น„์Šค > **"Connect"** ํƒญ ํ™•์ธ
- ์™ธ๋ถ€ ์—ฐ๊ฒฐ ์ •๋ณด ํ™•์ธ
2. **๋„คํŠธ์›Œํฌ ์š”๊ธˆ ํ™•์ธ**:
- Railway๋Š” ์™ธ๋ถ€ ์—ฐ๊ฒฐ ์‹œ ๋„คํŠธ์›Œํฌ ์†ก์‹ ๋Ÿ‰์— ๋Œ€ํ•œ ์š”๊ธˆ์ด ๋ถ€๊ณผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
- ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง: Railway ๋Œ€์‹œ๋ณด๋“œ > Usage ํƒญ
### ์—ฌ์ „ํžˆ SQLite ์‚ฌ์šฉ ์ค‘
**์ฆ์ƒ**: ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ–ˆ๋Š”๋ฐ๋„ `type: "SQLite"`๋กœ ํ‘œ์‹œ๋จ
**ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•**:
1. **์žฌ๋นŒ๋“œ ํ™•์ธ**:
- ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ณ€๊ฒฝ ํ›„ Spaces๊ฐ€ ์žฌ๋นŒ๋“œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
- Settings > Build logs ํ™•์ธ
2. **ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ด๋ฆ„ ํ™•์ธ**:
- ์ •ํ™•ํžˆ `DATABASE_URL`์ธ์ง€ ํ™•์ธ (๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„)
- ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธ
3. **์ฝ”๋“œ ํ™•์ธ**:
- `app/core/config.py`์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฝ๋Š”์ง€ ํ™•์ธ
- (์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์Œ)
## Railway ์ถ”๊ฐ€ ๊ธฐ๋Šฅ
### ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—…
1. **Railway ๋Œ€์‹œ๋ณด๋“œ** > PostgreSQL ์„œ๋น„์Šค
2. **"Backups"** ํƒญ์—์„œ ๋ฐฑ์—… ์„ค์ •
3. ์ž๋™ ๋ฐฑ์—… ์Šค์ผ€์ค„ ์„ค์ • ๊ฐ€๋Šฅ
### ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋‹ˆํ„ฐ๋ง
1. **Railway ๋Œ€์‹œ๋ณด๋“œ** > PostgreSQL ์„œ๋น„์Šค
2. **"Metrics"** ํƒญ์—์„œ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง
3. ์—ฐ๊ฒฐ ์ˆ˜, ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๋“ฑ ํ™•์ธ ๊ฐ€๋Šฅ
### ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™•์žฅ ๊ธฐ๋Šฅ
Railway๋Š” ๋‹ค์Œ PostgreSQL ํ™•์žฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:
- PostGIS (์ง€๋ฆฌ ๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ)
- TimescaleDB (์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ)
- ๊ธฐํƒ€ PostgreSQL ํ™•์žฅ
ํ•„์š”์‹œ Railway ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
## ๋น„์šฉ ์ •๋ณด
- **Railway ๋ฌด๋ฃŒ ํ‹ฐ์–ด**: $5 ํฌ๋ ˆ๋”ง/์›”
- **PostgreSQL**: ๋ฌด๋ฃŒ ํ‹ฐ์–ด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
- **์™ธ๋ถ€ ์—ฐ๊ฒฐ**: ๋„คํŠธ์›Œํฌ ์†ก์‹ ๋Ÿ‰์— ๋”ฐ๋ผ ์š”๊ธˆ ๋ถ€๊ณผ ๊ฐ€๋Šฅ
- **์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ**: Railway ๋Œ€์‹œ๋ณด๋“œ > Usage ํƒญ
## ์ฐธ๊ณ  ์ž๋ฃŒ
- **Railway PostgreSQL ๋ฌธ์„œ**: https://docs.railway.com/guides/postgresql
- **Railway ํ™˜๊ฒฝ ๋ณ€์ˆ˜**: https://docs.railway.com/develop/variables
- **PostgreSQL ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด**: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
## ํ™•์ธ ์ฒดํฌ๋ฆฌ์ŠคํŠธ
PostgreSQL ์„ค์ • ์™„๋ฃŒ ํ›„:
- [ ] Railway์—์„œ PostgreSQL ์„œ๋น„์Šค ์ƒ์„ฑ ์™„๋ฃŒ
- [ ] `DATABASE_URL` ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ณต์‚ฌ ์™„๋ฃŒ
- [ ] Hugging Face Spaces์— `DATABASE_URL` ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ถ”๊ฐ€ ์™„๋ฃŒ
- [ ] Spaces ์žฌ๋นŒ๋“œ ์™„๋ฃŒ
- [ ] `/api/admin/database/status`์—์„œ `type: "PostgreSQL"` ํ™•์ธ
- [ ] `connected: true` ํ™•์ธ
- [ ] Gemini API ํ‚ค ์ €์žฅ ํ›„ `config_count` ์ฆ๊ฐ€ ํ™•์ธ
- [ ] Spaces ์žฌ์‹œ์ž‘ ํ›„์—๋„ ๋ฐ์ดํ„ฐ ์œ ์ง€ ํ™•์ธ
๋ชจ๋“  ํ•ญ๋ชฉ์ด ์ฒดํฌ๋˜๋ฉด PostgreSQL ์„ค์ •์ด ์™„๋ฃŒ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค! ๐ŸŽ‰