Info

Repository

Environment

  • vite
  • react
  • typeScript
  • msw (mock service worker)
    • chrome์— mock BE๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ†ต์‹  ํ…Œ์ŠคํŠธ
  • zustand (์ƒํƒœ๊ด€๋ฆฌ)
  • axios (api ํ†ต์‹  JWT ํ† ๊ทผ ์‚ฌ์šฉ)
  • react-secure-storage (JWT ํ† ํฐ ๋ณด์•ˆ ์ €์žฅ)
  • scss
  • lodash (throttling/debounce)
  • dayjs (๋‚ ์งœ ๊ฐ์ฒด)

Package.json

package.json
{  
  "name": "react-guide",  
  "private": true,  
  "version": "0.0.0",  
  "type": "module",  
  "scripts": {  
    "dev": "vite",  
    "build": "tsc -b && vite build",  
    "lint": "eslint .",  
    "preview": "vite preview"  
  },  
  "dependencies": {  
    "@emotion/react": "^11.14.0",  
    "@emotion/styled": "^11.14.0",  
    "@mui/material": "^6.3.0",  
    "axios": "^1.7.9",  
    "dayjs": "^1.11.13",  
    "lodash": "^4.17.21",  
    "msw": "^2.7.0",  
    "react": "^18.3.1",  
    "react-dom": "^18.3.1",  
    "react-error-boundary": "^5.0.0",  
    "react-query": "^3.39.3",  
    "react-router-dom": "^7.1.1",  
    "react-secure-storage": "^1.3.2",  
    "scss": "^0.2.4",  
    "vite-tsconfig-paths": "^5.1.4",  
    "zustand": "^5.0.2"  
  },  
  "devDependencies": {  
    "@eslint/js": "^9.17.0",  
    "@types/react": "^18.3.17",  
    "@types/react-dom": "^18.3.5",  
    "@typescript-eslint/eslint-plugin": "^8.19.1",  
    "@typescript-eslint/parser": "^8.19.1",  
    "@vitejs/plugin-react": "^4.3.4",  
    "eslint": "^9.17.0",  
    "eslint-config-prettier": "^9.1.0",  
    "eslint-plugin-import": "^2.31.0",  
    "eslint-plugin-jsx-a11y": "^6.10.2",  
    "eslint-plugin-react": "^7.37.3",  
    "eslint-plugin-react-hooks": "^5.0.0",  
    "eslint-plugin-react-refresh": "^0.4.16",  
    "globals": "^15.13.0",  
    "prettier": "^3.4.2",  
    "sass-embedded": "^1.83.1",  
    "typescript": "~5.6.2",  
    "typescript-eslint": "^8.18.1",  
    "vite": "^6.0.3"  
  },  
  "msw": {  
    "workerDirectory": [  
      "public"  
    ]  
  }  
}

Directory Structure

  • assets - ์ •์  ๋ฆฌ์†Œ์Šค ๋ชจ์Œ
  • components - ๊ณตํ†ต component ๋ชจ์Œ
  • repositories - api ๋˜๋Š” local ์ €์žฅ์†Œ ์ ‘๊ทผ function ๋ชจ์Œ
  • stores - ์ƒํƒœ ๊ด€๋ฆฌ ๋ชจ์Œ
  • typings - type ๋ชจ์Œ
  • utils - utility function ๋ชจ์Œ
  • views - ํ™”๋ฉด ๋ชจ์Œ (๊ฐ๊ฐ์˜ ํ™”๋ฉด์— ๋”ฐ๋ผ ๋ถ„๋ฆฌ) MVVM ํŒจํ„ด
    • {name}Page.scss - ํ™”๋ฉด์—์„œ ์‚ฌ์šฉํ•˜๋Š” css
    • {name}Page.tsx - ์‹ค์ œ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ๋ถ€๋ถ„
    • use{name}PageViewModel.ts - ํ™”๋ฉด์—์„œ ํ•„์š”ํ•œ variable ๋˜๋Š” function์„ ๊ด€๋ฆฌ
      (store์— ์ ‘๊ทผํ•  ๊ฒฝ์šฐ, viewModel์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ)
    • components - ํ™”๋ฉด์—์„œ ํ•„์š”ํ•œ components์˜ ๋ชจ์Œ
      (components ๋‚ด๋ถ€์—๋„ ํŽ˜์ด์ง€์™€ ๋™์ผํ•˜๊ฒŒ MVVM ํŒจํ„ด)

Tree

directories
.
โ”œโ”€โ”€ assets
โ”‚ย ย  โ””โ”€โ”€ scss
โ”œโ”€โ”€ components
โ”‚ย ย  โ””โ”€โ”€ snackbar
โ”œโ”€โ”€ repositories
โ”œโ”€โ”€ stores
โ”œโ”€โ”€ typings
โ”‚ย ย  โ””โ”€โ”€ constants
โ”œโ”€โ”€ utils
โ”‚ย ย  โ”œโ”€โ”€ api
โ”‚ย ย  โ”œโ”€โ”€ color
โ”‚ย ย  โ”œโ”€โ”€ date
โ”‚ย ย  โ”œโ”€โ”€ error
โ”‚ย ย  โ””โ”€โ”€ storage
โ””โ”€โ”€ views
 ย ย  โ”œโ”€โ”€ auth
 ย ย  โ”‚ย ย  โ”œโ”€โ”€ components
 ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ authorized
 ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ login
 ย ย  โ”œโ”€โ”€ calendar
 ย ย  โ”‚ย ย  โ”œโ”€โ”€ dailyCalendar
 ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ components
 ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dailyCalendarBody
 ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ dailyCalendarHeader
 ย ย  โ”‚ย ย  โ”œโ”€โ”€ monthlyCalendar
 ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ components
 ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ monthlyCalendarBody
 ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ monthlyCalendarDate
 ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ monthlyCalendarHeader
 ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ monthlyCalendarSchedule
 ย ย  โ”‚ย ย  โ”œโ”€โ”€ popup
 ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dateSchedulePopup
 ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ scheduleAddPopup
 ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ scheduleModifyPopup
 ย ย  โ”‚ย ย  โ”œโ”€โ”€ scheduleList
 ย ย  โ”‚ย ย  โ””โ”€โ”€ weeklyCalendar
 ย ย  โ”‚ย ย      โ”œโ”€โ”€ components
 ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ weeklyCalendarBody
 ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ weeklyCalendarDate
 ย ย  โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ weeklyCalendarHeader
 ย ย  โ”œโ”€โ”€ layouts
 ย ย  โ”‚ย ย  โ””โ”€โ”€ sidebar
 ย ย  โ”‚ย ย      โ”œโ”€โ”€ components
 ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ menu
 ย ย  โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ userInfo
 ย ย  โ””โ”€โ”€ main