๋ง์ ๋จน์ ์ฌ๋๋ค์ ์ํ ์ง์ค ๊ณต๊ฐ, ๋ชจ๋ฆฝ Morib
์์
์ ํ์ํ ์๋น์ค๋ฅผ ๋ฑ๋กํ๊ณ ํ์ด๋จธ๋ฅผ ์ค์ ํ๋ฉฐ, ๋ฑ๋กํ์ง ์์ ์๋น์ค์ ์ ๊ทผํ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ์๋ฆผ ๋ฐ ํ์ด๋จธ๋ฅผ ์ค์งํฉ๋๋ค. ์น๊ตฌ๋ฅผ ์ถ๊ฐํ๊ณ ์๋ก์ ์ง์คํํฉ์ ๋ณด๋ฉฐ ํจ๊ป ๋๊ธฐ๋ถ์ฌ ๋ฐ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
ํ์ | ์๋์ | ๋ฐ์์ | ๊น๊ฑดํ | ๊นํ์ |
---|---|---|---|---|
ํ์ ์๊ฐ | ||||
์ญํ |
WEB FRONTEND |
WEB FRONTEND |
WEB FRONTEND |
WEB FRONTEND |
์ญํ | ์ข ๋ฅ |
---|---|
Library | |
Programming Language | |
Styling | |
Data Fetching | |
Formatting | |
Package Manager | |
Version Control |
"@tanstack/react-query": "^5.49.2"
"tailwindcss": "^3.4.4"
"socket.io-client": "^4.7.5"
1๏ธโฃ Commit ์ปจ๋ฒค์
Commit Type
type: subject
type๊ณผ ์ฝ๋ก ํ ํ์นธ ๋๊ณ subject
Commit ๋ฉ์์ง ์ข ๋ฅ ์ค๋ช
์ ๋ชฉ | ๋ด์ฉ |
---|---|
feat | ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒฝ์ฐ |
fix | ๋ฒ๊ทธ๋ฅผ ๊ณ ์น ๊ฒฝ์ฐ |
chore | ๋น๋ ํ ์คํธ ์ ๋ฐ์ดํธ, ํจํค์ง ๋งค๋์ ๋ฅผ ์ค์ ํ๋ ๊ฒฝ์ฐ, ์ฃผ์ ์ถ๊ฐ, ์์ํ ๋ฌธ์ ์์ |
docs | ๋ฌธ์ ์์ , ํ์ผ ์ญ์ , ํ์ผ๋ช ์์ ๋ฑ |
style | ๊ธฐ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์๋ ์ปค๋ฐ, ์ฝ๋ ์์, css ๋ฑ์ ํฌ๋งท์ ๊ดํ ์ปค๋ฐ |
refactor | ํ๋ก๋์ ์ฝ๋ ๋ฆฌํฉํ ๋ง |
code review | ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ์ |
2๏ธโฃ Branch ์ ๋ต
GitHub-Flow
์ ๋ต +develop
- ๋ธ๋์น ์ด์
feat/#์ด์๋ฒํธ/์ด์์ด๋ฆ(camelCase)
: ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ฉด์ ๊ฐ์๊ฐ ์ฌ์ฉํ ๋ธ๋์นmain
: ์์ ํ ์์ ํ๋ค๊ณ ํ๋จ๋์์ ๋, ์ฆ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ ์ต์ข mergeํ๋ ๊ณณdevelop
: ๋ฐฐํฌํ๊ธฐ ์ ๊ฐ๋ฐ ์ค์ผ ๋ ๊ฐ์์ ๋ธ๋์น์์ mergeํ๋ ๋ธ๋์น (default ๋ธ๋์น)feat/#issue/๊ธฐ๋ฅ๋ช
: feature ๋ธ๋์น. ์๋ก์ด ๊ธฐ๋ฅ ๊ฐ๋ฐ. ๊ฐ๋ฐ์ด ์๋ฃ๋๋ฉด develop ๋ธ๋์น๋ก ๋ณํฉfix/#issue/๊ธฐ๋ฅ๋ช
: feature๋ธ๋์น ์์ฑ ํ ๋ฒ๊ทธ๊ฐ ์๊ฒผ์ ๋ ์์ ํ๋ ๋ธ๋์น
3๏ธโฃ ์ฝ๋๋ฆฌ๋ทฐ ๋ฃฐ - PN๋ฃฐ
๋ฑ ํฌ์๋ฌ๋์์ ์ฌ์ฉํ๊ณ ์๋ ์ฝ๋๋ฆฌ๋ทฐ ๋ฃฐ์ธ PN๋ฃฐ์ ์ฌ์ฉํด์ ์ฝ๋๋ฆฌ๋ทฐ์์ ํ์ํ ์ปค๋ฎค๋์ผ์ด์ ๋น์ฉ์ ์ต์ํํ๊ณ ์ ํ์ต๋๋ค.1๏ธโฃ ํด๋ ๊ตฌ์กฐ
- ์ฌ์ฉ๋๋ ํ์ผ์ ๊ฐ๊น์ด ๋ชจ์์ ๋ฐฐ์น
|-- ๐ node_modules
|-- ๐ public
|-- ๐ src
|-- ๐ assets
| |-- ๐ svgs
| |-- ๐ images
|-- ๐ apis
| |-- ๐ auth
| | |-- ๐axios
| | |-- ๐queries
| |-- ๐ common
| |-- ๐ home
| |-- ๐ modal
| |-- ๐ tasks
| |-- ๐ timer
|-- client.ts
|-- ๐ components
| |-- ๐ atoms (button , input ๋ฑ ์ฌ์ฌ์ฉ์ ๊ฐ์ฅ ์์ ์์)
| | |-- ๐ XXXBtn
| | |-- ๐ CalendarXXX
| | |-- ๐ CategoryXXX
| | |-- ๐ CategoryCommonXXX
| | |-- ๐ HomeXXX
| | |-- ๐ TimerXXX
| | |-- ๐ TodoXXX
| |-- ๐ molecules (atom์ ๋ชจ์ ๋ง๋ ์นด๋, ๋ฆฌ์คํธ, ์ธ๋ค์ผ ๋ฑ์ ์์)
| | |-- ๐ Calendar
| | |-- ๐ CategoryXXX
| | |-- ๐ CategoryModalXXX
| | |-- ๐ Datepicker
| | |-- ๐ FriendInfoCarousel
| | |-- ๐ HomeXXX
| | |-- ๐ TimerXXX
| | |-- ๐ TodoXXX
| |-- ๐ templates (ํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํ
ํ๋ฆฟ - ํ์ด์ง์์ ์์๋ค์ ๊ฐ์ธ์ ์ฌ์ฉ)
| | |-- ๐ AddCategoryListModal
| | |-- ๐ CategoryModal
| | |-- ๐ HomePageWrapper
| | |-- ๐ LoginPageWrapper
| | |-- ๐ TimerPageTemplates
|-- ๐ pages
| |-- ๐ HomePage
| |-- ๐ LoginPage
| |-- ๐ RedirectPage
| |-- ๐ TimerPage
|-- ๐ constants
| |-- btnText.ts
| |-- router.ts
| |-- tabSelection.ts
|-- ๐ hocs
| |-- withAuthProtection.ts
|-- ๐ hooks (์ปค์คํ
ํ
์ ๋ด์๋๋ ํด๋)
| |-- useCalendar.ts
| |-- useCarouselTimer.ts
| |-- useClickOutside.ts
| |-- useCloseSideBar.ts
| |-- useCreateTodo.ts
| |-- useDatePicker.ts
| |-- useFriendInfoCarousel.ts
| |-- useFunnel.ts
| |-- useLottieAnimation.ts
| |-- useTimerCount.ts
| |-- useToggleSideBar.ts
| |-- useUrlHandler.ts
|-- ๐ mocks
| |-- categoryData.ts
| |-- faviconData.ts
| |-- homeData.ts
| |-- urlData.ts
| |-- userData.ts
| |-- userFriendData.ts
|-- ๐ stores
| |-- ๐ actions
| |-- ๐ atoms
|-- ๐ types
| |-- ๐ common
| |-- ๐ home
| |-- global.ts
| |-- todoData.ts
| |-- userData.ts
|-- ๐ utils ( ์ฌ์ฌ์ฉ์ด ๋์ ํจ์๋ชจ์ ํด๋ )
| |-- ๐ calendar
| |-- ๐ date
| |-- ๐ homePage
| |-- ๐ isUrlValid
| |-- ๐ time
| |-- ๐ timer
| |-- ๐ token
|-- Router.tsx (๋ผ์ฐํฐ ํ์ผ)
|-- App.tsx
|-- index.css
|-- main.tsx
|--vite-env.d.ts
|-- .eslintrc.cjs
|-- .gitignore
|-- .prettierrc
|-- README.md
|-- index.html
|-- package.json
|-- pnpm-lock.yaml
|-- postcss.config.js
|-- tailwind.config.js
|-- tsconfig.app.json
|-- tsconfig.json
|-- tsconfig.node.json
|-- vercel.json
|-- vite.config.ts
...
2๏ธโฃ Coding Conventions
- ํ์ฅ์๋
.tsx
- ์๋ฏธ์๋ div ๋๋ ์ปดํฌ๋ํธ ์ต์๋จ์ fragment ์ฌ์ฉํ๊ธฐ
- ์ธ๋ถ ๋ชจ๋๊ณผ ๋ด๋ถ ๋ชจ๋์ ๊ตฌ๋ถ์ง์ด import ํ๊ธฐ
- ๋ค์ด๋ก๋ ๋ฐ์ ํจํค์ง ๋ชจ๋๊ณผ ๋ด๋ถ์์ ๋ง๋ ๋ชจ๋์ ๊ตฌ๋ถ์์ ๊ฐ์ ธ์ค๊ธฐ
- ๋ณ์/ํจ์๋ช ์ 20์ ๋ฏธ๋ง, ์ฃผ์์ผ๋ก ๋ณ์ ์ค๋ช
- var ๊ธ์ง.
- ๋๋๋ก
const
๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋์ดํ ๊ฒฝ์ฐlet
์ ์ฌ์ฉํ๋๋ก ํ๋ค. - ์์๋ ์๋ฌธ ๋๋ฌธ์ ์ค๋ค์ดํฌ์ผ์ด์ค :
API_KEY
. - ํด๋์ค ์์ฑ์ / ์์ฑ์ ํจ์๋ ๋๋ฌธ์ ์นด๋ฉ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ค.
- ๋ณ์๋ช
: ์ดํดํ ์ ์์ ์ ๋๋ก ์ถฉ๋ถํ ๊ณ ๋ฏผํด๋ณด๊ธฐ
- ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์นด๋ฉ ์ผ์ด์ค ์ฌ์ฉ
- URL, HTML ๊ฐ์ ๋ฒ์ฉ์ ์ธ ๋๋ฌธ์ ์ฝ์ด๋ ๋๋ฌธ์ ๊ทธ๋๋ก ์ฌ์ฉ
- ๋ง์ฝ ๋ณ์์ ํ ๋น๋๋ ๊ฐ์ด boolean์ธ ๊ฒฝ์ฐ์๋ is๋ฅผ ์ ๋์ฌ๋ก ๋ถ์ธ๋ค.
- isActive ๊ฐ์ด is ํค์๋๋ boolean์๋ง ์ ์ฉ
- ์ ์ญ ๋ณ์๋ ๋๋๋ก ์ฌ์ฉํ์ง ์๋๋ค.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ช
:
handle
๋ก ์์ํ๋๋ก ํ๋ค. - ์ ํธํจ์๋ ๋ฐํ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ด๋ฆ ๋ค์ด๋ฐ
- ์ค๋ณตํจ์๋ utils ํด๋์ ๋ชจ์์ ์ฌ์ฌ์ฉํ๋ค.
- ๋๋๋ก ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ฐฐ์ด ๋ณต์ฌ์ โ ์คํ๋ ๋ ์ฐ์ฐ์(โฆ) ์ฌ์ฉ
const copys = [โฆoriginals]
- ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด๋ ๋ฆฌํฐ๋ด๋ก ์ ์ธ
- ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ์ฌ์ฉํ ๋, ๋๋๋ก ๋ถ๋ณ์ฑ์ ์งํค๋ฉด์ ์์ฑ
- spread ์ฐ์ฐ์๋ lodash, immer ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ํ์ฉํ ๊ฒ!
- ํจ์ ํํ์ ๋์ ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉ
- ๊ฐ์ฒด์ ํ๋กํผํฐ์ ์ ๊ทผํ ๋๋ Destructuring์ ์ด์ฉ
- ๋น๊ต์์๋
===
์!==
์ฐ์ฐ์๋ง ์ฌ์ฉ
- ๊ธ๋ก๋ฒ ์คํ์ผ์
index.css
์์ ์ ์ฉ - ์ต๋ํ ์๋งจํฑ ํ๊ทธ ์ ํ์ฉํ๊ธฐ
- svg ํ์ผ์ OOOIcon ์ผ๋ก import ํด์ ์ฌ์ฉ
- ๋จ์๋ rem์ ์ฌ์ฉ, ๋ณ๊ฒฝ์ด ํ์์๋ (border๊ด๋ จ) ์์ฑ๋ง px