" μ΄ νλ‘μ νΈλ μΊλ¦°λ λ·° SDKμ μ§λ λ·° SDKλ₯Ό νμ©ν΄ μμ½ κ°λ₯ν λ μ§λ₯Ό μ€μ νκ³ , 체ν μνμ μμ½νλ κΈ°λ₯μ ꡬννλ κ²μ λͺ©νλ‘ ν©λλ€. "
π€ νμ μκ° & μν
[Global Nomad](λ°°ν¬ ν μ£Όμ μ
λ°μ΄νΈ νκ² μ΅λλ€ )
βοΈ μ€μΉ λ° μ€ν λ°©λ²
# 1. μ μ₯μ ν΄λ‘
$ git clone [μ μ₯μ URL]
$ cd [νλ‘μ νΈ λλ ν 리]
# 2. μμ‘΄μ± μ€μΉ
$ npm install
# 3. κ°λ° μλ² μ€ν
$ npm run dev
λ³Έ νλ‘μ νΈλ μλ κΈ°μ μ€νμ κΈ°λ°μΌλ‘ ꡬμ±λμμ΅λλ€.
π Language & Framework
Next.js (App Router) : νμΌ κΈ°λ° λΌμ°ν
κ³Ό μλ² μ»΄ν¬λνΈ μ§μμΌλ‘ λΉ λ₯Έ λ λλ§ μ±λ₯
React Query & Zustand : μλ²μ ν΄λΌμ΄μΈνΈ μνλ₯Ό λΆλ¦¬ν΄ μ±λ₯κ³Ό μ½λ μ μ§λ³΄μ ν₯μ
Tailwind CSS : λΉ λ₯Έ μ€νμΌλ§κ³Ό μΌκ΄μ± μλ λμμΈ μμ€ν
ꡬμ±
ESLint & Prettier : μ½λ νμ§ μ μ§ λ° ν κ° νμ
μ μν ν¬λ§· ν΅μΌ
π ν΄λ λ° νμΌ κ΅¬μ‘° (Folder Structure)
/
βββ public/ # μ μ νμΌ (μ΄λ―Έμ§, ν°νΈ λ±)
βββ src/
β βββ app/ # Next.js App Router (λΌμ°ν
, νμ΄μ§, λ μ΄μμ, λ‘λ© UI, μλ¬ UI λ±)
β β βββ (auth)/ # λΌμ°νΈ κ·Έλ£Ή (μ: μΈμ¦ κ΄λ ¨ νμ΄μ§)
β β β βββ login/
β β β βββ page.tsx
β β βββ api/ # API λΌμ°νΈ νΈλ€λ¬ (Route Handlers)
β β β βββ hello/
β β β βββ route.ts
β β βββ layout.tsx pa # λ£¨νΈ λ μ΄μμ
β β βββ page.tsx # λ£¨νΈ νμ΄μ§
β β βββ global.css # μ μ μ€νμΌ (Tailwind CSS import λ±)
β βββ components/ # μ¬μ¬μ© κ°λ₯ν UI μ»΄ν¬λνΈ
β β βββ common/ # μ¬λ¬ λλ©μΈμμ μ¬μ©λλ λ²μ© μ»΄ν¬λνΈ (Button, Input λ±)
β β β βββ Button.tsx
β β β βββ Input.tsx
β β βββ domain/ # νΉμ λλ©μΈμ μ’
μμ μΈ μ»΄ν¬λνΈ (μ: ProductCard)
β β βββ product/
β β βββ ProductCard.tsx
β βββ constants/ # μ μμ μΌλ‘ μ¬μ©λλ μμ (API URL, κ³΅ν΅ λ©μμ§ λ±)
β β βββ index.ts
β βββ contexts/ # React Context API μ¬μ© μ (Zustandλ‘ λλΆλΆ λ체 κ°λ₯)
β β βββ AuthContext.tsx
β βββ hooks/ # 컀μ€ν
React Hooks
β β βββ useAuth.ts
β βββ lib/ # λΌμ΄λΈλ¬λ¦¬ ν¬νΌ, μ νΈλ¦¬ν° ν¨μ (React Query ν΄λΌμ΄μΈνΈ μ€μ λ±)
β β βββ queryClient.ts
β β βββ utils.ts
β βββ services/ # API μμ² λ‘μ§ (React Queryμ ν¨κ» μ¬μ©)
β β βββ userService.ts
β β βββ productService.ts
β βββ store/ # Zustand μ€ν μ΄ μ μ
β β βββ useAuthStore.ts
β βββ styles/ # μ μ μ€νμΌ λλ ν
λ§ κ΄λ ¨ μ€νμΌ (global.css μΈ μΆκ°)
β β βββ theme.ts
β βββ types/ # μ μ TypeScript νμ
λ° μΈν°νμ΄μ€
β β βββ index.ts # λͺ¨λ νμ
μ export νλ λ©μΈ νμΌ
β β βββ user.ts
β βββ middleware.ts # Next.js λ―Έλ€μ¨μ΄
βββ .eslintrc.json # ESLint μ€μ νμΌ
βββ .prettierrc.json # Prettier μ€μ νμΌ
βββ next.config.mjs # Next.js μ€μ νμΌ
βββ tailwind.config.ts # Tailwind CSS μ€μ νμΌ
βββ tsconfig.json # TypeScript μ€μ νμΌ
βββ package.json
νλͺ©
λ°©μ
μμ
ν΄λλͺ
camelCase
userService
μ»΄ν¬λνΈ
PascalCase
UserProfile.tsx
cssν΄λμ€
kebab-case + .styles.js
wiki-section.styles.js
μ΄λ―Έμ§
kebab-case
logo-icon.png
λ³μ/ν¨μ
camelCase
getUserInfo
νκ²½λ³μ
UPPER_SNAKE_CASE
NEXT_PUBLIC_API_URL
λΈλμΉλͺ
λͺ©μ
main
λ°°ν¬ μ μ© λΈλμΉ
develop
ν΅ν© κ°λ° λΈλμΉ
feature/*
κΈ°λ₯ κ°λ° λ¨μ λΈλμΉ
fix/*
λ²κ·Έ μμ λΈλμΉ
docs/*
λ¬Έμ κ΄λ ¨ λΈλμΉ
π¬ μ»€λ° λ©μμ§ μ»¨λ²€μ
νκ·Έ
μλ―Έ
Feat
β¨ κΈ°λ₯ μΆκ°
Fix
π λ²κ·Έ μμ
Style
π μ€νμΌ λ³κ²½
Docs
π λ¬Έμ λ³κ²½
Refactor
π¨ 리ν©ν λ§
Test
β
ν
μ€νΈ μ½λ
Chore
π§ κΈ°ν μ€μ λ³κ²½
β¨ Feat: μν€ μΉ΄λ μ»΄ν¬λνΈ μμ±
- μ¬μ©μ μ΄λ―Έμ§ λ° μκ° ν
μ€νΈ ꡬν
- λ°μν λ μ΄μμ μ²λ¦¬ μλ£