8000 GitHub - taekim34/doooz ยท GitHub
[go: up one dir, main page]

Skip to content
taekim34Public

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

58 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŒ ํ•œ๊ตญ์–ด | English | ๆ—ฅๆœฌ่ชž

DOOOZ

์ž”์†Œ๋ฆฌ๋Š” ๊ทธ๋งŒ. ์‘์›์„ ์‹œ์ž‘ํ•˜์„ธ์š”.

๋งค์ฃผ ์•„์ด๋“ค์—๊ฒŒ ํ•  ์ผ์„ ์‹œํ‚ค๋А๋ผ ๋ช‡ ์‹œ๊ฐ„์”ฉ ์ž”์†Œ๋ฆฌํ•˜๊ณ  ๊ณ„์‹ ๊ฐ€์š”? ๋งค์ผ ๋ฐ˜๋ณต๋˜๋Š” ์ง‘์•ˆ์ผ์ด ์ „์Ÿํ„ฐ๊ฐ€ ๋˜๊ณ  ์žˆ์ง€ ์•Š๋‚˜์š”? DOOOZ๋Š” ์ง€๋ฃจํ•œ ์ผ์ƒ์„ ์ˆ˜๋…„๊ฐ„ ์ด์–ด์ง€๋Š” ๋ชจํ—˜์œผ๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค. ๋ถ€๋ชจ๊ฐ€ ํ•  ์ผ์„ ์ •ํ•˜๋ฉด, ์•„์ด๊ฐ€ ์™„๋ฃŒํ•˜๊ณ , ํฌ์ธํŠธ๊ฐ€ ์Œ“์ด๊ณ , ์บ๋ฆญํ„ฐ๊ฐ€ ์„ฑ์žฅํ•˜๊ณ , ์—ฐ์† ๊ธฐ๋ก์ด ์˜จ ๊ฐ€์กฑ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์ค๋‹ˆ๋‹ค.

์•„์ด์˜ ์„ฑ์žฅ์„ 5๋…„ ์ด์ƒ ์ง€์ผœ๋ณด๊ณ  ์‹ถ์€ ๊ฐ€์กฑ์„ ์œ„ํ•ด ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์™œ DOOOZ์ธ๊ฐ€ ๐Ÿคฉ (๐Ÿ‘‰ ์ƒ์„ธ ์‚ฌ์šฉ ๊ฐ€์ด๋“œ)

๋ถ€๋ชจ๊ฐ€ ํ• ์ผ์„ ๋“ฑ๋กํ•˜๋ฉด ์•„์ด๊ฐ€ ์Šค์Šค๋กœ ์ฒดํฌํ•˜๊ณ , ์ฒดํฌํ•˜๋Š” ์ˆœ๊ฐ„ ํฌ์ธํŠธ๊ฐ€ ๋ฐ”๋กœ ์Œ“์ž…๋‹ˆ๋‹ค. ๋ถ€๋ชจ ์Šน์ธ์„ ๊ธฐ๋‹ค๋ฆด ํ•„์š” ์—†์ด ์•„์ด๊ฐ€ ์ฃผ๋„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์Œ“์ธ ํฌ์ธํŠธ๋Š” ๋ถ€๋ชจ๊ฐ€ ๋“ฑ๋กํ•œ ๋ณด์ƒ(์šฉ๋ˆ, ํŠน๋ณ„ ํ™œ๋™ ๋“ฑ)์œผ๋กœ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๊ณ , 30๋‹จ๊ณ„ ๋ ˆ๋ฒจ๊ณผ 58์ข… ๋ฐฐ์ง€, 5๋‹จ๊ณ„๋กœ ์ง„ํ™”ํ•˜๋Š” ์บ๋ฆญํ„ฐ๊ฐ€ ์•„์ด์—๊ฒŒ ์ง€์†์ ์ธ ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ์„ค๋ช…
์ž์œจ ์ฒดํฌ, ์ฆ‰์‹œ ๋ฐ˜์˜ ์•„์ด๊ฐ€ ํ• ์ผ์„ ์ฒดํฌํ•˜๋ฉด ํฌ์ธํŠธ๊ฐ€ ๋ฐ”๋กœ ์ ๋ฆฝ! ๋ถ€๋ชจ ์Šน์ธ ๋ถˆํ•„์š”
์กฐ๋ฅด๊ธฐ ์•„์ด๊ฐ€ ์ถ”๊ฐ€๋กœ ํ•œ ์ผ์„ ๋ถ€๋ชจ์—๊ฒŒ ์ธ์ • ์š”์ฒญ โ†’ ๋ถ€๋ชจ๊ฐ€ ํฌ์ธํŠธ๋ฅผ ์ •ํ•ด์„œ ์ง€๊ธ‰
๋ด์ฃผ๊ธฐ ์—ฌํ–‰์ด๋‚˜ ์•„ํ”ˆ ๋‚ , ๋ถ€๋ชจ๊ฐ€ ๋ฏธ์™„๋ฃŒ ํ• ์ผ์˜ ํŒจ๋„ํ‹ฐ๋ฅผ ๋ฉด์ œ
๋ณด์ƒ ๊ตํ™˜ ํฌ์ธํŠธ๋กœ ๋ณด์ƒ(์šฉ๋ˆ ๋“ฑ) ๊ตํ™˜ ์‹ ์ฒญ โ†’ ๋ถ€๋ชจ ์Šน์ธ ์‹œ ์ฐจ๊ฐ
์˜ค๋ž˜ ๊ฐ€๋Š” ๊ฒŒ์ž„ํ™” 30๋ ˆ๋ฒจ + 58๋ฐฐ์ง€ + 12์บ๋ฆญํ„ฐ(5๋‹จ๊ณ„ ์ง„ํ™”) โ€” ์ˆ˜๋…„๊ฐ„ ๋™๊ธฐ ๋ถ€์—ฌ
์ž๋™ ์šด์˜ ์ƒˆ๋ฒฝ 1์‹œ ํ• ์ผ ์ž๋™ ์ƒ์„ฑ + ๋ฏธ์™„๋ฃŒ ํŒจ๋„ํ‹ฐ, ์ €๋… 9์‹œ ๋ฆฌ๋งˆ์ธ๋”
์•ฑ ์„ค์น˜ & ํ‘ธ์‹œ ํ™ˆ ํ™”๋ฉด์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋ณ„๋„ ์•ฑ์œผ๋กœ ์‚ฌ์šฉ + ํ‘ธ์‹œ ์•Œ๋ฆผ
๊ฐ€์กฑ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๊ฐ€์กฑ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ ˆ๋ฒจ์—์„œ ์™„์ „ ๊ฒฉ๋ฆฌ
๋‹ค๊ตญ์–ด ํ•œ๊ตญ์–ด / English / ๆ—ฅๆœฌ่ชž + ๊ธ€๋กœ๋ฒŒ ํƒ€์ž„์กด

๐Ÿ’ก ์•ฑ ์„ค์น˜ ํŒ (iOS): ๋กœ๊ทธ์ธ ํ›„ ๋ฉ”์ธ ํ™”๋ฉด์—์„œ ํ™ˆ ํ™”๋ฉด์— ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”. ๋กœ๊ทธ์ธ ์ „์— ์„ค์น˜ํ•˜๋ฉด ํ™”๋ฉด ๋ ˆ์ด์•„์›ƒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฐ์ƒท ๐Ÿ“ธ

๊ฐ€์กฑ ์ƒ์„ธ ํ• ์ผ ํ˜„ํ™ฉ(1)
๊ฐ€์กฑ ์ƒ์„ธ ํ• ์ผ ํ˜„ํ™ฉ(1)
ํ• ์ผ ํ˜„ํ™ฉ(2) ๋ณด์ƒ ๊ด€๋ฆฌ
ํ• ์ผ ํ˜„ํ™ฉ(2) ๋ณด์ƒ ๊ด€๋ฆฌ

๊ธฐ์ˆ  ์Šคํƒ ๐Ÿ’ก

  • Next.js 15 (App Router, RSC) + React 19 + TypeScript 5
  • Tailwind + shadcn ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธ
  • Supabase (Postgres, Auth, RLS)
  • Zod ์Šคํ‚ค๋งˆ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
  • Web Push API (VAPID)
  • Vercel ๋ฐฐํฌ

๋ฏธ๋ฆฌ ์ค€๋น„๋œ ์„œ๋น„์Šค ์‚ฌ์šฉํ•˜๊ธฐ ๐ŸŒ

DOOOZ๋Š” ์ด๋ฏธ์ง€/ํŒŒ์ผ ์—…๋กœ๋“œ ์—†์ด ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋งŒ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ๋น„์šฉ์ด ๋งค์šฐ ์ž‘์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ๊ตฌ์ถ• ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์‹ถ์€ ๋ถ„์€ ์œ„ ์ฃผ์†Œ์—์„œ ํšŒ์›๊ฐ€์ž… ํ›„ ์‚ฌ์šฉํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ๋Š” ๋ฌด๋ฃŒ tier๋กœ ์šด์˜ ์ค‘์ด๋ฉฐ, ๊ฐ€์ž…๋œ ๊ฐ€์กฑ์ด 100๊ณณ์„ ๋„˜์œผ๋ฉด Supabase๋ฅผ ์œ ๋ฃŒ tier๋กœ, 5,000๊ฐ€์กฑ์„ ๋„˜์œผ๋ฉด Vercel๋„ ์œ ๋ฃŒ tier๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. (์ตœ๋Œ€ ์•ฝ 15,000๊ฐ€์กฑ, 50,000๋ช…๊นŒ์ง€ ์ˆ˜์šฉ ๊ฐ€๋Šฅ ์˜ˆ์ƒ)

๋‹ค๋งŒ, DOOOZ๋Š” ์œ ์ €๊ฐ€ ์ง์ ‘ ์ž์‹ ๋งŒ์˜ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ง์ ‘ ๊ตฌ์ถ• - ์ฒ˜์Œ์ด์‹  ๋ถ„์€ ๊ตฌ๊ธ€/AI์—๊ฒŒ ๋ฌผ์–ด๋ณด์„ธ์š” ๐Ÿ”ฐ

์ด ๋ฌธ์„œ๋ฅผ ๋”ฐ๋ผ ํ•˜๋ ค๋ฉด ์•ฝ๊ฐ„์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ํ„ฐ๋ฏธ๋„ ์—ด๊ธฐ โ€” Mac์€ ํ„ฐ๋ฏธ๋„, Windows๋Š” PowerShell์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์—ฌ๋Š” ๋ฒ•์„ ๋ชจ๋ฅด์‹œ๋ฉด ๊ตฌ๊ธ€์—์„œ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ AI์—๊ฒŒ ๋ฌผ์–ด๋ณด์„ธ์š”.
  • git์ด ์•ˆ ๋œ๋‹ค๋ฉด โ€” ๊ตฌ๊ธ€์—์„œ "Git ์„ค์น˜ ๋ฐฉ๋ฒ•" ์„ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ AI์—๊ฒŒ ๋ฌผ์–ด๋ณด์„ธ์š”.
  • npm/npx๊ฐ€ ์•ˆ ๋œ๋‹ค๋ฉด โ€” ๊ตฌ๊ธ€์—์„œ "Node.js ์„ค์น˜ ๋ฐฉ๋ฒ•" ์„ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ AI์—๊ฒŒ ๋ฌผ์–ด๋ณด์„ธ์š”.

๋‚ด ์ปดํ“จํ„ฐ ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ๐Ÿ–ฅ๏ธ

# 1. ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ณ  ์‹ถ์€ ํด๋”๋กœ ์ด๋™ (์˜ˆ: ๋ฐ”ํƒ•ํ™”๋ฉด)
cd ~/Desktop

# 2. ํด๋ก  & ์„ค์น˜
git clone https://github.com/taekim34/doooz.git
cd doooz && npm install

# 3. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ (.env.example์„ ๋ณต์‚ฌํ•ด์„œ .env.local ์ƒ์„ฑ)
cp .env.example .env.local   # ์•„๋ž˜ ํ•„์ˆ˜ ๊ฐ’์„ ์ฑ„์›Œ์ฃผ์„ธ์š”

# 4. ๊ฐœ๋ฐœ ์„œ๋ฒ„
npm run dev               # http://localhost:3000

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

๋ณต์‚ฌ๋œ .env.local์— ํ•„์ˆ˜๊ฐ’์€ ๋น„์›Œ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์—ด๊ณ , ๋‹ค์Œ ์„น์…˜์˜ ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ๊ฐ’์„ ์ฑ„์›Œ์ฃผ์„ธ์š”.

ํ•„์ˆ˜ (๋กœ์ปฌ ์‹คํ–‰์— ํ•„์š”ํ•œ ๊ฐ’)

1. Supabase ์—ฐ๊ฒฐ ์ •๋ณด โ€” supabase.com์—์„œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„, ์ขŒ์ธก ๋ฉ”๋‰ด Project Settings โ†’ API Keys ์—์„œ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜ ์–ด๋””์„œ ์ฐพ๋‚˜์š”
NEXT_PUBLIC_SUPABASE_URL ํ”„๋กœ์ ํŠธ ํ™ˆ โ†’ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์•„๋ž˜ ํ‘œ์‹œ๋œ URL (https://xxx.supabase.co)
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY Publishable key (๊ณต๊ฐœ ํ‚ค)
SUPABASE_SERVICE_SECRET_KEY Secret key (โš ๏ธ ์ด ํ‚ค๋Š” ์ ˆ๋Œ€ ์™ธ๋ถ€์— ๊ณต๊ฐœํ•˜์ง€ ๋งˆ์„ธ์š”)

Supabase์— ๋กœ์ปฌ ์ฃผ์†Œ ๋“ฑ๋ก โ€” Supabase Dashboard โ†’ Auth โ†’ URL Configuration์—์„œ:

  • Site URL: http://localhost:3000
  • Redirect URLs: http://localhost:3000 ํ•˜์œ„ ์ „์ฒด ๊ฒฝ๋กœ ์ถ”๊ฐ€ (์ž…๋ ฅ๊ฐ’: http://localhost:3000/**)

์ด ์„ค์ •์ด ์—†์œผ๋ฉด ๋กœ์ปฌ์—์„œ ๋กœ๊ทธ์ธ์ด ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

2. ์‚ฌ์ดํŠธ ์ฃผ์†Œ โ€” ๋กœ์ปฌ์—์„œ๋Š” ์•„๋ž˜ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์„ธ์š”.

๋ณ€์ˆ˜ ๊ฐ’
NEXT_PUBLIC_SITE_URL http://localhost:3000

3. ํ‘ธ์‹œ ์•Œ๋ฆผ ํ‚ค โ€” ํ„ฐ๋ฏธ๋„์—์„œ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด 2๊ฐœ์˜ ํ‚ค๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด์„œ ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”.

npx web-push generate-vapid-keys
๋ณ€์ˆ˜ ๊ฐ’
NEXT_PUBLIC_VAPID_PUBLIC_KEY ์ถœ๋ ฅ๋œ Public Key
VAPID_PRIVATE_KEY ์ถœ๋ ฅ๋œ Private Key

4. ํฌ๋ก  ๋น„๋ฐ€๋ฒˆํ˜ธ โ€” ์•„๋ฌด ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ ์ง์ ‘ ๋งŒ๋“ค์–ด ๋„ฃ์œผ์„ธ์š”. ๋‚˜์ค‘์— ์ƒˆ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: my-secret-123)

๋ณ€์ˆ˜ ๊ฐ’
CRON_SECRET ์ž์œ ๋กญ๊ฒŒ ์ •ํ•œ ๋น„๋ฐ€ ๋ฌธ์ž์—ด

์—ฌ๊ธฐ๊นŒ์ง€ ์„ค์ •ํ•˜๋ฉด npm run dev๋กœ ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท์— ๋ฐฐํฌํ•˜๋ ค๋ฉด ์•„๋ž˜ "Vercel ๋ฐฐํฌ" ์„น์…˜์„ ๋”ฐ๋ผ ํ•˜์„ธ์š”.

์„ ํƒ (.env.example์— ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ์œผ๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ์จ๋„ ๋ฉ๋‹ˆ๋‹ค)

๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
NEXT_PUBLIC_APP_NAME DOOOZ ์•ฑ ํ‘œ์‹œ ์ด๋ฆ„
NEXT_PUBLIC_APP_DESCRIPTION Family tasks, points... ์•ฑ ์„ค๋ช…
NEXT_PUBLIC_THEME_COLOR #7c3aed ์•ฑ ํ…Œ๋งˆ ์ƒ‰์ƒ
NEXT_PUBLIC_DEFAULT_LOCALE en ๊ธฐ๋ณธ ์–ธ์–ด
NEXT_PUBLIC_LOCALE_COOKIE doooz_locale ์–ธ์–ด ์„ค์ • ์ฟ ํ‚ค ์ด๋ฆ„
NEXT_PUBLIC_SYNTHETIC_EMAIL_DOMAIN dooooz.invalid ์•„์ด ๊ณ„์ •์šฉ ๊ฐ€์งœ ์ด๋ฉ”์ผ ๋„๋ฉ”์ธ (์‹ค์ œ ์ด๋ฉ”์ผ ์ „์†ก ์—†์Œ). ์‚ฌ์ดํŠธ ๋„๋ฉ”์ธ๊ณผ ์ผ์น˜์‹œํ‚ฌ ํ•„์š”๋Š” ์—†์ง€๋งŒ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๊ถŒ์žฅ.
VAPID_CONTACT_EMAIL mailto:noreply@dooooz.invalid ํ‘ธ์‹œ ์„œ๋น„์Šค ์—ฐ๋ฝ์ฒ˜ URI. ์œ„์™€ ๋™์ผ โ€” ๋„๋ฉ”์ธ ์ผ์น˜ ๊ถŒ์žฅ์ด๋‚˜ ํ•„์ˆ˜ ์•„๋‹˜.
NEXT_PUBLIC_FAMILY_STORAGE_KEY doooz_family_name ๊ฐ€์กฑ ์ด๋ฆ„์šฉ localStorage ํ‚ค

์šฐ๋ฆฌ ๊ฐ€์กฑ ์˜จ๋ผ์ธ ์„œ๋น„์Šค ๊ตฌ์ถ•ํ•˜๊ธฐ ๐Ÿš€๐Ÿ”ฅ

์ธํ„ฐ๋„ท ๋ฐฐํฌ ์„ค์ •ํ•˜๊ธฐ (Vercel)

์ด ๋‹จ๊ณ„๋Š” ์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ ์„ค์ •ํ•˜๋ฉด ๋‹ค์‹œ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

  1. vercel.com์— ๋ฌด๋ฃŒ ๊ฐ€์ž… ํ›„, ๋Œ€์‹œ๋ณด๋“œ์—์„œ Add New โ†’ Project๋กœ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด๋•Œ ์›ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋ฉด https://๋‚ดํ”„๋กœ์ ํŠธ.vercel.app ์ฃผ์†Œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

  2. Vercel CLI๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

    npm i -g vercel
  3. ํ„ฐ๋ฏธ๋„์—์„œ doooz ์†Œ์Šค๊ฐ€ ์žˆ๋Š” ํด๋”๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค: cd ~/Desktop/doooz (๋‹ค์šด๋กœ๋“œ ๊ฒฝ๋กœ์— ๋งž๊ฒŒ ์ˆ˜์ •)

  4. vercel link๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ํ›„ "Link to existing project?"์— Y๋ฅผ ์„ ํƒํ•˜๊ณ , ์œ„์—์„œ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  5. ์œ„์—์„œ ๋กœ์ปฌ์— ์„ค์ •ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ Vercel์—๋„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์„ ํ•˜๋‚˜์”ฉ ์‹คํ–‰ํ•˜์„ธ์š”. ๋ช…๋ น์„ ์น˜๋ฉด ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ผ๋Š” ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค. ๊ฐ’์„ ๋ถ™์—ฌ๋„ฃ๊ณ  Enter๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    vercel env add NEXT_PUBLIC_SITE_URL production              # โš ๏ธ Vercel ๋ฐฐํฌ ์ฃผ์†Œ ์ž…๋ ฅ (์˜ˆ: https://๋‚ดํ”„๋กœ์ ํŠธ.vercel.app)
    vercel env add NEXT_PUBLIC_SUPABASE_URL production
    vercel env add NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY production
    vercel env add SUPABASE_SERVICE_SECRET_KEY production
    vercel env add NEXT_PUBLIC_VAPID_PUBLIC_KEY production
    vercel env add VAPID_PRIVATE_KEY production
    vercel env add CRON_SECRET production

    NEXT_PUBLIC_SITE_URL๋งŒ Vercel ๋ฐฐํฌ ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ๋กœ์ปฌ(.env.local)๊ณผ ๋™์ผํ•œ ๊ฐ’์„ ๋„ฃ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  6. Supabase์— ๋ฐฐํฌ ์ฃผ์†Œ ๋“ฑ๋ก โ€” Supabase Dashboard โ†’ Auth โ†’ URL Configuration:

    • Site URL: Vercel ๋ฐฐํฌ ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝ (์˜ˆ: https://๋‚ดํ”„๋กœ์ ํŠธ.vercel.app)
    • Redirect URLs: Vercel ๋ฐฐํฌ ์ฃผ์†Œ ํ•˜์œ„ ์ „์ฒด ๊ฒฝ๋กœ ์ถ”๊ฐ€ (์ž…๋ ฅ๊ฐ’: https://๋‚ดํ”„๋กœ์ ํŠธ.vercel.app/**) โ€” ๋กœ์ปฌ ๋‹จ๊ณ„์—์„œ ๋“ฑ๋กํ•œ localhost:3000์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€

๋ฐฐํฌํ•˜๊ธฐ ๐Ÿฅณ

ํ„ฐ๋ฏธ๋„์—์„œ ์•„๋ž˜ ๋ช…๋ น์„ ์ž…๋ ฅํ•˜๊ณ  ์ž ์‹œ ๊ธฐ๋‹ค๋ฆฌ๋ฉด DOOOZ ์†Œ์Šค๊ฐ€ Vercel ์„œ๋ฒ„๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

vercel --prod

๋ฐฐํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋‚˜์™€ ์šฐ๋ฆฌ ๊ฐ€์กฑ๋“ค์ด ์ปดํ“จํ„ฐ์—์„œ๋„, ๋ชจ๋ฐ”์ผ์—์„œ๋„ https://๋‚ดํ”„๋กœ์ ํŠธ.vercel.app ์œผ๋กœ ์ง์ ‘ ์ ‘์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

์ดํ›„ ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ vercel --prod๋กœ ๋ฐฐํฌํ•˜๋ฉด ์ธํ„ฐ๋„ท์— ๋ฐฐํฌ๋œ ์„œ๋น„์Šค๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•ํ•˜๊ธฐ

์ด ๋ฌธ์„œ๋Š” ๋กœ์ปฌ ์ปดํ“จํ„ฐ์™€ ์ธํ„ฐ๋„ท ๋ฐฐํฌ ๋ฒ„์ „์ด ๊ฐ™์€ ํ™˜๊ฒฝ์„ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ์†Œ์Šค๋ฅผ ์ˆ˜์ •, ๊ฐœ๋ฐœํ•˜์‹ค ๋ถ„๋“ค์€ ๋ณ„๋„์˜ dev ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽฉ ๋งˆ๋ฒ•์˜ ํ”„๋กฌํ”„ํŠธ โ€” ์•„์ด์™€ ํ•จ๊ป˜ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”

๋น„์Šทํ•œ ์•ฑ์„ ์ง์ ‘ ๋งŒ๋“ค์–ด ๋ณด๊ณ  ์‹ถ์œผ์‹ ๊ฐ€์š”? AI ์–ด์‹œ์Šคํ„ดํŠธ(Claude, ChatGPT, Gemini ๋“ฑ)์— ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ๋น„์Šทํ•œ ์•ฑ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ด๋“œ๋ฅผ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์ „ ์ค€๋น„

AI ์ฝ”๋”ฉ ๋„๊ตฌ(Claude Code ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, Supabase MCP๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด AI๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ "Supabase best practices๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๋งŒ๋“ค์–ด์ค˜"๋ผ๊ณ  ์ง€์‹œํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ž˜ ๋ชฐ๋ผ๋„ Supabase ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์„ ์•ˆ์ •์ ์œผ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. Vercel CLI๋Š” ์œ„ "์ธํ„ฐ๋„ท ๋ฐฐํฌ ์„ค์ •ํ•˜๊ธฐ" ๋‹จ๊ณ„์—์„œ ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กฌํ”„ํŠธ

์ „์ฒด ํ”„๋กฌํ”„ํŠธ๋ฅผ AI ์ฑ„ํŒ…์— ๋ณต์‚ฌํ•˜๋ฉด ํ•œ ๋ฒˆ์— ๋™์ž‘ํ•˜๋Š” ์•ฑ์ด ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค.

์•ˆ๋‚ด์— ๋”ฐ๋ผ ํ”„๋กฌํ”„ํŠธ๋ฅผ ํ•˜๋‚˜์”ฉ ์ž…๋ ฅํ•˜๋ฉฐ ๋‹จ๊ณ„์ ์œผ๋กœ ์•ฑ์„ ๋งŒ๋“ค์–ด ๊ฐ‘๋‹ˆ๋‹ค.

์•„์ด์™€ ํ•จ๊ป˜ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋”ฐ๋ผ ํ•˜๋ฉด์„œ "๋‚ด๊ฐ€ ๋งŒ๋“  ์•ฑ"์„ ๊ฒฝํ—˜ํ•ด ๋ณด์„ธ์š”.

์ฃผ์š” ๋ช…๋ น์–ด ๐Ÿ“œ

๋ช…๋ น์–ด ์šฉ๋„
npm run dev ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰ (http://localhost:3000)
npm run build ๋ฐฐํฌ ์ „ ๋นŒ๋“œ ์—๋Ÿฌ ํ™•์ธ
npm run typecheck ํƒ€์ž… ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ
npm run lint ์ฝ”๋“œ ์Šคํƒ€์ผ ๊ฒ€์‚ฌ
vercel --prod ์ธํ„ฐ๋„ท์— ๋ฐฐํฌ

ํด๋” ๊ตฌ์กฐ ๐Ÿ“‚

src/
โ”œโ”€ app/
โ”‚  โ”œโ”€ (auth)/              ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…, ์˜จ๋ณด๋”ฉ
โ”‚  โ”œโ”€ (app)/               ๋ณดํ˜ธ๋œ ๋ผ์šฐํŠธ โ€” ํ™ˆ, ํ•  ์ผ, ํฌ์ธํŠธ, ๋ณด์ƒ, ์บ๋ฆญํ„ฐ, ๊ฐ€์กฑ, ์„ค์ •
โ”‚  โ””โ”€ api/                 ๋ผ์šฐํŠธ ํ•ธ๋“ค๋Ÿฌ + ํฌ๋ก  (์ €๋… ์•Œ๋ฆผ, ์ž์ • ๋กค์˜ค๋ฒ„)
โ”œโ”€ features/
โ”‚  โ”œโ”€ auth/                requireUser, getCurrentAuth
โ”‚  โ”œโ”€ tasks/               ์„œ๋ฒ„ ์•ก์…˜ (์ˆ˜์ •, ๋ด์ฃผ๊ธฐ)
โ”‚  โ”œโ”€ children/            ์ˆœ์œ„ ๊ณ„์‚ฐ
โ”‚  โ””โ”€ characters/          ์ด๋ชจ์ง€ ๋งต
โ”œโ”€ lib/
โ”‚  โ”œโ”€ supabase/            client, server, admin ํด๋ผ์ด์–ธํŠธ + ํƒ€์ž… Database
โ”‚  โ”œโ”€ datetime/            ๊ฐ€์กฑ ์‹œ๊ฐ„๋Œ€ ์œ ํ‹ธ๋ฆฌํ‹ฐ + ์ฃผ์ž… ๊ฐ€๋Šฅํ•œ clock
โ”‚  โ”œโ”€ i18n/                ko.json, ja.json, en.json + ๋ฒˆ์—ญ ํ—ฌํผ
โ”‚  โ”œโ”€ push/                ์›น ํ‘ธ์‹œ ์•Œ๋ฆผ ์ „์†ก
โ”‚  โ”œโ”€ level.ts             L1-L30 ์ž„๊ณ„๊ฐ’ ๊ณ„์‚ฐ
โ”‚  โ”œโ”€ streak.ts            ์—ฐ์† ์ผ์ˆ˜ ๊ณ„์‚ฐ
โ”‚  โ””โ”€ invariants.ts        I1-I10 ์›์žฅ ๊ฒ€์ฆ ํ—ฌํผ
โ”œโ”€ schemas/                Zod ์Šคํ‚ค๋งˆ (๊ฐ€์กฑ, ์‚ฌ์šฉ์ž, ํ•  ์ผ, ํฌ์ธํŠธ, ๋ณด์ƒ, ๋ฑƒ์ง€)
โ””โ”€ components/ui/          shadcn ์Šคํƒ€์ผ ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ

supabase/
โ”œโ”€ migrations/             ์Šคํ‚ค๋งˆ, RLS, ํŠธ๋ฆฌ๊ฑฐ, ์ธ๋ฑ์Šค
โ””โ”€ seed.sql                ์บ๋ฆญํ„ฐ 12๊ฐœ + ๋ฑƒ์ง€ 58๊ฐœ

tests/
โ”œโ”€ unit/                   ์†Œ์Šค ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ์œ„์น˜
โ”œโ”€ integration/            RLS ๋งคํŠธ๋ฆญ์Šค
โ””โ”€ e2e/                    Playwright ์‹œ๋‚˜๋ฆฌ์˜ค

๋ฌด๋ฃŒ tier ์šด์˜ ๊ฐ€์ด๋“œ ๐Ÿ’ฐ

DOOOZ๋Š” ์ด๋ฏธ์ง€/ํŒŒ์ผ ์—…๋กœ๋“œ ์—†์ด ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋งŒ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์ด ๋งค์šฐ ์ ์Šต๋‹ˆ๋‹ค. 1๊ฐ€์กฑ = ๋ถ€๋ชจ 1๋ช… + ์•„์ด 23๋ช…, ํ•˜๋ฃจ ํ• ์ผ ์ฒดํฌ 1015๊ฑด ๊ธฐ์ค€:

๊ตฌ๊ฐ„ ์›” ๋น„์šฉ ์ตœ๋Œ€ ๊ฐ€์กฑ ์ˆ˜ (์˜ˆ์ƒ) ๊ตฌ์„ฑ
๋ฌด๋ฃŒ $0 ~200๊ฐ€์กฑ Supabase Free + Vercel Free
์ค‘๊ทœ๋ชจ ~$27 ~5,000๊ฐ€์กฑ Supabase Pro ($25) + DB ($2) + Vercel Free
๋Œ€๊ทœ๋ชจ ~$50 ~15,000๊ฐ€์กฑ Supabase Pro ($25) + DB ($5) + Vercel Pro ($20)
  • 1๊ฐ€์กฑ ์ „์šฉ์ด๋ฉด ๋ฌด๋ฃŒ ํ•œ๋„์˜ 1~2%๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด?

  • ~200๊ฐ€์กฑ ์ดˆ๊ณผ โ€” DB ์šฉ๋Ÿ‰๊ณผ Supabase ๋™์‹œ์ ‘์† ์ œํ•œ์— ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Supabase Pro๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ์ถ”๊ฐ€ DB๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š”.
  • ~5,000๊ฐ€์กฑ ์ดˆ๊ณผ โ€” Vercel์—์„œ ๋งค์ผ ์ƒˆ๋ฒฝ 1์‹œ์— ์‹คํ–‰๋˜๋Š” ํ• ์ผ ์ •๋ฆฌ ์ž‘์—…(ํฌ๋ก )์— ๋ณ‘๋ชฉ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Vercel Pro๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์„ธ์š”. Vercel Pro๋Š” ํฌ๋ก  ์ž‘์—… ์ œํ•œ์ด ์—†์–ด ๋” ๋งŽ์€ ์‹œ๊ฐ„๋Œ€๋‚˜ ๊ธ€๋กœ๋ฒŒ ๋Œ€์‘๊นŒ์ง€ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋‹ˆํ„ฐ๋ง ํฌ์ธํŠธ

  • Supabase Dashboard โ†’ Settings โ†’ Billing: ๋Œ€์—ญํญ, DB ์šฉ๋Ÿ‰ ํ™•์ธ
  • Vercel Dashboard โ†’ Usage: ๋Œ€์—ญํญ, ํ•จ์ˆ˜ ์‹คํ–‰ ์‹œ๊ฐ„ ํ™•์ธ

์˜คํ”ˆ์†Œ์Šค ์ฐธ์—ฌ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค ๐Ÿค

DOOOZ๋Š” ๋ˆ„๊ตฌ๋‚˜ ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ถ„๋“ค์˜ ๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

  • ๐ŸŽจ ๋””์ž์ด๋„ˆ โ€” UI/UX ๊ฐœ์„ ์— ๋„์›€์„ ์ฃผ์‹ค ๋””์ž์ด๋„ˆ๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๐ŸŒ ๋‹ค๊ตญ์–ด & ๊ธ€๋กœ๋ฒŒ ํ™˜๊ฒฝ โ€” ์ƒˆ๋กœ์šด ์–ธ์–ด ์ถ”๊ฐ€, ๋‹ค์–‘ํ•œ ๊ตญ๊ฐ€ ํ™˜๊ฒฝ์— ๋งž๋Š” ๊ฐœ์„ ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ํ…Œ์ŠคํŠธ ๊ฐ€์กฑ โ€” ์•ฑ์„ ๋งค์ผ ์‚ฌ์šฉํ•˜๋ฉฐ ์ ๊ทน์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•ด์ฃผ์‹ค ๊ฐ€์กฑ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ๊ตฌ์ถ•๋œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ด๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Issue๋‚˜ Pull Request๋กœ ์ž์œ ๋กญ๊ฒŒ ์ฐธ์—ฌํ•ด์ฃผ์„ธ์š”!

๋ผ์ด์„ ์Šค ๐Ÿ“„

Apache License 2.0

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

0