μνλ μ£Όλ¬Έμ μ μΌμ΄ν¬λ₯Ό μ½κ³ λΉ λ₯΄κ²!
π° ννΌ(WHIPEE)λ μ£Όλ¬Έμ μ μΌμ΄ν¬μ λν μ 보λ₯Ό ν λμ λͺ¨μλ³΄κ³ λΉκ΅ν μ μλ μλΉμ€ μ
λλ€ π
νμ | π» μνλ |
π± μμ§μ |
π₯¨ λ°μ±μ° |
π μ μμ° |
---|---|---|---|---|
νμ μκ° | ||||
μν |
WEB FRONTEND, LEAD |
WEB FRONTEND |
WEB FRONTEND |
WEB FRONTEND |
μν | μ’ λ₯ |
---|---|
Library | |
Programming Language | |
Styling | |
Data Fetching | |
Formatting | |
Package Manager | |
Version Control | |
Test | |
Deploy |
|-- π node_modules
|-- π public
|-- π svg
|-- π data
|-- userData.json
|-- π src
|-- π assets
|-- π svgs
|-- π images
|-- π components
|-- π common
|-- π Button
|-- Button.tsx
|-- Button.css.ts
|-- index.ts
|-- π pages
|-- πonboarding
|-- πcomponents
|-- πtypes
|-- πhooks
|-- πpage
|-- πOnboardingPage
|-- OnboardingPage.tsx
|-- OnboardingPage.css.ts
|-- π hooks
|-- π stories
|-- π Button.stories.ts
|-- π styles
|-- π utils
|-- π constants
|-- routePath.ts
|-- π apis
|-- π domains
|-- π queryKeys
|-- π types
|-- π routes
|-- homeRoutes.tsx
|-- adminRoutes.tsx
|-- index.ts
|-- App.tsx
|-- main.tsx
|-- .eslintrc.json
|-- .gitignore
|-- .prettierrc
|-- README.md
|-- package.json
|-- tsconfig.json
|-- yarn.lock
1οΈβ£ Coding
- var κΈμ§.
const
βlet
μμλ‘ μλΆν° μ μΈ.- λ³μλ₯Ό μ‘°ν©νμ¬ λ¬Έμμ΄ μμ±μ β+ β κΈμ§. β 리ν°λ΄ μ¬μ©(λ°±ν± ```)
- μμλ μλ¬Έ λλ¬Έμ μ€λ€μ΄ν¬μΌμ΄μ€ :
API_KEY
- λ³μλͺ
: μλ―Έλ₯Ό νμ€ν λνλΌ μ μλλ‘
- μμ : λ°°μ΄μ Arr 보λ€λ λ³μs = fruits, userlists λ±λ±
- μ€μλ§ μ°μ§λ§κΈ°. μ΄λ¦μ΄ κΈΈμ΄μ§λλΌλ μ΄λ€ λ³μμΈμ§ μ ννκ²
- λ§μ½ λ³μμ ν λΉλλ κ°μ΄ booleanμΈ κ²½μ°μλ isλ₯Ό μ λμ¬λ‘ λΆμΈλ€.
- isActive κ°μ΄ is ν€μλλ booleanμλ§ μ μ©
- map μ¬μ©μ λ³λλλ 리μ€νΈλΌλ©΄ keyκ°μ κ³ μ νκ² μ μ€μ ν΄μ£ΌκΈ° indexμ¬μ©κΈμ§
- μλ²μμ λ΄λ €μ£Όλ idκ° or uuid μ¬μ©
- νμ΄ν ν¨μ. function ν€μλ μ°μ§λ§κΈ°
- ν¨μλͺ
: μ΄λ€ μΌμ νλμ§ λͺ
νν λ¬μ¬. λμ¬+λͺ
μ¬μ νμ.
get
: μ΄λ€ κ°μ μ»λ ν¨μcreate
: κ°κ³ μλ λ³μλ₯Ό νμ©, μλ‘μ΄ κ°κ³Ό λ³μλ₯Ό λ§λ¦check
: ν¨μ μμ λ‘μ§μ νμΈ.- κ·ΈμΈ, κΈ°λ₯μ λΆλͺ νκ² λλ¬λ΄λλ‘ λ€μ΄λ°
- μ΄λ²€νΈ νΈλ€λ§ ν¨μλ
handle
λ‘ μμ. κ·Έ μΈμλ κΈμ§.- μμ: handleResetClick, handleSubmitClick
- μ νΈν¨μλ λ°νκ°μ κΈ°μ€μΌλ‘ μ΄λ¦ λ€μ΄λ°
- booleanκ° λ°νμ hasβ- ex) hasEmail = emailμ΄ μ‘΄μ¬νλμ§ μ¬λΆλ₯Ό λ°ννλ ν¨μ
- μ€λ³΅ν¨μλ utils ν΄λμ λͺ¨μμ μ¬μ¬μ©νλ€.
-
rafce
-
리μ‘νΈ μ»΄ν¬λνΈλ§
PascalCase
μ¬μ© : PascalCase- κ·Έ μΈμλ
camelCase
ex) type, d.tsνμΌ, tsνμΌ
- κ·Έ μΈμλ
-
νμ Interface μ μΈμ
- μ»΄ν¬λνΈμ μΈμ :
~Props
(ex. HomeProps, AdminProps)- μ΄λμ Interfaceλ type ν΄λλ‘ λΆλ¦¬ κΈμ§
- ex) MainComponent interface μ μΈμ = MainProps
- μ»΄ν¬λνΈμ μΈμ :
-
propsλͺ μ camelCase λλ¬Έμμ λ¬Έμ μκΉ
-
μλ―Έμλ div λλ μ»΄ν¬λνΈ μ΅μλ¨μ fragment μ¬μ©νκΈ°
const InfoText = () => { return ( <> <h1>Welcome!</h1> <p>This our new page, we're glad you're are here!</p> </> ); };
-
childrenμ΄ λΆνμν λ selfClosingμ¬μ©νκΈ°
<Component />
- 무쑰건 μλ¬Έμλ‘ μμνκΈ°!
- λ€μ sλΆμ΄κΈ°
- μΉ΄λ©μΌμ΄μ€!
- object β interface
- λ¨μΌλ³μ β type
- μ»΄ν¬λνΈ μΈμμ λν νμ μ μ»΄ν¬λνΈ μλ¨μ
- κ·Έ μΈμ νμ λ€μ types ν΄λμ(μ»΄ν¬λνΈ μΈμμ λ°°μ΄orκ°μ²΄ λ±μ΄ μλ€λ©΄ μ΄ νμ λ types ν΄λλ‘)
- propμ νμ λͺ μ OOOProps
- api response νμ λͺ μ OOOResponseTypes
-
λ°°μ΄ λ³΅μ¬μ β μ€νλ λ μ°μ°μ(β¦) μ¬μ©
const copys = [β¦originals]
-
for 보λ¨,
forEach
/map
μ μ¬μ© -
ꡬ쑰 λΆν΄ ν λΉμ μ κ·Ή μ΄μ©
interface userDataProps { userName: string; userBirth: string; } function checkIsUser({ userName, userBirth }: userDataProps) {}
-
λΆνμν λ°λ³΅λ¬Έ μ§μ : filter, array.include() λ±
- 쑰건λΆλ‘ λ°μ΄ν°λ₯Ό νμΈνκ±°λ λ½μμΌνλ λ‘μ§μ μ¬μ©ν λμλ
Map
μ΄λObject
μ²λΌkey
κ°μ μ΄μ©ν΄μ μμλ₯Ό μ°Ύλ μλ£νμ μ΄μ©νλκ²μ κ³ λ €ν΄λ³΄κ±°λ, λ°°μ΄μ μννμ§ μκ³ indexλ‘ λ°λ‘ μ κ·Όν μ μλ λ°©λ²μ΄ μλμ§ κ³ λ €.
- 쑰건λΆλ‘ λ°μ΄ν°λ₯Ό νμΈνκ±°λ λ½μμΌνλ λ‘μ§μ μ¬μ©ν λμλ
2οΈβ£ Git & Github
- main: μ νμ λ°°ν¬νλ λΈλμΉ
- develop: κ°λ° λΈλμΉλ‘ κ°λ°μλ€μ΄ μ΄ λΈλμΉλ₯Ό κΈ°μ€μΌλ‘ κ°μ μμ
ν κΈ°λ₯λ€μ Merge
develop
λΈλμΉλ₯Ό κΈ°μ€μΌλ‘feature
λΈλμΉλ₯Ό λΆκΈ°νκ³ , κ°feature
λΈλμΉλ₯Ό ν©μΉ¨develop
λΈλμΉμμmain
λΈλμΉλ‘ λ³ν©
- feature: κΈ°λ₯μ κ°λ°νλ λΈλμΉλ‘ κΈ°λ₯ κ°λ°μ΄ μλ£λλ©΄
develop
λΈλμΉμ Merge- λ°λμ
develop
μμ λΆκΈ°ν΄μΌ λ¨. λΆκΈ° λ λ€λ₯Έfeature
λΈλμΉμμ λ λ€λ₯Έfeature
λΈλμΉλ₯Ό λΆκΈ°νλ©΄ μ λ μλ¨.
- λ°λμ
ν νλ‘μ νΈμμλ release, hotfix λΈλμΉλ μ¬μ©νμ§ μμ.
κΈ°λ₯ ꡬν μ μμ μ΄ κ΅¬νν λΆλΆμ μ΄μλ‘ κ΄λ¦¬
μ΄μν νλ¦Ώ
μ νμ©νμ¬ μ΄μ μμ±- 1μμ μμ±λ μ΄μ λ²νΈλ₯Ό μ΄μ©νμ¬ λΈλμΉ μμ±.
- λΈλμΉ μ΄λ¦μ
feat/#<issued number>/example
ex) feat/#18/common-button
- λΈλμΉ μ΄λ¦μ
λͺ¨λ μμ
μ develop μμ λΆκΈ°λ feature
λΈλμΉμμ μ§ν
- μ»€λ° λ©μμ§λ
컀λ°μ ν: <ꡬν, μμ , κ°λ°ν λ΄μ©μ λν μ»€λ° λ©μμ§> (#<issued number>)
ex)feat: Button κ³΅ν΅ μ»΄ν¬λνΈ μ μ (#18)
컀λ°μ ν μλ―Έ feat μλ‘μ΄ κΈ°λ₯ μΆκ° fix λ²κ·Έ μμ docs λ¬Έμ μμ style μ½λ formatting, μΈλ―Έμ½λ‘ λλ½, μ½λ μ체μ λ³κ²½μ΄ μλ κ²½μ° refactor μ½λ 리ν©ν λ§ test ν μ€νΈ μ½λ, 리ν©ν λ§ ν μ€νΈ μ½λ μΆκ° chore ν¨ν€μ§ 맀λμ μμ , κ·Έ μΈ κΈ°ν μμ ex) .gitignore design CSS λ± μ¬μ©μ UI λμμΈ λ³κ²½ comment νμν μ£Όμ μΆκ° λ° λ³κ²½ deploy λ°°ν¬ κ΄λ ¨ setting κ°λ° νκ²½ μΈν
feature
λΈλμΉμμ develop
λΈλμΉλ‘ mergeν λλ PRμ μ΄μ©ν¨ (μ§μ merge β)
-
develop, feature λΈλμΉ μ΅μ ν
-
develop β feature merge νκ³ μΆ©λ μ²λ¦¬
- feature λΈλμΉλ‘ checkout ν΄μ
git merge develop
- feature λΈλμΉλ‘ checkout ν΄μ
-
PRν νλ¦Ώ
μ νμ©νμ¬ PR μμ±- PR μμ±μ μ΄μλ²νΈ μ λλ‘ κΈ°μ ν΄μΌ μ΄μκ° ν¨κ» λ«ν(ν νλ¦Ώλλ‘ νλ©΄ λ¨)
- νμλ€μ review & approve(2λͺ ) ν μ€μΏΌμ λ¨Έμ§
μ£Όμ
β οΈ - review & approve κ³Όμ μμ λ€λ₯Έ PR λ¨Έμ§ λ± developμ μμ μ¬νμ΄ μκ²Όλ€λ©΄, 2λ²κ³Όμ μ λ€μ ν΄μ€μΌ ν¨. -
μ μμ μΌλ‘ λ¨Έμ§ λμλ€λ©΄ feature λΈλμΉ μμ
π» μνλ: Compound Component Pattern
π± μμ§μ : μ΄κΈ°μΈν
μ 볡νκΈ° (prettier, eslint, theme, GlobalStyle)
π₯¨ λ°μ±μ°: Errorboundary
π μ μμ°: TanStack Query