SOY NV AI commited on
Commit
aeaf133
ยท
1 Parent(s): 34d15be

Add PostgreSQL setup guide for data persistence

Browse files
Files changed (1) hide show
  1. POSTGRESQL_SETUP_GUIDE.md +170 -0
POSTGRESQL_SETUP_GUIDE.md ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # PostgreSQL ์„ค์ • ๊ฐ€์ด๋“œ
2
+
3
+ ํ˜„์žฌ SQLite๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘ ์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PostgreSQL๋กœ ์ „ํ™˜ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ๋ณด์กด๋ฉ๋‹ˆ๋‹ค.
4
+
5
+ ## ๋ฌด๋ฃŒ PostgreSQL ์„œ๋น„์Šค ์„ ํƒ
6
+
7
+ ### 1. Supabase (๊ถŒ์žฅ)
8
+ - **URL**: https://supabase.com/
9
+ - **๋ฌด๋ฃŒ ํ‹ฐ์–ด**: 500MB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์ž๋™ ๋ฐฑ์—…
10
+ - **์žฅ์ **: ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์›€, ์ž๋™ ๋ฐฑ์—…, ๋Œ€์‹œ๋ณด๋“œ ์ œ๊ณต
11
+
12
+ ### 2. Neon
13
+ - **URL**: https://neon.tech/
14
+ - **๋ฌด๋ฃŒ ํ‹ฐ์–ด**: 3GB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์„œ๋ฒ„๋ฆฌ์Šค
15
+ - **์žฅ์ **: ๋น ๋ฅธ ์„ฑ๋Šฅ, ์ž๋™ ์Šค์ผ€์ผ๋ง
16
+
17
+ ### 3. Railway
18
+ - **URL**: https://railway.app/
19
+ - **๋ฌด๋ฃŒ ํ‹ฐ์–ด**: $5 ํฌ๋ ˆ๋”ง/์›”
20
+ - **์žฅ์ **: ๊ฐ„๋‹จํ•œ ์„ค์ •, ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ํ†ตํ•ฉ
21
+
22
+ ## Supabase ์„ค์ • ๋ฐฉ๋ฒ• (์˜ˆ์‹œ)
23
+
24
+ ### 1. Supabase ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
25
+
26
+ 1. https://supabase.com/ ์ ‘์† ๋ฐ ๋กœ๊ทธ์ธ
27
+ 2. "New Project" ํด๋ฆญ
28
+ 3. ํ”„๋กœ์ ํŠธ ์ •๋ณด ์ž…๋ ฅ:
29
+ - **Name**: ์›ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„
30
+ - **Database Password**: ๊ฐ•๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ƒ์„ฑ (์ €์žฅํ•ด๋‘์„ธ์š”!)
31
+ - **Region**: ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ง€์—ญ ์„ ํƒ
32
+ 4. "Create new project" ํด๋ฆญ (์•ฝ 2๋ถ„ ์†Œ์š”)
33
+
34
+ ### 2. ์—ฐ๊ฒฐ ์ •๋ณด ํ™•์ธ
35
+
36
+ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„:
37
+
38
+ 1. **Settings** > **Database** ๋ฉ”๋‰ด๋กœ ์ด๋™
39
+ 2. **Connection string** ์„น์…˜์—์„œ **URI** ๋ณต์‚ฌ
40
+ - ํ˜•์‹: `postgresql://postgres:[YOUR-PASSWORD]@db.xxxxx.supabase.co:5432/postgres`
41
+ - `[YOUR-PASSWORD]`๋ฅผ ์‹ค์ œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๊ต์ฒด
42
+
43
+ ### 3. Hugging Face Spaces์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
44
+
45
+ 1. Hugging Face Spaces ํŽ˜์ด์ง€๋กœ ์ด๋™
46
+ 2. **Settings** ํƒญ ํด๋ฆญ
47
+ 3. **Repository secrets** ์„น์…˜์œผ๋กœ ์Šคํฌ๋กค
48
+ 4. **New secret** ํด๋ฆญ
49
+ 5. ๋‹ค์Œ ์ •๋ณด ์ž…๋ ฅ:
50
+ - **Key**: `DATABASE_URL`
51
+ - **Value**: Supabase์—์„œ ๋ณต์‚ฌํ•œ ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด (๋น„๋ฐ€๋ฒˆํ˜ธ ํฌํ•จ)
52
+ ```
53
+ postgresql://postgres:your_password@db.xxxxx.supabase.co:5432/postgres
54
+ ```
55
+ 6. **Add secret** ํด๋ฆญ
56
+
57
+ ### 4. Spaces ์žฌ๋นŒ๋“œ
58
+
59
+ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋ฉด Spaces๊ฐ€ ์ž๋™์œผ๋กœ ์žฌ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค (์•ฝ 2-5๋ถ„ ์†Œ์š”).
60
+
61
+ ### 5. ์—ฐ๊ฒฐ ํ™•์ธ
62
+
63
+ ์žฌ๋นŒ๋“œ ์™„๋ฃŒ ํ›„:
64
+
65
+ 1. ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค์Œ URL ์ ‘์†:
66
+ ```
67
+ https://wiizm-soyailabs.hf.space/api/admin/database/status
68
+ ```
69
+ 2. ์‘๋‹ต ํ™•์ธ:
70
+ ```json
71
+ {
72
+ "connected": true,
73
+ "type": "PostgreSQL", // โœ… PostgreSQL ํ™•์ธ
74
+ "version": "PostgreSQL 15.x...",
75
+ "config_count": 1,
76
+ "user_count": 1
77
+ }
78
+ ```
79
+
80
+ ## Neon ์„ค์ • ๋ฐฉ๋ฒ• (์˜ˆ์‹œ)
81
+
82
+ ### 1. Neon ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
83
+
84
+ 1. https://neon.tech/ ์ ‘์† ๋ฐ ๋กœ๊ทธ์ธ
85
+ 2. "Create a project" ํด๋ฆญ
86
+ 3. ํ”„๋กœ์ ํŠธ ์ •๋ณด ์ž…๋ ฅ:
87
+ - **Name**: ์›ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„
88
+ - **Region**: ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ง€์—ญ ์„ ํƒ
89
+ 4. "Create project" ํด๋ฆญ
90
+
91
+ ### 2. ์—ฐ๊ฒฐ ์ •๋ณด ํ™•์ธ
92
+
93
+ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„:
94
+
95
+ 1. ํ”„๋กœ์ ํŠธ ๋Œ€์‹œ๋ณด๋“œ์—์„œ **Connection string** ๋ณต์‚ฌ
96
+ - ํ˜•์‹: `postgresql://user:password@ep-xxxxx.region.aws.neon.tech/neondb`
97
+ - ๋˜๋Š” **Connection Details**์—์„œ ๊ฐœ๋ณ„ ์ •๋ณด ํ™•์ธ
98
+
99
+ ### 3. Hugging Face Spaces์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
100
+
101
+ 1. Hugging Face Spaces > Settings > Repository secrets
102
+ 2. **New secret** ํด๋ฆญ
103
+ 3. ๋‹ค์Œ ์ •๋ณด ์ž…๋ ฅ:
104
+ - **Key**: `DATABASE_URL`
105
+ - **Value**: Neon ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด
106
+ 4. **Add secret** ํด๋ฆญ
107
+
108
+ ### 4. Spaces ์žฌ๋นŒ๋“œ ๋ฐ ํ™•์ธ
109
+
110
+ ์œ„์™€ ๋™์ผํ•˜๊ฒŒ ์žฌ๋นŒ๋“œ ํ›„ `/api/admin/database/status`๋กœ ํ™•์ธ
111
+
112
+ ## ๋ฐ์ดํ„ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (์„ ํƒ์‚ฌํ•ญ)
113
+
114
+ PostgreSQL๋กœ ์ „ํ™˜ํ•˜๋ฉด ๊ธฐ์กด SQLite ๋ฐ์ดํ„ฐ๋Š” ์ž๋™์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์š”์‹œ:
115
+
116
+ 1. **๊ธฐ์กด ๋ฐ์ดํ„ฐ ๋ฐฑ์—…** (SQLite):
117
+ ```bash
118
+ # ๋กœ์ปฌ์—์„œ ์‹คํ–‰
119
+ sqlite3 instance/finance_analysis.db .dump > backup.sql
120
+ ```
121
+
122
+ 2. **PostgreSQL๋กœ ๋ณต์›** (๋ณต์žกํ•จ, ์ˆ˜๋™ ์ž‘์—… ํ•„์š”)
123
+
124
+ **์ฐธ๊ณ **: ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ƒˆ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ณ„์ •๊ณผ ์„ค์ •๋งŒ ๋‹ค์‹œ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
125
+
126
+ ## ๋ฌธ์ œ ํ•ด๊ฒฐ
127
+
128
+ ### PostgreSQL ์—ฐ๊ฒฐ ์‹คํŒจ
129
+
130
+ 1. **์—ฐ๊ฒฐ ๋ฌธ์ž์—ด ํ™•์ธ**:
131
+ - ๋น„๋ฐ€๋ฒˆํ˜ธ์— ํŠน์ˆ˜๋ฌธ์ž๊ฐ€ ์žˆ์œผ๋ฉด URL ์ธ์ฝ”๋”ฉ ํ•„์š”
132
+ - ์˜ˆ: `@` โ†’ `%40`, `#` โ†’ `%23`
133
+
134
+ 2. **๋ฐฉํ™”๋ฒฝ ํ™•์ธ**:
135
+ - Supabase/Neon์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  IP ํ—ˆ์šฉ
136
+ - ํŠน์ • IP๋งŒ ํ—ˆ์šฉํ•˜๋„๋ก ์„ค์ •ํ–ˆ๋‹ค๋ฉด Hugging Face IP ์ถ”๊ฐ€
137
+
138
+ 3. **๋กœ๊ทธ ํ™•์ธ**:
139
+ - Hugging Face Spaces > Logs ํƒญ
140
+ - `[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] PostgreSQL ์—ฐ๊ฒฐ ์‹คํŒจ: ...` ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ํ™•์ธ
141
+
142
+ ### ์—ฌ์ „ํžˆ SQLite ์‚ฌ์šฉ ์ค‘
143
+
144
+ 1. **ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํ™•์ธ**:
145
+ - Settings > Repository secrets์—์„œ `DATABASE_URL` ์กด์žฌ ํ™•์ธ
146
+ - ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธ (๋น„๋ฐ€๋ฒˆํ˜ธ ํฌํ•จ)
147
+
148
+ 2. **์žฌ๋นŒ๋“œ ํ™•์ธ**:
149
+ - ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ณ€๊ฒฝ ํ›„ Spaces๊ฐ€ ์žฌ๋นŒ๋“œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
150
+ - Settings > Build logs ํ™•์ธ
151
+
152
+ 3. **์ฝ”๋“œ ํ™•์ธ**:
153
+ - `app/core/config.py`์—์„œ `DATABASE_URL` ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฝ๋Š”์ง€ ํ™•์ธ
154
+ - (์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์Œ)
155
+
156
+ ## ํ™•์ธ ์ฒดํฌ๋ฆฌ์ŠคํŠธ
157
+
158
+ PostgreSQL ์ „ํ™˜ ํ›„ ๋‹ค์Œ์„ ํ™•์ธํ•˜์„ธ์š”:
159
+
160
+ - [ ] `/api/admin/database/status`์—์„œ `type: "PostgreSQL"` ํ™•์ธ
161
+ - [ ] `connected: true` ํ™•์ธ
162
+ - [ ] Gemini API ํ‚ค ์ €์žฅ ํ›„ `config_count` ์ฆ๊ฐ€ ํ™•์ธ
163
+ - [ ] ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘ ํ›„์—๋„ ๋ฐ์ดํ„ฐ ์œ ์ง€ ํ™•์ธ
164
+
165
+ ## ์ถ”๊ฐ€ ์ •๋ณด
166
+
167
+ - **Supabase ๋ฌธ์„œ**: https://supabase.com/docs/guides/database
168
+ - **Neon ๋ฌธ์„œ**: https://neon.tech/docs
169
+ - **PostgreSQL ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด ํ˜•์‹**: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
170
+