Skip to content

lnu8926-web/NextTaskry

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

580 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿš€ Taskry

Team DAN_DA_DAN Project
Next.js ๊ธฐ๋ฐ˜์˜ ์ง๊ด€์ ์ธ ์นธ๋ฐ˜ ๋ณด๋“œ ํ˜‘์—… ํˆด

Next.js TypeScript Supabase TailwindCSS

Taskry๋Š” ๋ณต์žกํ•œ ์ ˆ์ฐจ ์—†์ด ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ์—…๋ฌด ํ๋ฆ„์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์›น ๊ธฐ๋ฐ˜ ํ˜‘์—… ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
์ง๊ด€์ ์ธ UI์™€ ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”๋ฅผ ํ†ตํ•ด ํŒ€์˜ ์ƒ์‚ฐ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ์ผ: 2026-07-02

๐Ÿ“ธ Screen Shots

๋ฉ”์ธ ๋Œ€์‹œ๋ณด๋“œ ์นธ๋ฐ˜๋ณด๋“œ ์บ˜๋ฆฐ๋”
Main Dashboard Kanban Board Calendar

๐Ÿ’ก ์ฃผ์š” ๊ธฐ๋Šฅ (Key Features)

  • ๐Ÿ“Š ์—…๋ฌด ์ง„ํ–‰ ํ˜„ํ™ฉ์˜ ์‹œ๊ฐํ™”

    • ์—…๋ฌด ์ƒํƒœ(To Do, In Progress, Done)๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
    • ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์œผ๋กœ ์ƒํƒœ๋ฅผ ์†์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์‚ฌ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: @dnd-kit)
  • ๐Ÿ—‚๏ธ ๋Œ€์‹œ๋ณด๋“œ

    • ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ ํ˜„ํ™ฉ๊ณผ ์ฃผ์š” ์ง€ํ‘œ๋ฅผ ํ•œ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๐Ÿ“… ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ผ์ • ๊ด€๋ฆฌ

    • ์›”/์ฃผ/์ผ/์–ด์  ๋‹ค 4๊ฐ€์ง€ ๋ทฐ๋กœ ์ผ์ •์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ผ์ • ์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œ(CRUD), ํŒ€์› ์ง€์ •, ์ค‘์š”๋„ ์„ค์ •, ๊ฒ€์ƒ‰ ๋ฐ ํ•„ํ„ฐ๋ง์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๐Ÿ“ ํ”„๋กœ์ ํŠธ ๋ฉ”๋ชจ

    • ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ณ„ ๋ฉ”๋ชจ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ณ ์ •/ํ•ด์ œ, ์ด๋ชจ์ง€ ๋ฐ˜์‘, ์ƒ‰์ƒ ๋ ˆ์ด๋ธ”๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๐Ÿ“ข ๊ณต์ง€์‚ฌํ•ญ

    • Lexical ๋ฆฌ์น˜ ํ…์ŠคํŠธ ์—๋””ํ„ฐ์™€ GitHub Flavored Markdown์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
    • ์ค‘์š”๋„ ํ”Œ๋ž˜๊ทธ, ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • ๐Ÿ” ํŒ€์› ์ดˆ๋Œ€ ๋ฐ ๊ถŒํ•œ ๊ด€๋ฆฌ

    • ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ํŒ€์›์„ ์ดˆ๋Œ€ํ•˜๊ณ  ์—ญํ• (Role)์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๐ŸŒ™ ๋‹คํฌ๋ชจ๋“œ

    • ๋ผ์ดํŠธ/๋‹คํฌ ํ…Œ๋งˆ๋ฅผ ํ—ค๋”์—์„œ ์ฆ‰์‹œ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (next-themes)
  • ๐ŸŽจ ์ง๊ด€์ ์ด๊ณ  ๊ฐ„๊ฒฐํ•œ UX

    • ๋ณต์žกํ•œ ํ•™์Šต ์—†์ด ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐ˜์‘ํ˜• ๋””์ž์ธ(Responsive Design)์„ ์ ์šฉํ•˜์—ฌ PC, ํƒœ๋ธ”๋ฆฟ, ๋ชจ๋ฐ”์ผ ์–ด๋””์„œ๋“  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๐Ÿค ์‹ค์‹œ๊ฐ„ ํ˜‘์—… ํ™˜๊ฒฝ

    • ํŒ€์›์˜ ์ž‘์—… ๋‚ด์—ญ๊ณผ ์ƒํƒœ ๋ณ€๊ฒฝ์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณด๋“œ์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.
    • Supabase๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ๐Ÿ›ก๏ธ ๊ด€๋ฆฌ์ž ํŒจ๋„

    • ์‚ฌ์šฉ์ž ์—ญํ•  ๊ด€๋ฆฌ, ์ „์ฒด ํ”„๋กœ์ ํŠธ ์กฐํšŒ, ๊ณต์ง€์‚ฌํ•ญ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘ค ๋‹ด๋‹น ์—ญํ•  (nelee)

  • ๐Ÿ—‚๏ธ ์นธ๋ฐ˜๋ณด๋“œ: CRUD ๊ธฐ๋Šฅ ๊ตฌํ˜„, dnd-kit ๊ธฐ๋ฐ˜ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ, ํ•„ํ„ฐ๋ง/์ •๋ ฌ ์‹œ์Šคํ…œ, ํ‚ค๋ณด๋“œ ๋‹จ์ถ•ํ‚ค ํ›… ์ถ”๊ฐ€
  • ๐Ÿ“… ์บ˜๋ฆฐ๋”: ์ปค์Šคํ…€ ์บ˜๋ฆฐ๋” ๋ทฐ(์›”/์ฃผ/์ผ) ๊ตฌํ˜„, ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ ๊ธฐ๋ฐ˜ ์ผ์ • ์ œํ•œ, Supabase Realtime ์—ฐ๋™
  • ๐Ÿ” ์ธ์ฆ ๊ตฌ์กฐ ๊ฐœ์„ : ๊ธฐ์กด ์ธ์ฆ์„ NextAuthยทSupabase Auth ๋ณ‘ํ–‰ ๊ตฌ์กฐ๋กœ ์ „ํ™˜, API ์ธ์ฆ ํ†ตํ•ฉ ์œ ํ‹ธ ๋ฐ ๋ฏธ๋“ค์›จ์–ด ๋ณ‘๋ ฌ ์„ธ์…˜ ์ฒดํฌ ๊ตฌํ˜„, GitHub OAuth ์ถ”๊ฐ€
  • ๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜ ๋ฆฌํŒฉํ† ๋ง: project/notice/task ๋ชจ๋“ˆ์„ FSD(Feature-Sliced Design) ๊ตฌ์กฐ๋กœ ์ „ํ™˜, public API ๊ฒฝ๊ณ„ ์ •๋ฆฌ
  • ๐Ÿ“ ํ”„๋กœ์ ํŠธ ๋ฉ”๋ชจ: ๋ฉ”๋ชจ ์ƒ์„ฑ, soft-delete, ์ƒ๋‹จ ๊ณ ์ •/์ž‘์„ฑ์ž ์ •๋ณด/ํƒ€์ž„์Šคํƒฌํ”„ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ๐Ÿ“– Storybook: ํ™˜๊ฒฝ ๊ตฌ์ถ• ๋ฐ ์ปดํฌ๋„ŒํŠธ ์ „ ๋ ˆ์ด์–ด ์Šคํ† ๋ฆฌ ์ž‘์„ฑ, ํ…Œ๋งˆ/๋‹คํฌ๋ชจ๋“œ ์—ฐ๋™
  • ๐Ÿ›ก๏ธ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€: ๊ด€๋ฆฌ์ž ํ”„๋กœ์ ํŠธ ํŽ˜์ด์ง€ ์‹ค๋ฐ์ดํ„ฐ(Supabase) ์—ฐ๋™, API์˜ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ ๋ฐ ํ”„๋กœ์ ํŠธ ์†Œ์œ ๊ถŒ ๊ฒ€์ฆ ๊ฐ•ํ™”
  • ๐Ÿš€ ๋ฐฐํฌ ์•ˆ์ •ํ™”: Vercel ๋นŒ๋“œ ์˜ค๋ฅ˜ ์ˆ˜์ •, ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ ์•ˆ์ •ํ™”, Next.js ๋ณด์•ˆ ์—…๊ทธ๋ ˆ์ด๋“œ

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ (Tech Stack)

๋ถ„๋ฅ˜ ๊ธฐ์ˆ  ๋ฒ„์ „ ๋น„๊ณ 
Framework Next.js (App Router) 16.2.6 React ๊ธฐ๋ฐ˜ ํ’€์Šคํƒ ํ”„๋ ˆ์ž„์›Œํฌ
Runtime React 19.2.0 ์ตœ์‹  React 19 ์‚ฌ์šฉ
Language TypeScript ^5 ์•ˆ์ •์ ์ธ ํƒ€์ž… ์‹œ์Šคํ…œ
Styling Tailwind CSS ^4 ์œ ํ‹ธ๋ฆฌํ‹ฐ ํผ์ŠคํŠธ CSS
DnD @dnd-kit ^6.3.1 ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๊ธฐ๋Šฅ
Auth / DB Supabase ^2.105.1 GoogleยทGitHub OAuth, PostgreSQL
Auth NextAuth ^4 ์„ธ์…˜ ๊ด€๋ฆฌ, GoogleยทGitHub OAuth
Fetching TanStack Query ^5 ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ๋ฐ์ดํ„ฐ ํŽ˜์นญ
Editor Lexical ^0.38.2 ๋ฆฌ์น˜ ํ…์ŠคํŠธ ์—๋””ํ„ฐ
Calendar react-big-calendar ^1.19.4 ์›”/์ฃผ/์ผ/์–ด์  ๋‹ค ์บ˜๋ฆฐ๋” ๋ทฐ
Markdown react-markdown + remark-gfm ^10.1.0 GitHub Flavored Markdown ๋ Œ๋”๋ง
Toast react-hot-toast ^2.6.0 ํ† ์ŠคํŠธ ์•Œ๋ฆผ
Theming next-themes ^0 ๋‹คํฌ/๋ผ์ดํŠธ ๋ชจ๋“œ ์ „ํ™˜
Date date-fns ^4.1.0 ๋‚ ์งœ ์œ ํ‹ธ๋ฆฌํ‹ฐ
Linting ESLint - ์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ
Package Mgr npm - ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ

๐Ÿ“ฆ ์‹œ์ž‘ ๊ฐ€์ด๋“œ (Getting Started)

1. ์ €์žฅ์†Œ ๋ณต์ œ

git clone https://github.com/Taskry/NextTaskry.git
cd NextTaskry
npm install

2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

# AUTH
NEXTAUTH_URL=your_url
NEXTAUTH_SECRET=your_secret
GOOGLE_CLIENT_ID=your_client_id
GOOGLE_CLIENT_SECRET=your_client_secret
GITHUB_CLIENT_ID=your_client_id
GITHUB_CLIENT_SECRET=your_client_secret

# Database URLs
DATABASE_URL=your_database_url
DIRECT_URL=your+direct_url

# Supabase API
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key

3. ์ธ์ฆ ์šด์˜ ๋ฐฉ์‹

  • ํ˜„์žฌ ์ธ์ฆ์€ NextAuth์™€ Supabase Auth๋ฅผ ๋ณ‘ํ–‰ ์šด์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์—์„œ Google ๋˜๋Š” GitHub ์†Œ์…œ ๋กœ๊ทธ์ธ์œผ๋กœ ์ง„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณดํ˜ธ ๋ผ์šฐํŠธ๋Š” NextAuth ํ† ํฐ๊ณผ Supabase ์„ธ์…˜์„ ํ•จ๊ป˜ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„ API๋Š” ํ†ตํ•ฉ ์ธ์ฆ ์œ ํ‹ธ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ปจํ…์ŠคํŠธ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌ์ž API๋Š” role === "admin" ๊ธฐ์ค€์œผ๋กœ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

4. ๋กœ๊ทธ์ธ ์˜ค๋ฅ˜ ์ ๊ฒ€ ์ˆœ์„œ

  • Google OAuth Client ID/Secret๊ณผ ์Šน์ธ๋œ Redirect URI๋ฅผ ๋จผ์ € ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • Supabase OAuth Redirect URL๊ณผ ์•ฑ์˜ redirectTo ์„ค์ • ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ € ์ฟ ํ‚ค/์„ธ์…˜ ์ƒํƒœ์™€ ์„œ๋ฒ„ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋ˆ„๋ฝ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

5. ์‹คํ–‰ ๋ช…๋ น์–ด

npm run dev

๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:3000์œผ๋กœ ์ ‘์†ํ•˜์—ฌ ํ™•์ธํ•˜์„ธ์š”.

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ (Project Structure)

src/
โ”œโ”€โ”€ app/                   # Next.js App Router
โ”‚   โ”œโ”€โ”€ (main)/            # ๋ฉ”์ธ ์‚ฌ์šฉ์ž ํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ (admin)/           # ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ (auth)/            # ์ธ์ฆ ํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ api/               # API ๋ผ์šฐํŠธ
โ”‚   โ”œโ”€โ”€ data/              # ๋ชจ์˜ ๋ฐ์ดํ„ฐ
โ”‚   โ”œโ”€โ”€ sample/            # ์ƒ˜ํ”Œ ํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ layout.tsx         # ๋ฃจํŠธ ๋ ˆ์ด์•„์›ƒ
โ”‚   โ”œโ”€โ”€ page.tsx           # ๋ฃจํŠธ ํŽ˜์ด์ง€
โ”‚   โ””โ”€โ”€ globals.css        # ์ „์—ญ ์Šคํƒ€์ผ
โ”‚
โ”œโ”€โ”€ components/             # ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ features/          # ๋„๋ฉ”์ธ๋ณ„ ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ layout/            # ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ shared/            # ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ””โ”€โ”€ ui/                # UI ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ
โ”‚
โ”œโ”€โ”€ lib/                   # ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฐ API
โ”‚   โ”œโ”€โ”€ api/              # API ํ˜ธ์ถœ ํ•จ์ˆ˜
โ”‚   โ”œโ”€โ”€ supabase/         # Supabase ํด๋ผ์ด์–ธํŠธ
โ”‚   โ”œโ”€โ”€ constants.ts      # ์ „์—ญ ์ƒ์ˆ˜
โ”‚   โ””โ”€โ”€ utils.ts          # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜
โ”‚
โ”œโ”€โ”€ types/                 # TypeScript ํƒ€์ž… ์ •์˜
โ”œโ”€โ”€ hooks/                 # ์ปค์Šคํ…€ React ํ›…
โ”œโ”€โ”€ providers/             # Context Provider
โ””โ”€โ”€ config/                # ์„ค์ • ํŒŒ์ผ

๐Ÿค ํ˜‘์—… ๋ฐฉ์‹

๐ŸŒฟ Git Branch ์ปจ๋ฒค์…˜

1. ๋ธŒ๋žœ์น˜ ์ „๋žต (Branch Strategy)

gitGraph
    commit id: "init"
    branch develop
    checkout develop
    commit id: "setup"
    branch feature/login
    checkout feature/login
    commit id: "feat: login UI"
    commit id: "feat: login API"
    checkout develop
    merge feature/login id: "PR #1" tag: "feature ๋ณ‘ํ•ฉ"
    branch feature/kanban
    checkout feature/kanban
    commit id: "feat: kanban board"
    checkout develop
    merge feature/kanban id: "PR #2"
    checkout main
    merge develop id: "v1.0.0" tag: "๋ฐฐํฌ"
    branch hotfix/login-error
    checkout hotfix/login-error
    commit id: "fix: login bug"
    checkout main
    merge hotfix/login-error id: "v1.0.1" tag: "๊ธด๊ธ‰ ์ˆ˜์ •"
    checkout develop
    merge hotfix/login-error id: "hotfix ๋™๊ธฐํ™”"
Loading

2. ๊ธฐ๋ณธ ๊ทœ์น™ (Basic Rules)

๊ทœ์น™ ์„ค๋ช…
๋ธŒ๋žœ์น˜ ๊ตฌ์„ฑ main, develop, feature/*, hotfix/* ๋ธŒ๋žœ์น˜ ์‚ฌ์šฉ
์ž‘์—… ์ˆœ์„œ โ‘  main โ†’ develop ์ƒ์„ฑ โ‘ก develop โ†’ feature/* ์ƒ์„ฑํ•˜์—ฌ ๊ฐœ๋ฐœ
๋ณ‘ํ•ฉ(Merge) PR์„ ํ†ตํ•ด feature โ†’ develop ๋ณ‘ํ•ฉ ํ›„, feature ๋ธŒ๋žœ์น˜ ์‚ญ์ œ
๋™๊ธฐํ™”(Sync) ์ž‘์—… ์‹œ์ž‘ ์ „ ํ•ญ์ƒ develop ๋ธŒ๋žœ์น˜๋ฅผ pull ๋ฐ›์•„ ์ตœ์‹  ์ƒํƒœ ์œ ์ง€
๋ฐฐํฌ(Deploy) develop์—์„œ ๊ฐœ๋ฐœ ์™„๋ฃŒ ์‹œ main์— ๋ณ‘ํ•ฉํ•˜์—ฌ ๋ฐฐํฌ
๊ธด๊ธ‰ ์ˆ˜์ •(Hotfix) main์—์„œ hotfix/* ์ƒ์„ฑ โ†’ ์ˆ˜์ • ํ›„ main๊ณผ develop ๋ชจ๋‘์— ๋ณ‘ํ•ฉ

3. ๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ ๊ทœ์น™ (Naming Convention)

ํƒ€์ž… ํ˜•์‹ ์„ค๋ช… ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ
feature feature/๊ธฐ๋Šฅ๋ช… ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ feature/login, feature/kanban-refactor, feature/calendar-timeline-add
fix fix/์ด์Šˆ๋ช… ๋ฒ„๊ทธ ์ˆ˜์ • fix/z-index, fix/modal-close
style style/๋Œ€์ƒ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ style/calendar-darkmode
chore chore/์ž‘์—…๋ช… ๊ธฐํƒ€ ์ž‘์—… chore/remove-duplicate-files
docs docs/๋ฌธ์„œ๋ช… ๋ฌธ์„œ ์ž‘์—… docs/readme
dev dev/์ž‘์—…์ž ๊ฐœ์ธ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜ dev/nelee

๐Ÿ’ก ๊ทœ์น™: ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ์ž‘์„ฑํ•˜๋ฉฐ, ๋‹จ์–ด ๊ตฌ๋ถ„์€ **ํ•˜์ดํ”ˆ(-)**์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“‹ ์‹ค์ œ ์‚ฌ์šฉ๋œ ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก (ํด๋ฆญํ•˜์—ฌ ํŽผ์น˜๊ธฐ)
# Feature ๋ธŒ๋žœ์น˜
feature/login
feature/admin
feature/invite
feature/kanban-manager
feature/kanban-refactor
feature/calendar-kanban-memo
feature/calendar-timeline-add
feature/design-system
feature/notice
feature/project

# Style ๋ธŒ๋žœ์น˜
style/calendar-darkmode

# Fix ๋ธŒ๋žœ์น˜
fix/z-index

# Chore ๋ธŒ๋žœ์น˜
chore/remove-duplicate-files

๐Ÿ“ Git Commit ์ปจ๋ฒค์…˜

1. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ

[type] : subject

body

footer

2. Commit Type (ํƒœ๊ทธ)

ํƒœ๊ทธ ์„ค๋ช…
[feat] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ
[fix] ๋ฒ„๊ทธ๋ฅผ ๊ณ ์นœ ๊ฒฝ์šฐ
[design] CSS ๋“ฑ ์‚ฌ์šฉ์ž UI ๋””์ž์ธ ๋ณ€๊ฒฝ
[style] ์ฝ”๋“œ ํฌ๋งท ๋ณ€๊ฒฝ, ์„ธ๋ฏธ์ฝœ๋ก  ๋ˆ„๋ฝ, ์ฝ”๋“œ ์ˆ˜์ •์ด ์—†๋Š” ๊ฒฝ์šฐ
[refactor] ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋งํ•  ๊ฒฝ์šฐ
[comment] ํ•„์š”ํ•œ ์ฃผ์„ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ
[docs] ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•œ ๊ฒฝ์šฐ
[chore] ๋นŒ๋“œ ํ…Œ์ŠคํŠธ ์—…๋ฐ์ดํŠธ, ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์„ค์ • (์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ฑด๋“ค์ง€ ์•Š๋Š” ์ž‘์—…)
[rename] ํŒŒ์ผ ํ˜น์€ ํด๋”๋ช…์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ
[remove] ์‚ญ์ œํ•˜๋Š” ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•œ ๊ฒฝ์šฐ
[init] ๋ธŒ๋žœ์น˜ ์ดˆ๊ธฐํ™” ๋ฐ ์ดˆ๊ธฐ ์…‹ํŒ… ๊ด€๋ จ๋œ ์„ค์ •์ผ ๊ฒฝ์šฐ
[build] ๋นŒ๋“œ ํŒŒ์ผ ์ˆ˜์ •
[ci] CI ์„ค์ • ํŒŒ์ผ ์ˆ˜์ •
[perf] ์„ฑ๋Šฅ ๊ฐœ์„ 

3. ์ž‘์„ฑ ๊ทœ์น™

โ‘  Subject Rule (์ œ๋ชฉ)

  • ์ œ๋ชฉ์€ ์ตœ๋Œ€ 50๊ธ€์ž๊ฐ€ ๋„˜์ง€ ์•Š๋„๋ก ํ•˜๊ณ , ๋งˆ์นจํ‘œ ๋ฐ ํŠน์ˆ˜๊ธฐํ˜ธ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์˜๋ฌธ ์‚ฌ์šฉ ์‹œ, ๋™์‚ฌ ์›ํ˜•์„ ์‚ฌ์šฉํ•˜๊ณ  ์ฒซ ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค. (๊ณผ๊ฑฐ ์‹œ์ œ ๊ธˆ์ง€)
  • ์ œ๋ชฉ์€ ๊ฐœ์กฐ์‹ ๊ตฌ๋ฌธ์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. (์™„์ „ํ•œ ์„œ์ˆ ํ˜• ๋ฌธ์žฅ์ด ์•„๋‹Œ, ๊ฐ„๊ฒฐํ•˜๊ณ  ์š”์ ์ ์ธ ์„œ์ˆ )

โ‘ก Body Rule (๋ณธ๋ฌธ)

  • ๋ณธ๋ฌธ์€ ํ•œ ์ค„ ๋‹น 72์ž ๋‚ด๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚ด์šฉ์€ ์–‘์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ์ตœ๋Œ€ํ•œ ์ƒ์„ธํžˆ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝํ–ˆ๋Š”์ง€๋ณด๋‹ค '๋ฌด์—‡์„', '์™œ' ๋ณ€๊ฒฝํ–ˆ๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

โ‘ข Footer Rule (๊ผฌ๋ฆฌ๋ง)

  • ๊ผฌ๋ฆฌ๋ง์€ **์„ ํƒ ์‚ฌํ•ญ(Optional)**์ด๋ฉฐ, ์ด์Šˆ ํŠธ๋ž˜์ปค ID๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜•์‹: "์œ ํ˜•: #์ด์Šˆ ๋ฒˆํ˜ธ" (์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)
  • ์ด์Šˆ ํŠธ๋ž˜์ปค ์œ ํ˜•:
    • Fixes: ์ด์Šˆ ์ˆ˜์ • ์ค‘ (์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ)
    • Resolves: ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ–ˆ์„ ๋•Œ ์‚ฌ์šฉ
    • Ref: ์ฐธ๊ณ ํ•  ์ด์Šˆ๊ฐ€ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ
    • Related to: ํ•ด๋‹น ์ปค๋ฐ‹์— ๊ด€๋ จ๋œ ์ด์Šˆ ๋ฒˆํ˜ธ (์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ)

4. ์ž‘์„ฑ ์˜ˆ์‹œ

[feat] : ์ถ”๊ฐ€ get data api ํ•จ์ˆ˜

๋กœ๊ทธ์ธ API ๊ฐœ๋ฐœ

Resolves: #123
Ref: #456
Related to: #48, #45

๐ŸŽจ Code ์ปจ๋ฒค์…˜

1. ๋„ค์ด๋ฐ ๊ทœ์น™ (Naming Convention)

์‚ฌ์šฉํ•˜๋Š” ๋„ค์ด๋ฐ ์ข…๋ฅ˜

  • PascalCase (ํŒŒ์Šค์นผ ์ผ€์ด์Šค)
  • camelCase (์นด๋ฉœ ์ผ€์ด์Šค)
  • kebab-case (์ผ€๋ฐฅ ์ผ€์ด์Šค)
  • snake_case (์Šค๋„ค์ดํฌ ์ผ€์ด์Šค)

๋ช…๋ช… ๊ทœ์น™ ์ƒ์„ธ

  • ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜: camelCase ์‚ฌ์šฉ
  • Boolean: is ์ ‘๋‘์‚ฌ ์‚ฌ์šฉ
  • ๋ฐฐ์—ด(Array): List ์ ‘๋ฏธ์‚ฌ ์‚ฌ์šฉ
  • ์ƒ์ˆ˜(Constant): ์˜๋ฌธ ๋Œ€๋ฌธ์ž, SNAKE_CASE ์‚ฌ์šฉ
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ: handle ์ ‘๋‘์‚ฌ ์‚ฌ์šฉ
  • Fetch ํ•จ์ˆ˜: HTTP Method(get, post, put, del)๋กœ ์‹œ์ž‘
const userName = "Alice";
const userAge = 30;

// Boolean
const isLoggedIn = true;

// ๋ฐฐ์—ด (List ์ ‘๋ฏธ์‚ฌ)
const dataList = [10, 20, 30];

// ์ƒ์ˆ˜ (๋Œ€๋ฌธ์ž Snake ํ‘œ๊ธฐ๋ฒ•)
const NAME_ROLE = "Alice";

// ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ (handle ์ ‘๋‘์‚ฌ)
const handleClick = () => {};
const handleChange = () => {};

// Fetch ํ•จ์ˆ˜ (Method๋กœ ์‹œ์ž‘)
const getDataList = () => {...}
const postDataList = () => {...}
const putDataList = () => {...}
const delDataList = () => {...}

2. ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ ๋ฐ ํฌ๋งทํŒ…

Props ์ •๋ ฌ

  • ์—ฌ๋Ÿฌ ์ค„ Props: Props๊ฐ€ ๋งŽ๊ฑฐ๋‚˜ ๊ธธ ๊ฒฝ์šฐ, ๊ฐ prop์„ ๋ณ„๋„์˜ ์ค„์— ์ž‘์„ฑํ•˜๊ณ  ๋“ค์—ฌ์“ฐ๊ธฐํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.
<MyComponent propA="valueA" propB={someVariable} propC={() =>
console.log("clicked")} />

๋ธ”๋ก ๊ตฌ๋ฌธ (Block Syntax)

  • ํ•œ ์ค„์งœ๋ฆฌ ๋ธ”๋ก์ผ ๊ฒฝ์šฐ๋ผ๋„ ์ค‘๊ด„ํ˜ธ {}๋ฅผ ์ƒ๋žตํ•˜์ง€ ์•Š๊ณ  ๋ช…ํ™•ํžˆ ์ค„ ๋ฐ”๊ฟˆํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
// โŒ ๋‚˜์œ ์˜ˆ์‹œ
if (true) return "hello";

// โœ… ์ข‹์€ ์˜ˆ์‹œ
if (true) {
  return "hello";
}

3. ํŒŒ์ผ ๋ฐ ํด๋” ๊ตฌ์กฐ (Files & Folders)

  • ํด๋”๋ช…: camelCase๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํŒŒ์ผ๋ช…:
    • ์ปดํฌ๋„ŒํŠธ, ํด๋ž˜์Šค ํŒŒ์ผ: PascalCase (.jsx, .tsx)
    • ์ผ๋ฐ˜ JS ํŒŒ์ผ (service, config ๋“ฑ): camelCase (.js, .ts)
// ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ
Header.jsx
Menu.jsx

// Service ํŒŒ์ผ
authSignUp.js
authGoogleSignin.js

// Config ํŒŒ์ผ
firebase.js
firebaseError.js

4. ์Šคํƒ€์ผ๋ง (Style)

  • ์ผ๊ด€์„ฑ ์œ ์ง€: CSS Modules, Styled Components, Tailwind CSS ๋“ฑ ์–ด๋–ค ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋“  ํ”„๋กœ์ ํŠธ ์ „์ฒด์—์„œ ํ†ต์ผ๋œ ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
  • ์ธ๋ผ์ธ ์Šคํƒ€์ผ ์ง€์–‘: ํŠน๋ณ„ํ•œ ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด style ์†์„ฑ์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ์ธ๋ผ์ธ ์Šคํƒ€์ผ์€ ํ”ผํ•ฉ๋‹ˆ๋‹ค.
// ๋‚˜์œ ์˜ˆ์‹œ
<div style={{ color: 'red', fontSize: '16px' }}>Hello</div>

// ์ข‹์€ ์˜ˆ์‹œ (CSS ํด๋ž˜์Šค ์‚ฌ์šฉ)
<div className="text-red-16">Hello</div>

๐Ÿ‘ฅ ํŒ€์› ์†Œ๊ฐœ (Team)

ํ”„๋กœํ•„ ์ด๋ฆ„ ์—ญํ•  ์ฃผ์š” ๋‹ด๋‹น ์—…๋ฌด
์ด๋‚จ์€ Frontend
Team Lead
โ€ข ์นธ๋ฐ˜ ๋ณด๋“œ: dnd-kit ๊ธฐ๋ฐ˜ ์นด๋“œ Drag & Drop ๋ฐ ์ƒํƒœ ๋™๊ธฐํ™”
โ€ข ์บ˜๋ฆฐ๋”: ์›”/์ฃผ/์ผ ๋‹จ์œ„ ์ผ์ • ์‹œ๊ฐํ™” ๋ฐ Task ํ•„ํ„ฐ๋ง ๊ตฌํ˜„
โ€ข ๋ฐ์ดํ„ฐ ์—ฐ๋™: ๋ณด๋“œ์™€ ์บ˜๋ฆฐ๋” ๊ฐ„ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ฐ˜์˜ ๋กœ์ง
๊น€๋ฏผ์ค‘ Frontend โ€ข ๋””์ž์ธ ์‹œ์Šคํ…œ: ์ „์ฒด UI ํ†ค์•ค๋งค๋„ˆ ์ •๋ฆฝ ๋ฐ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„
โ€ข UI ํผ๋ธ”๋ฆฌ์‹ฑ: ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ ๊ตฌํ˜„ ๋ฐ CSS ์Šคํƒ€์ผ๋ง ์ตœ์ ํ™”
โ€ข ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ: ๊ด€๋ฆฌ์ž ์ „์šฉ ํŽ˜์ด์ง€ UI ๋ฐ ์‹œ์Šคํ…œ ์„ค์ • ๋ทฐ ๊ฐœ๋ฐœ
์ด์›์ฐฌ Frontend โ€ข ์ธ์ฆ/๋ณด์•ˆ: JWT ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธยทํšŒ์›๊ฐ€์ž… ๋ฐ ํ”„๋ผ์ด๋น— ๋ผ์šฐํŠธ ์ฒ˜๋ฆฌ
โ€ข ๋ฉค๋ฒ„ ๊ด€๋ฆฌ: ์‚ฌ์šฉ์ž ๊ถŒํ•œ(Role) ์ œ์–ด ๋กœ์ง ๊ตฌํ˜„
โ€ข ์ดˆ๋Œ€ ์‹œ์Šคํ…œ: ์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒ€์› ์ดˆ๋Œ€ ๋ฐ ๋ฉค๋ฒ„ ๋ฆฌ์ŠคํŠธ ๊ด€๋ฆฌ
์ดํ˜„์ˆ˜ Frontend โ€ข ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ: ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ƒ์„ฑยท์ˆ˜์ •ยท์‚ญ์ œ(CRUD) ํ”„๋กœ์„ธ์Šค
โ€ข ํ™˜๊ฒฝ ์„ค์ •: ํ”„๋กœ์ ํŠธ๋ณ„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ ์„ธ๋ถ€ ์˜ต์…˜ ์ œ์–ด
โ€ข ๋ชฉ๋ก ๊ด€๋ฆฌ: ํ”„๋กœ์ ํŠธ ํƒ€์ž…๋ณ„ ํ•„ํ„ฐ๋ง ๋ฐ ์‹œ๊ฐ„์ˆœ ์ •๋ ฌ ๋กœ์ง ๊ตฌํ˜„

๐Ÿ™ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์ด ํ”„๋กœ์ ํŠธ์— ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

About

Project of "DAN_DA_DAN" ver. Nextjs

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors