Skip to content

CHOOSLA/FlipFlick_FE

Β 
Β 

Repository files navigation

FlipFlick-FE (λ³Έ READMEλŠ” 아직 μ™„μ„±λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€)

ν”„λ‘œμ νŠΈ κ°œμš”

FlipFlick-FEλŠ” React + TypeScript 기반으둜 κ΅¬μ„±λœ ν”„λ‘ νŠΈμ—”λ“œ ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€. Vite둜 κ΅¬μ„±λœ λΉ λ₯Έ 개발 ν™˜κ²½ μœ„μ— μ΅œμ‹  라이브러리λ₯Ό λ„μž…ν•˜μ—¬, μœ μ—°ν•˜κ³  μœ μ§€λ³΄μˆ˜κ°€ μ‰¬μš΄ ꡬ쑰λ₯Ό μ§€ν–₯ν•©λ‹ˆλ‹€.

νŒ€μ› κ°€μ΄λ“œ

  1. 이 README 전체λ₯Ό λΉ λ₯΄κ²Œ ν›‘μ–΄λ³΄μ„Έμš”.
  2. src/App.tsxμ—μ„œ 전체 ꡬ쑰 확인 - router/index.tsxμ—μ„œ λΌμš°νŒ… 흐름 이해
  3. pages/ - components/ - services/ 순으둜 κΈ°λŠ₯ 흐름 따라가기
  4. μ „μ—­ μŠ€νƒ€μΌ(styles/)κ³Ό μ „μ—­ μƒνƒœ(context/)λŠ” ꡬ쑰 νŒŒμ•… ν›„ μ°Έμ‘°
  5. 개발 κ°€μ΄λ“œλΌμΈ - μ»΄ν¬λ„ŒνŠΈ 개발 (ꢌμž₯) ⭐ 필독 ⭐

기술 μŠ€νƒ

핡심 기술

  • React 19: μ΅œμ‹  λ²„μ „μ˜ Reactλ₯Ό μ‚¬μš©ν•˜μ—¬ UI ꡬ성
  • TypeScript: νƒ€μž… μ•ˆμ •μ„±μ„ μ œκ³΅ν•˜λŠ” JavaScript μŠˆνΌμ…‹
  • Vite: λΉ λ₯Έ 개발 μ„œλ²„μ™€ μ΅œμ ν™”λœ λΉŒλ“œλ₯Ό μ œκ³΅ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ 도ꡬ

λΌμš°νŒ… 및 μƒνƒœ 관리

  • React Router DOM: ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λΌμš°νŒ…
  • Context API: React λ‚΄μž₯ μƒνƒœ 관리 (ν•„μš”μ— 따라 ν™•μž₯ κ°€λŠ₯)
    • μƒνƒœ λ³΅μž‘λ„κ°€ μ¦κ°€ν•˜λŠ” 경우 Zustand λ˜λŠ” Redux λ“± λ„μž…μ„ κ²€ν† 

μŠ€νƒ€μΌλ§

  • Styled Components: CSS-in-JS 라이브러리
  • CLSX: 쑰건뢀 클래슀 이름 관리

μœ ν‹Έλ¦¬ν‹°

  • Axios: HTTP ν΄λΌμ΄μ–ΈνŠΈ
  • Dayjs: λ‚ μ§œ 및 μ‹œκ°„ 처리
  • React-Toastify: μ•Œλ¦Ό λ©”μ‹œμ§€ ν‘œμ‹œ

개발 도ꡬ

  • Storybook: UI μ»΄ν¬λ„ŒνŠΈ 개발 및 λ¬Έμ„œν™”
  • ESLint: μ½”λ“œ ν’ˆμ§ˆ 및 μŠ€νƒ€μΌ 검사
  • Prettier: μ½”λ“œ ν¬λ§·νŒ…
  • Vitest: ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬
  • Husky & Commitlint: Git ν›… 및 컀밋 λ©”μ‹œμ§€ 검증
  • @iconify/react: μ•„μ΄μ½˜ 라이브러리
  • lucide-react: μ•„μ΄μ½˜ μ»΄ν¬λ„ŒνŠΈ 라이브러리

μ•„μ΄μ½˜ μ‚¬μš© 방식 μ—…λ°μ΄νŠΈ

ν˜„μž¬ ν”„λ‘œμ νŠΈμ—μ„œλŠ” μ•„μ΄μ½˜μ„ λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€:

  • BaseButton.tsxμ—μ„œλŠ” @iconify/react의 Icon μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©
  • ExamplePage.tsxμ—μ„œλŠ” lucide-reactμ—μ„œ 직접 μ•„μ΄μ½˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό importν•˜μ—¬ μ‚¬μš©

ν”„λ‘œμ νŠΈ μ£Όμš” ꡬ쑰

src/
β”œβ”€β”€ App.tsx               # μ΅œμƒμœ„ μ»΄ν¬λ„ŒνŠΈ, Router 및 GlobalStyle μ£Όμž…
β”œβ”€β”€ main.tsx              # μ•± μ§„μž…μ 
β”œβ”€β”€ assets/               # 이미지, 폰트 λ“± 정적 μžμ‚°
β”œβ”€β”€ components/           # UI μ»΄ν¬λ„ŒνŠΈ (곡톡 및 κΈ°λŠ₯별)
β”‚   β”œβ”€β”€ common/               # 곡톡 UI (BaseButton, Modal, Layout λ“±)
β”‚   └── feature/              # 도메인/κΈ°λŠ₯별 UI (μœ μ € μΉ΄λ“œ, 펫 λ·°μ–΄ λ“±)
β”‚       β”œβ”€β”€ (μ˜ˆμ‹œ)auth/            # 인증 κ΄€λ ¨ μ»΄ν¬λ„ŒνŠΈ (둜그인, νšŒμ›κ°€μž… λ“±)
β”‚       └── (μ˜ˆμ‹œ)mypage/          # λ§ˆμ΄νŽ˜μ΄μ§€ κ΄€λ ¨ μ»΄ν¬λ„ŒνŠΈ
β”œβ”€β”€ constants.ts          # μƒμˆ˜ μ •μ˜ (URL, λ©”μ‹œμ§€, enum λ“±)
β”œβ”€β”€ context/              # κΈ€λ‘œλ²Œ μƒνƒœ 관리 (ThemeContext, AuthContext λ“±)
β”œβ”€β”€ hooks/                # μ»€μŠ€ν…€ React Hook
β”œβ”€β”€ pages/                # λΌμš°νŒ… λŒ€μƒ νŽ˜μ΄μ§€ μ»΄ν¬λ„ŒνŠΈ (HomePage, MyPage, LoginPage λ“±)
β”œβ”€β”€ router/               # 전체 λΌμš°νŒ… μ •μ˜
β”‚   └── index.tsx             # λΌμš°νŒ… μ„€μ •
β”œβ”€β”€ services/             # API 호좜 μ •μ˜ (Axios 기반)
β”œβ”€β”€ stories/              # Storybook μŠ€ν† λ¦¬
β”œβ”€β”€ styles/               # reset, globalStyle, theme λ“± μ „μ—­ μŠ€νƒ€μΌ
└── types/                # 곡톡 νƒ€μž…, API 응닡 νƒ€μž… λ“±(ꢌμž₯, νƒ€μž… μ„ μ–Έ μœ„μΉ˜λŠ” 개인 선택 )
    └── api.ts              # API 응닡 νƒ€μž… μ •μ˜


> 각 λ””λ ‰ν† λ¦¬μ˜ μ±…μž„κ³Ό 파일 μΆ”κ°€ 기쀀은 ν•˜λ‹¨ "디렉토리별 μž‘μ„± κΈ°μ€€" μ°Έμ‘°

μ„€μΉ˜ 및 μ„€μ •

ν•„μˆ˜ 쑰건

  • Node.js 18.x 이상
  • npm λ˜λŠ” yarn

μ„€μΉ˜ 방법

# 1. μ €μž₯μ†Œ 클둠
git clone https://github.com/your-username/flipflick-fe.git
cd flipflick-fe

# 2. μ˜μ‘΄μ„± μ„€μΉ˜
npm install
# λ˜λŠ”
yarn install

# 3. 개발 μ„œλ²„ μ‹€ν–‰
npm run dev

μ‚¬μš© κ°€λŠ₯ν•œ 슀크립트

# 개발 μ„œλ²„ μ‹€ν–‰ (http://localhost:5173)
npm run dev

# ν”„λ‘œλ•μ…˜ λΉŒλ“œ
npm run build

# λΉŒλ“œ κ²°κ³Όλ¬Ό 미리보기
npm run preview

# 린트 검사
npm run lint

# 린트 였λ₯˜ μžλ™ μˆ˜μ •
npm run lint:fix

# μ½”λ“œ ν¬λ§·νŒ…
npm run format

# ν¬λ§·νŒ… 검사
npm run format:check

# Storybook μ‹€ν–‰ (http://localhost:6006)
npm run storybook

# Storybook λΉŒλ“œ
npm run build-storybook

# ν…ŒμŠ€νŠΈ μ‹€ν–‰
npm run test

κΈ°μ—¬ 방법

  1. 이슈λ₯Ό μƒμ„±ν•˜μ—¬ κΈ°λŠ₯ μš”μ²­ λ˜λŠ” 버그 μˆ˜μ •μ„ μ œμ•ˆν•©λ‹ˆλ‹€.
  2. μƒμ„±ν•œ 이슈 μ’…λ₯˜μ™€ 이슈 번호둜 μƒˆ 브랜치λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€:
  3. 변경사항을 μ»€λ°‹ν•©λ‹ˆλ‹€: Conventional Commits을 μ‚¬μš©ν•˜κ±°λ‚˜ ν•΄λ‹Ή κ·œμΉ™μ„ λ”°λ¦…λ‹ˆλ‹€.
  4. 브랜치λ₯Ό ν‘Έμ‹œν•©λ‹ˆλ‹€: git push origin feature/amazing-feature
  5. GitHubμ—μ„œ Pull Requestλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  • 제λͺ©μ€ [FEAT] κΈ°λŠ₯ μ„€λͺ… λ˜λŠ” [FIX] κΈ°λŠ₯ μ„€λͺ… ν˜•μ‹μ„ λ”°λ¦…λ‹ˆλ‹€.
  • PR μ„€λͺ…에 변경사항과 κ΄€λ ¨λœ 이슈 번호λ₯Ό λͺ…μ‹œν•©λ‹ˆλ‹€.
  • 예: 이 PR은 #00 이슈λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.
  • PR ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•˜μ—¬ ν•„μš”ν•œ 정보λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.
  • PR 제좜자λ₯Ό 본인으둜 μ§€μ •ν•˜κ³  리뷰어λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
  • PR이 승인되면 main λΈŒλžœμΉ˜μ— λ³‘ν•©ν•©λ‹ˆλ‹€.

디렉토리 별 μ±…μž„ κΈ°μ€€

디렉토리 μ±…μž„ 파일 μΆ”κ°€ κΈ°μ€€
components/common/ λ²”μš© UI λ²„νŠΌ, λͺ¨λ‹¬ λ“± μž¬μ‚¬μš© κ°€λŠ₯ UI
components/feature/ κΈ°λŠ₯ 쀑심 UI νŠΉμ • κΈ°λŠ₯ μ „μš© UI (ex. μœ μ € μΉ΄λ“œ)
constants.ts μ „μ—­ μƒμˆ˜ URL, λ©”μ‹œμ§€, enum, μ •κ·œμ‹
context/ μ „μ—­ μƒνƒœ Auth, Modal λ“± App λ‹¨μœ„ μƒνƒœ
hooks/ μ»€μŠ€ν…€ ν›… μž¬μ‚¬μš© κ°€λŠ₯ν•œ 둜직 useModal.ts, useFetch.ts λ“±
pages/ 라우트 λ‹¨μœ„ νŽ˜μ΄μ§€ HomePage.tsx, LoginPage.tsx λ“±
router/ λΌμš°νŒ… μ„€μ • Route, Layout, ProtectedRoute λ“±
services/ API μš”μ²­ userService.ts, problemService.ts λ“±
styles/ κΈ€λ‘œλ²Œ μŠ€νƒ€μΌ reset, theme, κΈ€λ‘œλ²Œ CSS
types/api.ts νƒ€μž… μ •μ˜ API 응닡 νƒ€μž…, μ „μ—­ μœ ν‹Έ νƒ€μž…

νƒ€μž… μž‘μ„± κ°€μ΄λ“œ

λΆ„λ₯˜ κΈ°μ€€

λΆ„λ₯˜ μœ„μΉ˜ μ„€λͺ…
μ „μ—­ νƒ€μž… types/api.ts λͺ¨λ“  API 응닡 및 곡톡 μœ ν‹Έ νƒ€μž…
Props νƒ€μž… μ»΄ν¬λ„ŒνŠΈ 파일 λ‚΄λΆ€ κ°„λ‹¨ν•œ propsλŠ” inline λ˜λŠ” μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€ μ„ μ–Έ
μœ ν‹Έ νƒ€μž… types/api.ts λ‚΄ μ •μ˜ Pagination, ApiResponse<T> λ“±

κ·œμΉ™

  • any μ‚¬μš© κΈˆμ§€
  • λ°˜ν™˜ νƒ€μž… λͺ…μ‹œ ν•„μˆ˜
  • readonly, as const, Omit, Pick 적극 μ‚¬μš©
  • 반볡 κ΅¬μ‘°λŠ” μ œλ„€λ¦­ μœ ν‹Έ νƒ€μž…μœΌλ‘œ 뢄리

API μš”μ²­ ꡬ쑰 (μ„œλΉ„μŠ€ or component λ‚΄λΆ€)

// services/userService.ts
import AxiosInstance from './axios'

export const getUserInfo = () => {
  return AxiosInstance.get('/user/info')
}

개발 κ°€μ΄λ“œλΌμΈ

μ»΄ν¬λ„ŒνŠΈ 개발 (ꢌμž₯) ⭐ 필독 ⭐

  • λͺ¨λ“  μž„ν¬νŠΈλŠ” λͺ…μ‹œμ μœΌλ‘œ μž‘μ„±ν•©λ‹ˆλ‹€. (μžλ™ μž„ν¬νŠΈ μ‚¬μš© κΈˆμ§€)
  • 곡톡 μ»΄ν¬λ„ŒνŠΈλŠ” components/common 디렉토리에 λ°°μΉ˜ν•©λ‹ˆλ‹€.
  • νŠΉμ • κΈ°λŠ₯에 κ΄€λ ¨λœ μ»΄ν¬λ„ŒνŠΈλŠ” components/feature 디렉토리에 λ°°μΉ˜ν•©λ‹ˆλ‹€.
  • μƒνƒœ 관리, api 호좜, νƒ€μž… μ„ μ–Έ, μ»€μŠ€ν…€ ν›… 등은 ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ™€ κ°€κΉŒμš΄ μœ„μΉ˜μ— λ°°μΉ˜ν•©λ‹ˆλ‹€.
  • μŠ€νƒ€μΌμ€ μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ styled-componentsλ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ„±ν•©λ‹ˆλ‹€.
  • λ‹€λ₯Έ μ½”λ“œμ— 영ν–₯이 μ—†λ‹€λ©΄ μ±…μž„ 및 μœ„μΉ˜ 뢄리λ₯Ό μ—„λ°€ν•˜κ²Œ μ μš©ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€.(μœ„ 사항듀은 ꢌμž₯ μ‚¬ν•­μž…λ‹ˆλ‹€)
  • (선택) μ»΄ν¬λ„ŒνŠΈ 개발 μ‹œ Storybookλ₯Ό 톡해 μ»΄ν¬λ„ŒνŠΈμ— λŒ€ν•΄ λ¬Έμ„œν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

컀밋 λ©”μ‹œμ§€

  • Conventional Commits ν˜•μ‹μ„ λ”°λ¦…λ‹ˆλ‹€:
    • feat: μƒˆλ‘œμš΄ κΈ°λŠ₯
    • fix: 버그 μˆ˜μ •
    • docs: λ¬Έμ„œ λ³€κ²½
    • style: μ½”λ“œ μŠ€νƒ€μΌ λ³€κ²½ (κΈ°λŠ₯ λ³€κ²½ μ—†μŒ)
    • refactor: λ¦¬νŒ©ν† λ§ (κΈ°λŠ₯ λ³€κ²½ μ—†μŒ)
    • test: ν…ŒμŠ€νŠΈ μΆ”κ°€ λ˜λŠ” μˆ˜μ •
    • chore: λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€ λ˜λŠ” 도ꡬ λ³€κ²½

ν…ŒμŠ€νŠΈ (선택)

Vitestλ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹¨μœ„ ν…ŒμŠ€νŠΈ 및 톡합 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€. ν…ŒμŠ€νŠΈ νŒŒμΌμ€ κ΄€λ ¨ μ»΄ν¬λ„ŒνŠΈλ‚˜ κΈ°λŠ₯ κ·Όμ²˜μ— .test.ts λ˜λŠ” .test.tsx ν™•μž₯자둜 λ°°μΉ˜ν•©λ‹ˆλ‹€.

# λͺ¨λ“  ν…ŒμŠ€νŠΈ μ‹€ν–‰
npm run test
# νŠΉμ • ν…ŒμŠ€νŠΈ 파일 μ‹€ν–‰
npm run test -- path/to/test/file.test.ts

배포

ν”„λ‘œμ νŠΈ 배포 방법에 λŒ€ν•œ μ§€μΉ¨ μΆ”κ°€ ν•„μš”.

# ν”„λ‘œλ•μ…˜ λΉŒλ“œ 생성
npm run build

# λΉŒλ“œ 결과물은 dist/ 디렉토리에 μƒμ„±λ©λ‹ˆλ‹€

디렉토리별 μž‘μ„± κΈ°μ€€

ν˜„μž¬ 디렉토리 κ΅¬μ‘°λŠ” 도메인 쀑심 + μ•„ν† λ―Ή ꡬ쑰가 ν˜Όν•©λœ React + TypeScript + Vite ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€. 각 λ””λ ‰ν† λ¦¬μ˜ μš©λ„μ— 따라 κΈ°λŠ₯ μΆ”κ°€, λ¦¬νŒ©ν† λ§, 버그 μˆ˜μ • μ‹œ μƒˆ 파일의 μœ„μΉ˜λŠ” λ‹€μŒ 기쀀에 λ”°λ¦…λ‹ˆλ‹€:


μƒμœ„ 디렉토리 μ„€λͺ… 및 파일 μΆ”κ°€ μœ„μΉ˜ κ°€μ΄λ“œ

디렉토리 μš©λ„ μ–Έμ œ/무엇을 μΆ”κ°€ν•˜λ‚˜?
src/App.tsx, src/main.tsx μ•± μ§„μž…μ  κΈ€λ‘œλ²Œ λ ˆμ΄μ•„μ›ƒ, μ΅œμƒμœ„ λΌμš°νŒ…, Provider μ£Όμž… λ“± μ „μ—­ μ„€μ • μ‹œ μˆ˜μ •
src/assets 정적 μžμ‚° (이미지 λ“±) μ•„μ΄μ½˜, 이미지, 폰트, λ°°κ²½ λ“± μΆ”κ°€ν•  λ•Œ μ‚¬μš©
- react.svgλŠ” μ˜ˆμ‹œ
- styles/λŠ” CSS, κΈ€λ‘œλ²Œ μŠ€νƒ€μΌ λ˜λŠ” 폰트 λ“± κ°€λŠ₯
src/components/common μž¬μ‚¬μš© κ°€λŠ₯ν•œ UI μ»΄ν¬λ„ŒνŠΈ λ²„νŠΌ, λͺ¨λ‹¬, ν† μŠ€νŠΈ, νƒ­ λ“± λ²”μš©μ  UI μΆ”κ°€
components/common/layout 곡용 λ ˆμ΄μ•„μ›ƒ μ»΄ν¬λ„ŒνŠΈ BasePageLayout, AuthLayout λ“± νŽ˜μ΄μ§€ ꡬ쑰λ₯Ό λ‹΄λ‹Ήν•˜λŠ” 곡용 UI

| src/components/feature | νŠΉμ • 도메인 쒅속 UI μ»΄ν¬λ„ŒνŠΈ | μœ μ € μΉ΄λ“œ, 펫 λ·°μ–΄, κ²Œμ‹œνŒ λ“± νŠΉμ • κΈ°λŠ₯ μ „μš© μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€ | | src/constants | μƒμˆ˜ μ •μ˜ | 정적 enum, URL, λ©”μ‹œμ§€, μ •κ·œμ‹, λ§ˆλ²• 숫자/문자 제거용 | | src/context | μ „μ—­ μƒνƒœ 관리 (React Context) | μƒˆλ‘œμš΄ μ „μ—­ μƒνƒœ μΆ”κ°€ μ‹œ: xxxContext.tsx μž‘μ„±
ex) AuthContext, ThemeContext λ“± | | src/hooks | μ „μ—­ μž¬μ‚¬μš© μ»€μŠ€ν…€ ν›… | useModal.ts, useUserInfo.ts, useFetch.ts λ“± μž¬μ‚¬μš© κ°€λŠ₯ν•œ 둜직 μž‘μ„± | | src/pages | 라우트 λ‹¨μœ„ νŽ˜μ΄μ§€ μ»΄ν¬λ„ŒνŠΈ | μƒˆλ‘œμš΄ 라우트 생성 μ‹œ 이 디렉토리에 Page λ‹¨μœ„ μ»΄ν¬λ„ŒνŠΈ μž‘μ„±
ex) HomePage.tsx, MyPage.tsx λ“± | | src/router | λΌμš°νŒ… μ„€μ • | νŽ˜μ΄μ§€ μΆ”κ°€/λ³€κ²½ μ‹œ λΌμš°νŠΈλ„ 여기에 μ •μ˜ λ˜λŠ” κ°±μ‹  | | src/services | μ™ΈλΆ€ API 호좜 (Axios λ“±) | api/user.ts, api/problem.ts λ“± REST API μ—°κ²° μ„œλΉ„μŠ€ μž‘μ„± | | src/stories | Storybook κ΄€λ ¨ | 각 μ»΄ν¬λ„ŒνŠΈ μŠ€ν† λ¦¬ 및 데λͺ¨μš© μ˜ˆμ‹œ 파일 μž‘μ„± | | src/styles | κΈ€λ‘œλ²Œ CSS/Styled-component theme λ“± | ν…Œλ§ˆ, 곡톡 μŠ€νƒ€μΌ, reset.css λ“± μž‘μ„± | | src/types | μ „μ—­ νƒ€μž… μ •μ˜ | μ „μ—­ 곡톡 νƒ€μž…, μœ ν‹Έ νƒ€μž…, API 응닡 νƒ€μž… 등을 μ •μ˜ |


μ‹œλ‚˜λ¦¬μ˜€λ³„ 파일 μΆ”κ°€ μœ„μΉ˜ μ˜ˆμ‹œ

λͺ©μ  μΆ”κ°€ μœ„μΉ˜
μƒˆλ‘œμš΄ νŽ˜μ΄μ§€ 생성 src/pages/SomePage.tsx
νŽ˜μ΄μ§€ λΌμš°νŒ… μΆ”κ°€ src/router/index.ts
μ „μ—­ μƒνƒœ 관리 μΆ”κ°€ src/context/SomeContext.tsx
곡톡 λ²„νŠΌ/μž…λ ₯μ°½ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€ src/components/common/MyButton.tsx
도메인 νŠΉν™” UI μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€ src/components/feature/ 내에 UserCard.tsx, PetViewer.tsx λ“±
REST API μ—°κ²° src/services/xxxService.ts
μ»€μŠ€ν…€ ν›… 생성 src/hooks/useXxx.ts
정적 μƒμˆ˜/enum src/constants/xxx.ts
κΈ€λ‘œλ²Œ μŠ€νƒ€μΌ src/styles/globalStyle.ts
이미지, μ•„μ΄μ½˜ src/assets/ λ˜λŠ” src/assets/icons/ 등에 μ‚¬μš© 도메인 μœ„μΉ˜μ˜ 폴더 ꡬ쑰 생성
라우트 μ •μ˜ src/router/index.tsx의 <Routes> 내뢀에 <Route> μ •μ˜
λΌμš°ν„° 적용 src/App.tsx <BrowserRouter>둜 감싸기
νŽ˜μ΄μ§€ μ»΄ν¬λ„ŒνŠΈ src/pages/ 각각의 URL에 λŒ€μ‘λ˜λŠ” UI μ»΄ν¬λ„ŒνŠΈ

κΈ°λŠ₯μΆ”κ°€/λ¦¬νŒ©ν† λ§/λ²„κ·Έν”½μŠ€ μ‹œ 파일 μœ„μΉ˜ νŒλ‹¨ κΈ°μ€€

1. μž¬μ‚¬μš© λͺ©μ  μ—¬λΆ€

  • μž¬μ‚¬μš© κ°€λŠ₯ν•˜λ©΄ common λ˜λŠ” hooks, 도메인 νŠΉν™”λ©΄ feature둜
  • (ui, hooks, λ“±)

2. κ΄€μ‹¬μ‚¬μ˜ 뢄리

  • API λ‘œμ§μ€ servicesμ „μ—­ μƒνƒœ λ‘œμ§μ€ context, UI λ‘œμ§μ€ components둜 뢄리
  • νŽ˜μ΄μ§€ λ‹¨μœ„ μ»΄ν¬λ„ŒνŠΈλŠ” pages, ui μ»΄ν¬λ„ŒνŠΈλŠ” components둜 뢄리
  • ν˜Ήμ€, components/feature/{κΈ°λŠ₯/도메인 이름}/, page/{κΈ°λŠ₯/도메인 이름} 에 μž‘μ„±

3. 라우트 λ‹¨μœ„ or μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„

  • λΌμš°νŒ… UIλ©΄ pages, 쑰립 UIλ©΄ components

4. 정적 vs 동적 μžμ‚°

  • .svg, .png 등은 assets/, μ»΄ν¬λ„ŒνŠΈλŠ” components/
  • 정적 μƒμˆ˜λŠ” constants.ts에 μ •μ˜
  • 정적 μŠ€νƒ€μΌμ€ styles/에 μž‘μ„±
  • μ „μ—­ νƒ€μž…μ€ types/에 μž‘μ„±
  • API 응닡 νƒ€μž…μ€ types/api.ts에 μž‘μ„±
  • μ»€μŠ€ν…€ 훅은 hooks/에 μž‘μ„±
  • μ„œλΉ„μŠ€ API ν˜ΈμΆœμ€ services/에 μž‘μ„±
  • λΌμš°νŒ… 섀정은 router/에 μž‘μ„±
  • μ „μ—­ μƒνƒœ κ΄€λ¦¬λŠ” context/에 μž‘μ„±

λΌμš°νŒ… 및 λ ˆμ΄μ•„μ›ƒ, νŽ˜μ΄μ§€ ꡬ성 μ˜ˆμ‹œ

  • React Router v6 μ΄μƒμ—μ„œ ꢌμž₯λ˜λŠ” λ ˆμ΄μ•„μ›ƒ 및 νŽ˜μ΄μ§€ ꡬ성 λ°©μ‹μœΌλ‘œ 곡용 λ ˆμ΄μ•„μ›ƒκ³Ό κ°œλ³„ νŽ˜μ΄μ§€ 및 κ°œλ³„ λ ˆμ΄μ•„μ›ƒμ„ λΆ„λ¦¬ν•˜μ—¬ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
<Routes>
  {/* 곡용 λ ˆμ΄μ•„μ›ƒ 적용 κ·Έλ£Ή */}
  <Route element={<BasePageLayout/>}>
    <Route path="/" element={<HomePage/>}/>
    <Route path="/mypage" element={<MyPage/>}/>
    <Route path="/about" element={<AboutPage/>}/>
  </Route>

  {/* 곡용 λ ˆμ΄μ•„μ›ƒμ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” κ°œλ³„ νŽ˜μ΄μ§€ 및 별도 λ ˆμ΄μ•„μ›ƒ 쑴재 μ‹œ*/}
  <Route element={<AuthLayout/>}>
    <Route path="/login" element={<LoginPage/>}/>
    <Route path="/signup" element={<SignupPage/>}/>
  </Route>
  <Route path="*" element={<NotFoundPage/>}/>
</Routes>

기타

  • μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„λŠ” Storybook을 λ§Œλ“€λ©΄ src/stories에 μž‘μ„±ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„λ‘œ λžœλ”λ§ 및 확인할 수 있음
    • (μžλ™ λ¬Έμ„œν™” 및 ν…ŒμŠ€νŠΈ 용이)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 99.0%
  • Other 1.0%