-
Notifications
You must be signed in to change notification settings - Fork 7
๐ฎ๐ป ์ฝ๋ ์ปจ๋ฒค์
Sujong Kwak edited this page Nov 1, 2024
·
1 revision
- ์ผ๋ฐฅ ์ผ์ด์ค (kebab-case)๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ ์ด๋ฆ์ ์์ฑํด์.
- ์ผ๋ฐ์ ์ผ๋ก ์ปดํฌ๋ํธ, ํ์ด์ง, ํ ๋ฑ์ ํด๋๋ฅผ ๊ตฌ์กฐํํ๋ฉฐ, ํด๋๋ช ์ ๋ชจ๋ ์๋ฌธ์๋ก ์์ฑํ๋ ๊ฒ์ ์์น์ผ๋ก ํด์.
-
์ปดํฌ๋ํธ ํ์ผ: ํ์ค์นผ ์ผ์ด์ค (PascalCase) ์ฌ์ฉํด์.
Button.jsx
,HomePage.jsx
์ฒ๋ผ, ๊ฐ ์ปดํฌ๋ํธ ํ์ผ์ ์ฒซ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ํ๊ณ ํ์ค์นผ ์ผ์ด์ค๋ก ์์ฑํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ๋ช ํํ๊ฒ ๊ตฌ๋ถํด์. -
์ผ๋ฐ ํ์ผ (์ ํธ๋ฆฌํฐ ํจ์, API ํ์ผ ๋ฑ): ์นด๋ฉ ์ผ์ด์ค (camelCase) ์ฌ์ฉํด์.
formatDate.js
,useFetch.js
์ ๊ฐ์ด, ์ผ๋ฐ ํ์ผ์ ํจ์๋ช ์ฒ๋ผ ์นด๋ฉ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํด ๊ตฌ๋ถํด์. -
์ค์๋ง์ ๊ธ์ง! ํ๊ธฐ๋ก ์ฝ์ํ์ด์. (์ : idx โ index)
-
๋์ฌ + ๋ช
์ฌ: ํจ์๋ช
์ ๋์ฌ + ๋ช
์ฌ ํํ๋ก, ํจ์์ ๋์๊ณผ ๋์์ด ๋ช
ํํ ํด์ผํด์.
- ์์:
getUserInfo
,updateProductList
,calculateTotalPrice
- ์์:
-
์นด๋ฉ ์ผ์ด์ค: ํจ์๋ช
๋ ์ฒซ ๊ธ์๋ฅผ ์๋ฌธ์๋ก ์์ํ๋ฉฐ, ๋จ์ด์ ์ฒซ ๊ธ์๋ ๋๋ฌธ์๋ก ์์ฑํด์.
- ์์:
fetchData
,saveUserData
,resetForm
- ์์:
-
๋ช
์ฌ + ๋ช
์ฌ: ๋ ๊ฐ ์ด์์ ๋จ์ด๋ก ๊ตฌ์ฑ๋ ๋ณ์๋ช
์ ๋ช
์ฌ + ๋ช
์ฌ ํํ๋ก ์์ฑํด์.
- ์์:
userList
,productDetails
,orderHistory
- ์์:
-
์นด๋ฉ ์ผ์ด์ค: ๋ณ์๋ช
์ ์ฒซ ๊ธ์๋ฅผ ์๋ฌธ์๋ก ์์ํ๊ณ , ๋จ์ด์ ์ฒซ ๊ธ์๋ ๋๋ฌธ์๋ก ํ๊ธฐํด์.
- ์์:
totalPrice
,userProfile
,orderId
- ์์:
-
Boolean ๋ณ์: ์ฐธ/๊ฑฐ์ง์ ๋ํ๋ด๋ ๋ณ์๋
is
,has
,can
๋ฑ์ ์ ๋์ฌ๋ฅผ ์ฌ์ฉ, Boolean์์ ๋ช ํํ ํด์ผํด์.- ์์:
isLoggedIn
,hasPermission
,canEdit
- ์์:
-
Boolean ํจ์: ์ฐธ/๊ฑฐ์ง์ ๋ฆฌํดํ๋ ํจ์๋
check
์ ๋์ฌ๋ฅผ ์ฌ์ฉ.- ์์:
checkLoggedIn
,checkPermission
,checkEditable
- ์์:
-
์์: ์์๋ช
์ ๋ชจ๋ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ์์ฑํ๋ฉฐ, ๋จ์ด ์ฌ์ด์
_
์ฌ์ฉ.- ์์:
MAX_RETRY_COUNT
,API_BASE_URL
,DEFAULT_TIMEOUT
- ์์:
ํญ๋ชฉ | ์์ | ๋ค์ด๋ฐ ๊ท์น |
---|---|---|
์ปดํฌ๋ํธ ํด๋ | button/, header/ | ์ผ๋ฐฅ ์ผ์ด์ค |
์ปดํฌ๋ํธ ํ์ผ | Button.jsx | ํ์ค์นผ ์ผ์ด์ค |
ํ์ด์ง ์ปดํฌ๋ํธ | Home.jsx, About.jsx | ํ์ค์นผ ์ผ์ด์ค |
์ผ๋ฐ ํจ์ ๋ฐ ์ ํธ๋ฆฌํฐ | formatDate.js | ์นด๋ฉ ์ผ์ด์ค |
์ปค์คํ ํ ํ์ผ | useFetch.js | ์นด๋ฉ ์ผ์ด์ค |
์คํ์ผ ํ์ผ | Button.css | ์ปดํฌ๋ํธ ์ด๋ฆ๊ณผ ๋์ผ |
ํญ๋ชฉ | ์์ | ๋ค์ด๋ฐ ๊ท์น |
---|---|---|
๋ผ์ฐํธ ํ์ผ | userRoutes.js | ์นด๋ฉ ์ผ์ด์ค |
์ปจํธ๋กค๋ฌ ํ์ผ | userController.js | ์นด๋ฉ ์ผ์ด์ค |
๋ชจ๋ธ ํ์ผ | userModel.js | ์นด๋ฉ ์ผ์ด์ค |
๋ฏธ๋ค์จ์ด ํ์ผ | authMiddleware.js | ์นด๋ฉ ์ผ์ด์ค |
์๋น์ค ํ์ผ | userService.js | ์นด๋ฉ ์ผ์ด์ค |
์ ํธ๋ฆฌํฐ ํ์ผ | formatDate.js | ์นด๋ฉ ์ผ์ด์ค |
ํด๋ | controllers, models | ์ผ๋ฐฅ ์ผ์ด์ค |
(์ฃผ์, API ๋ฌธ์ํ, readme ๊ท์น ๋ฑ)
- ์คํ ๋ฆฌ๋ถ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ฌธ์ํํ๊ณ , ์คํ ๋ฆฌ๋ถ ์ฝ๋๋ ๊ฐ์ ๋๋ ํ ๋ฆฌ์ ์์ฑํด์.
-
TSDoc ์ฃผ์์ ํตํด util ํจ์, ์ปค์คํ ํ ์ TypeDoc์ผ๋ก ๋ฌธ์ํํ ์ ์๋๋ก ์์ฑํด์.
-
์์ ์ฝ๋:
/**
* ์ฃผ์ด์ง ๋ ์ง๋ฅผ ์ํ๋ ํ์์ ๋ฌธ์์ด๋ก ๋ณํํฉ๋๋ค.
* @description
* ์ง์ํ๋ ํฌ๋งท:
* - 'YYYY-MM-DD'
* - 'MM/DD/YYYY'
* - 'DD-MM-YYYY'
*
* @param date - ๋ณํํ Date ๊ฐ์ฒด
* @param format - ์ํ๋ ๋ ์ง ํ์ (๊ธฐ๋ณธ๊ฐ: 'YYYY-MM-DD')
* @returns ํฌ๋งท๋ ๋ ์ง ๋ฌธ์์ด
*
* @example
* const date = new Date('2024-01-01');
* const formatted = formatDate(date, 'MM/DD/YYYY');
* console.log(formatted); // "01/01/2024"
*/
export const formatDate = (date: Date, format: string = 'YYYY-MM-DD'): string => {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return format
.replace('YYYY', year.toString())
.replace('MM', month)
.replace('DD', day);
};
- 1. ๊ฐ๋ฐ ํ๊ฒฝ ์ธํ ๋ฐ ํ๋ก์ ํธ ๋ฌธ์ํ
- 2. ์ค์๊ฐ ํต์
- 3. ์ธํ๋ผ ๋ฐ CI/CD
- 4. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด Canvas ๊ตฌํํ๊ธฐ
- 5. ์บ๋ฒ์ค ๋๊ธฐํ๋ฅผ ์ํ ์์ CRDT ๊ตฌํ๊ธฐ
-
6. ์ปดํฌ๋ํธ ํจํด๋ถํฐ ์น์์ผ๊น์ง, ํจ์จ์ ์ธ FE ์ค๊ณ
- ์ข์ ์ปดํฌ๋ํธ๋ ๋ฌด์์ธ๊ฐ? + Headless Pattern
- ํจ์จ์ ์ธ UI ์ปดํฌ๋ํธ ์คํ์ผ๋ง: Tailwind CSS + cn.ts
- Tailwind CSS๋ก ๋์์ธ ์์คํ ๋ฐ UI ์ปดํฌ๋ํธ ์ธํ
- ์น์์ผ ํด๋ผ์ด์ธํธ ๊ตฌํ๊ธฐ: React ํ๊ฒฝ์์ ํจ์จ์ ์ธ ์น์์ผ ์ํคํ ์ฒ
- ์น์์ผ ํด๋ผ์ด์ธํธ ์ฝ๋ ๋ถ์ ๋ฐ ๊ณต์
- 7. ํธ๋ฌ๋ธ ์ํ ๋ฐ ์ฑ๋ฅ/UX ๊ฐ์
- 1์ฃผ์ฐจ ๊ธฐ์ ๊ณต์
- 2์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- 3์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- 4์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- 5์ฃผ์ฐจ ๋ฐ๋ชจ ๋ฐ์ด
- WEEK 06 ์ฃผ๊ฐ ๊ณํ
- WEEK 06 ๋ฐ์ผ๋ฆฌ ์คํฌ๋ผ
- WEEK 06 ์ฃผ๊ฐ ํ๊ณ