π νκ΅μ΄ | English | ζ₯ζ¬θͺ
μμ리λ κ·Έλ§. μμμ μμνμΈμ.
λ§€μ£Ό μμ΄λ€μκ² ν μΌμ μν€λλΌ λͺ μκ°μ© μμ리νκ³ κ³μ κ°μ? λ§€μΌ λ°λ³΅λλ μ§μμΌμ΄ μ μν°κ° λκ³ μμ§ μλμ? DOOOZλ μ§λ£¨ν μΌμμ μλ κ° μ΄μ΄μ§λ λͺ¨νμΌλ‘ λ°κΏμ€λλ€. λΆλͺ¨κ° ν μΌμ μ νλ©΄, μμ΄κ° μλ£νκ³ , ν¬μΈνΈκ° μμ΄κ³ , μΊλ¦ν°κ° μ±μ₯νκ³ , μ°μ κΈ°λ‘μ΄ μ¨ κ°μ‘±μ νλλ‘ λ¬Άμ΄μ€λλ€.
μμ΄μ μ±μ₯μ 5λ μ΄μ μ§μΌλ³΄κ³ μΆμ κ°μ‘±μ μν΄ λ§λ€μμ΅λλ€.
μ DOOOZμΈκ° π€© (π μμΈ μ¬μ© κ°μ΄λ)
λΆλͺ¨κ° ν μΌμ λ±λ‘νλ©΄ μμ΄κ° μ€μ€λ‘ 체ν¬νκ³ , 체ν¬νλ μκ° ν¬μΈνΈκ° λ°λ‘ μμ λλ€. λΆλͺ¨ μΉμΈμ κΈ°λ€λ¦΄ νμ μμ΄ μμ΄κ° μ£Όλμ μΌλ‘ κ΄λ¦¬νλ ꡬ쑰μ λλ€. μμΈ ν¬μΈνΈλ λΆλͺ¨κ° λ±λ‘ν 보μ(μ©λ, νΉλ³ νλ λ±)μΌλ‘ κ΅νν μ μκ³ , 30λ¨κ³ λ 벨과 58μ’ λ°°μ§, 5λ¨κ³λ‘ μ§ννλ μΊλ¦ν°κ° μμ΄μκ² μ§μμ μΈ λκΈ°λ₯Ό λΆμ¬ν©λλ€.
| κΈ°λ₯ | μ€λͺ |
|---|---|
| μμ¨ μ²΄ν¬, μ¦μ λ°μ | μμ΄κ° ν μΌμ 체ν¬νλ©΄ ν¬μΈνΈκ° λ°λ‘ μ 립! λΆλͺ¨ μΉμΈ λΆνμ |
| μ‘°λ₯΄κΈ° | μμ΄κ° μΆκ°λ‘ ν μΌμ λΆλͺ¨μκ² μΈμ μμ² β λΆλͺ¨κ° ν¬μΈνΈλ₯Ό μ ν΄μ μ§κΈ |
| λ΄μ£ΌκΈ° | μ¬νμ΄λ μν λ , λΆλͺ¨κ° λ―Έμλ£ ν μΌμ ν¨λν°λ₯Ό λ©΄μ |
| 보μ κ΅ν | ν¬μΈνΈλ‘ 보μ(μ©λ λ±) κ΅ν μ μ² β λΆλͺ¨ μΉμΈ μ μ°¨κ° |
| μ€λ κ°λ κ²μν | 30λ 벨 + 58λ°°μ§ + 12μΊλ¦ν°(5λ¨κ³ μ§ν) β μλ κ° λκΈ° λΆμ¬ |
| μλ μ΄μ | μλ²½ 1μ ν μΌ μλ μμ± + λ―Έμλ£ ν¨λν°, μ λ 9μ 리λ§μΈλ |
| μ± μ€μΉ & νΈμ | ν νλ©΄μ μΆκ°νλ©΄ λ³λ μ±μΌλ‘ μ¬μ© + νΈμ μλ¦Ό |
| κ°μ‘± λ°μ΄ν° λ³΄νΈ | κ°μ‘± κ° λ°μ΄ν°λ₯Ό λ°μ΄ν°λ² μ΄μ€ λ 벨μμ μμ 격리 |
| λ€κ΅μ΄ | νκ΅μ΄ / English / ζ₯ζ¬θͺ + κΈλ‘λ² νμμ‘΄ |
π‘ μ± μ€μΉ ν (iOS): λ‘κ·ΈμΈ ν λ©μΈ νλ©΄μμ ν νλ©΄μ μΆκ°ν΄μ£ΌμΈμ. λ‘κ·ΈμΈ μ μ μ€μΉνλ©΄ νλ©΄ λ μ΄μμ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
![]() |
![]() |
|---|---|
| κ°μ‘± μμΈ | ν μΌ νν©(1) |
![]() |
![]() |
|---|---|
| ν μΌ νν©(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λ μ μ κ° μ§μ μμ λ§μ μλΉμ€λ₯Ό ꡬμΆνκ³ μ¬μ©νλ κ²μ μΆμ²ν©λλ€. μλ κ°μ΄λλ₯Ό μ°Έκ³ νμΈμ.
μ΄ λ¬Έμλ₯Ό λ°λΌ νλ €λ©΄ μ½κ°μ κ°λ° νκ²½ μ€μ μ΄ νμν©λλ€.
- ν°λ―Έλ μ΄κΈ° β 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 λ°°ν¬" μΉμ μ λ°λΌ νμΈμ.
| λ³μ | κΈ°λ³Έκ° | μ€λͺ |
|---|---|---|
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.comμ λ¬΄λ£ κ°μ ν, λμ보λμμ Add New β Projectλ‘ μ νλ‘μ νΈλ₯Ό λ§λλλ€. μ΄λ μνλ νλ‘μ νΈ μ΄λ¦μ μ§μ νλ©΄
https://λ΄νλ‘μ νΈ.vercel.appμ£Όμκ° λ©λλ€. -
Vercel CLIλ₯Ό μ€μΉν©λλ€:
npm i -g vercel
-
ν°λ―Έλμμ doooz μμ€κ° μλ ν΄λλ‘ μ΄λν©λλ€:
cd ~/Desktop/doooz(λ€μ΄λ‘λ κ²½λ‘μ λ§κ² μμ ) -
vercel linkλ₯Ό μ€νν©λλ€. λ‘κ·ΈμΈ ν "Link to existing project?"μ Yλ₯Ό μ ννκ³ , μμμ λ§λ νλ‘μ νΈλ₯Ό μ νν©λλ€. -
μμμ λ‘컬μ μ€μ ν νκ²½ λ³μλ₯Ό 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 productionNEXT_PUBLIC_SITE_URLλ§ Vercel λ°°ν¬ μ£Όμλ‘ λ³κ²½νκ³ , λλ¨Έμ§λ λ‘컬(.env.local)κ³Ό λμΌν κ°μ λ£μΌλ©΄ λ©λλ€. -
Supabaseμ λ°°ν¬ μ£Όμ λ±λ‘ β Supabase Dashboard β Auth β URL Configuration:
- Site URL: Vercel λ°°ν¬ μ£Όμλ‘ λ³κ²½ (μ:
https://λ΄νλ‘μ νΈ.vercel.app) - Redirect URLs: Vercel λ°°ν¬ μ£Όμ νμ μ 체 κ²½λ‘ μΆκ° (μ
λ ₯κ°:
https://λ΄νλ‘μ νΈ.vercel.app/**) β λ‘컬 λ¨κ³μμ λ±λ‘νlocalhost:3000μ κ·Έλλ‘ μ μ§
- Site URL: Vercel λ°°ν¬ μ£Όμλ‘ λ³κ²½ (μ:
ν°λ―Έλμμ μλ λͺ λ Ήμ μ λ ₯νκ³ μ μ κΈ°λ€λ¦¬λ©΄ 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 μλ리μ€
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λ‘ μμ λ‘κ² μ°Έμ¬ν΄μ£ΌμΈμ!



