๋ฌ๋ธ๋ผ์ด๋ธ! ํ์ค๋ ธ์๋ผ ์ฌํ์ ์ค์ฟจ ์์ด๋ ํด๋ฝ(่ฎใ็ฉบๅฅณๅญฆ้ขในใฏใผใซใขใคใใซใฏใฉใ) ๊ด๋ จ ์์ ์์ฒญ ๊ธฐ๋ก์ ๊ด๋ฆฌํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
ํ์ฌ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ํ๋ฐํ ์งํ ์ค์ด๋ผ ์ ๊ทน์ ์ธ Pull Request ๋ฐ์์ด ์ด๋ ต์ต๋๋ค. ๋ฒ๊ทธ๋ Issue, ์๊ฒฌ์ Discussion์ ํ์ฉํด ์ฃผ์ธ์.
- ์์ฒญ ๊ธฐ๋ก ๋๊ธฐํ: ๋ก์ปฌ ํ๊ฒฝ์์๋ ํ์ผ ์์คํ
(
json)์, ๋ฐฐํฌ ํ๊ฒฝ์์๋localStorage๋ฅผ ํ์ฉํ์ฌ ์์ฒญ ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. - ๋ค์ํ ํํฐ๋ง: ์์ฒญ ์ฌ๋ถ, ์นดํ ๊ณ ๋ฆฌ(์คํ ๋ฆฌ, ์์ , FesxLIVE ๋ฑ), ๊ฒ์์ด ๊ธฐ๋ฐ ํํฐ๋ง์ ์ง์ํฉ๋๋ค.
- ๊ธฐ์๋ณ ๊ด๋ฆฌ: ํ์ค๋ ธ์๋ผ ์ฌํ์ ๊ธฐ์๋ณ๋ก ์์์ ๋ชจ์๋ณผ ์ ์์ต๋๋ค.
- ์งํ๋ฅ ์ถ์ : ์นดํ ๊ณ ๋ฆฌ๋ณ ๋ง์ถค ์งํ๋ฅ ๋ฐ๋ฅผ ํตํด ์์ฒญ ํํฉ์ ์๊ฐ์ ์ผ๋ก ํ์ ํฉ๋๋ค.
- ๋ฐ์ํ ๋์์ธ: @daangn์ Seed Design System์ ์ ์ญ์์ ์ฌ์ฉ ๋ฐ ๊ฐ์ด๋๋ผ์ธ์ ์ ๊ทน ์ค์ํฉ๋๋ค.
- ์์ฒญ ์์คํ : ๋๋ฝ๋ ์ฝํ ์ธ ์ถ๊ฐ๋ ์ ๋ณด ์์ ์ Supabase PostgresDB ์ฐ๋์ ํตํด ์์ฒญํ ์ ์์ต๋๋ค.
- Framework: Next.js 16.2 (App Router)
- UI & Interaction: React 19, Radix UI, Seed Design System
- Database (Requests): Supabase
- Styling: Vanilla CSS (CSS Variables)
- Deployment: Vercel
link-like-tracker/
โโโ data/ # ํ๋ ์ด๋ฆฌ์คํธ ๋ฐ์ดํฐ (JSON)
โโโ src/
โ โโโ app/ # Next.js App Router (Page, Layout, Server Actions)
โ โ โโโ actions/ # Supabase ์ฐ๋ Server Actions
โ โ โโโ add-request/ # ์ฝํ
์ธ ์ถ๊ฐ ์์ฒญ ํ์ด์ง
โ โ โโโ edit-request/ # ์ ๋ณด ์์ ์์ฒญ ํ์ด์ง
โ โ โโโ settings/ # ์ฌ์ฉ์ ์ค์ ํ์ด์ง
โ โ โโโ api/ # API Routes (๋ก์ปฌ ์คํ ๋ฆฌ์ง ํธํ์ฉ)
โ โโโ components/ # React ๊ณตํต ์ปดํฌ๋ํธ
โ โ โโโ PlaylistView.tsx # ๋ฉ์ธ ์์ฒญ ๋ชฉ๋ก ๋ทฐ (ํต์ฌ ๋ก์ง)
โ โ โโโ SettingsProvider.tsx # ์ ์ญ ์ค์ ์ปจํ
์คํธ
โ โ โโโ VideoItem.tsx # ๊ฐ๋ณ ์์ ํญ๋ชฉ ๋ฐ ์ธํฐ๋์
โ โโโ lib/ # ์ ํธ๋ฆฌํฐ ๋ฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ก์ง
โ โ โโโ supabase.ts # Supabase ํด๋ผ์ด์ธํธ ์ค์
โ โ โโโ video-category.ts # ์์ ์๋ ๋ถ๋ฅ ๋ก์ง
โ โ โโโ playlist.json.ts # JSON ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์
์ถ๋ ฅ
โ โโโ ui/ # ๋์์ธ ์์คํ
๊ธฐ๋ฐ ์ปค์คํ
UI ์ปดํฌ๋ํธ
โ โโโ types/ # TypeScript ๊ณตํต ํ์
์ ์
- ์์ฒญ ํ ๊ธ: ์์ ํญ๋ชฉ์ ์ฒดํฌ๋ฐ์ค๋ฅผ ํตํด ์์ฒญ ์ฌ๋ถ๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
- ์นดํ
๊ณ ๋ฆฌ ์๋ ๋ถ๋ฅ: ์ ๋ชฉ ํจํด์ ๋ถ์ํ์ฌ
์คํ ๋ฆฌ,์์,FesxLIVE,WithรMEETS๋ฑ์ผ๋ก ์๋ ๋ถ๋ฅํฉ๋๋ค. - ์ปค์คํ ๋ถ๋ฅ: ์๋ ๋ถ๋ฅ๊ฐ ํ๋ฆฐ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์ง์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๊ต์ ํ ์ ์์ต๋๋ค.
- ๋ฉํฐ ์นดํ ๊ณ ๋ฆฌ ํํฐ: ์ฌ๋ฌ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋์์ ์ ํํ์ฌ ํํฐ๋งํ ์ ์์ต๋๋ค.
- ์์ฒญ ํํฐ: '์ ์ฒด', '๋ฏธ์์ฒญ', '์์ฒญ ์๋ฃ' ์์์ ๊ตฌ๋ถํด์ ๋ณผ ์ ์์ต๋๋ค.
- ๊ฒ์: ์ ๋ชฉ ๋ด ํค์๋ ๊ฒ์์ ์ง์ํฉ๋๋ค.
- Private ์์ ์จ๊ธฐ๊ธฐ: ๋น๊ณต๊ฐ ๋๋ ์ญ์ ๋ ์์์ ๋ชฉ๋ก์์ ์ ์ธํ ์ ์์ต๋๋ค.
- ๋คํฌ ๋ชจ๋ ์ง์: ์์คํ ์ค์ ๋๋ ์๋ ์ค์ ์ ํตํ ํ ๋ง ์ ํ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์งํ๋ฅ ๊ณ์ฐ ์นดํ ๊ณ ๋ฆฌ ์ค์ : ํน์ ์นดํ ๊ณ ๋ฆฌ(์: ์์ ์ ์ธ ์คํ ๋ฆฌ๋ง)๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ฒด ์งํ๋ฅ ์ ๊ณ์ฐํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค.
- ์ฝํ ์ธ ์ถ๊ฐ ๋ฐ ์ ๋ณด ์์ ์์ฒญ์ ์๋ฒ๋ก ์ ๋ฌํฉ๋๋ค.
- Vercel-Supabase Integration์ ํตํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
# ์์กด์ฑ ์ค์น
npm install
# ํ๊ฒฝ ๋ณ์ ์ค์ (.env.local ์์ฑ)
# NEXT_PUBLIC_SUPABASE_URL="..."
# SUPABASE_ANON_KEY="..."
# ๊ฐ๋ฐ ์๋ฒ ์คํ
npm run dev