${\textsf{\color{blue}νκ΅ μ»€λ¦¬μ΄ μ¬μ , Kareerμ ν¨κ» λͺ
ννκ²}}$
νκ΅μμ 컀리μ΄λ₯Ό μμ/μ ννλ μΈκ΅μΈ μ νμμ μν 컀리μ΄Β·λΉμ κ°μ΄λ
Korea + Career = Kareer, λλ§μ μ»€λ¦¬μ΄ μ¬μ μ μ 리νλ€
γ΄ μ 곡/μΈμ΄/λΉμ μν κΈ°λ°μΌλ‘ μ§μ κ°λ₯ν μ§λ¬΄,λΉμ μ΅μ
μ μλ μ μ
γ΄ κ°μΈ λ§μΆ€ νμλΌμΈκ³Ό To-Doλ‘ μ€λΉ λ¨κ³λ₯Ό νλμ μ 리
π¨π»βπ» νμ μκ°
μν
μ’
λ₯
μ μ μ΄μ
UI Library
μ»΄ν¬λνΈ κΈ°λ° κ°λ°λ‘ μ μ§λ³΄μμ±κ³Ό μ¬μ¬μ©μ±μ λμ΄κΈ° μν΄ μ μ
Programming Language
μ½λ μμ μ±κ³Ό μμ°μ±μ λμμ ν보νκΈ° μν΄ μ¬μ©
Build Tool
λΉ λ₯Έ λ²λ€λ§κ³Ό HMRλ‘ κ°λ° μλλ₯Ό λμ΄κΈ° μν΄ μ¬μ©
Styling
Zero-runtimeκ³Ό νμ
μμ μ€νμΌλ§μΌλ‘ μΌκ΄μ±μ ν보νκΈ° μν¨
Data Fetching
μΊμ±/λκΈ°νμ κ²½λ HTTP ν΄λΌμ΄μΈνΈλ‘ μμ μ μΈ λ°μ΄ν° νλ¦μ μν΄ μ μ
Error Tracking
μ΄μ νκ²½ μλ¬λ₯Ό λΉ λ₯΄κ² νμ§νκ³ μμΈμ μΆμ νκΈ° μν΄ λμ
Build System
λͺ¨λ
Έλ ν¬μμ μΊμ±/λ³λ ¬ λΉλλ‘ μμ°μ±μ λμ΄κΈ° μν΄ μ¬μ©
Package Manager
μν¬μ€νμ΄μ€ μμ‘΄μ± κ΄λ¦¬μ μ€μΉ μλλ₯Ό κ°μ νκΈ° μν΄ μ¬μ©
Version Control
νμ
κ³Ό μ½λ 리뷰 νλ¦μ νμ€ννκΈ° μν΄ μ¬μ©
Git Hook
μ»€λ° μ μλ κ²μ¦μΌλ‘ νμ§ κΈ°μ€μ μ§ν€κΈ° μν΄ λμ
Deployment
ν΄μΈ μ¬μ©μ λμμ μν΄ κΈλ‘λ² μ£μ§ μλ² κΈ°λ° μ μ‘μ΄ κ°λ₯ν νλ«νΌμ μ ν
Formatting
μ½λ μ€νμΌκ³Ό νμ§ κΈ°μ€μ μΌκ΄λκ² μ μ§νκΈ° μν΄ μ¬μ©
πΏ Git Flow
main branch : νμ λ°°ν¬ κ°λ₯ν μμ μν μ μ§
develop branch : ν΅ν© λΈλμΉ, λͺ¨λ κΈ°λ₯ λΈλμΉλ μ¬κΈ°μ λΆκΈ°/λ³ν©
feature branch : developμμ λΆκΈ° β μμ
μλ£ ν developμΌλ‘ PR
λ°°ν¬ : developμ΄ μμ νλλ©΄ mainμΌλ‘ λ³ν© ν λ°°ν¬
ποΈ λΈλμΉ λ€μ΄λ°
feat/chip-component/#43
κ°λ°/λ¨μ/μ΄μλ²νΈ κΈ°μ€μΌλ‘ μΌκ΄λκ² μμ±ν©λλ€.
π PR λͺ
μμ
[Feat] λ‘κ·ΈμΈ κΈ°λ₯μΆκ°
Feat(web): apps/web κ΄λ ¨ λ³κ²½
Feat(kds): packages/kds-ui κ΄λ ¨ λ³κ²½
β
Commit μμ
feat: λΉμ¦λμ€ λ‘μ§ μΆκ°
fix: μ
λ ₯κ° κ²μ¦ μμ
chore: μμ‘΄μ± μ
λ°μ΄νΈ
π·οΈ GitHub λΌλ²¨ μ¬μ©
λΌλ²¨λͺ
μ€λͺ
chore
μ μ§/κ΄λ¦¬ μμ
(ESLint, Prettier, package μ
λ°μ΄νΈ λ±)
deploy
λ°°ν¬ μμ
docs
λ¬Έμν μμ
feature
μλ‘μ΄ κΈ°λ₯ κ°λ°
fix
λ¬Έμ ν΄κ²° μμ
refactor
μ½λ 리ν©ν λ§ (κΈ°λ₯ λ³ν μμ)
style
λμμΈ κ΄λ ¨ μμ
test
ν
μ€νΈ μ½λ μμ± λ° μμ
β
μ»΄ν¬λνΈ
Props interfaceλ Props μ λ―Έμ¬ μ¬μ© (CardProps, ChipProps)
μλ―Έ μλ <div> λμ μ΅μλ¨μ Fragment (<>...</>) μ¬μ©
childrenμ΄ μμΌλ©΄ <Component /> ννμ self-closing μ¬μ©
λμμΈ μμ€ν
μ»΄ν¬λνΈλ Headless UI μμΉ(λΉμ¦λμ€ λ‘μ§ μ΅μν)
λλ©μΈ μμ‘΄ μ»΄ν¬λνΈλ λμμΈ μμ€ν
μ΄ μλ apps/web λ΄λΆμ ꡬν
interface InfoTextProps {
name : string ;
}
const InfoText = ( { name } : InfoTextProps ) => {
return (
< >
< h1 > Welcome, { name } !</ h1 >
< p > This is our new page, we're glad you are here!</ p >
</ >
) ;
} ;
π ν΄λλͺ
μλ¬Έμλ‘ μμ
볡μν μ μ§ (s λΆμ΄κΈ°)
μΌλ°₯ μΌμ΄μ€ μ¬μ©
μμ: shared/inputs, widgets, user-pages
π νμ
κΈ°λ³Έμ interface μ¬μ©
μ λμΈ/νν/리ν°λ΄ νμ
μ²λΌ νμν κ²½μ°μλ§ type μ¬μ©
interface UserProps {
name : string ;
age : number ;
}
type Status = 'loading' | 'success' | 'error' ;
type Position = [ number , number ] ;
π λ³μ
var κΈμ§
μ μΈ μμ: const β let
λ¬Έμμ΄ μ‘°ν©μ ν
νλ¦Ώ 리ν°λ΄ μ¬μ©
μμλ μλ¬Έ λλ¬Έμ μ€λ€μ΄ν¬ μΌμ΄μ€ (API_KEY)
λ³μλͺ
μ μλ―Έκ° λͺ
νν΄μΌ ν¨ (κΈΈμ΄λ OK)
booleanμ is μ λμ¬ μ¬μ© (isActive)
π‘ Key μ¬μ© κ·μΉ
β λλ€ κ° μ¬μ© κΈμ§
β
μ μ 리μ€νΈλ index μ¬μ© κ°λ₯
β
λμ 리μ€νΈλ κ³ μ id μ¬μ©
β
μνκ° μλ κ²°κ³Ό 리μ€νΈ(νμ΄μ§λ€μ΄μ
/κ²μ)λ index μ¬μ© κ°λ₯
βοΈ ν¨μ
ν¨μλͺ
μ λμ¬+λͺ
μ¬ ννλ‘ λͺ
ννκ²
μ λμ¬ μμ: get, create, check, convert, add, minus, filter
μ΄λ²€νΈ νΈλ€λ¬λ handle μ λμ¬ νμ
μ: handleResetClick, handleSubmitClick
μ νΈ ν¨μλ λ°νκ° κΈ°μ€ λ€μ΄λ° (hasEmail)
2κ° μ΄μ λλ©μΈμμ μ¬μ© μ utilsλ‘ μ΄λ
νμ΄ν ν¨μ μ¬μ©
π§© λ°°μ΄/ꡬ쑰
λ°°μ΄ λ³΅μ¬ μ μ€νλ λ μ°μ°μ μ¬μ© (const copies = [...originals])
for보λ€λ forEach/map μ¬μ©
ꡬ쑰 λΆν΄ ν λΉ μ κ·Ή νμ©
interface ScheduleCardProps {
title : string ;
deadline : string ;
}
interface UserProfileProps {
name : string ;
major : string ;
}
const ScheduleCard = ( { title, deadline } : ScheduleCardProps ) => {
// ...
} ;
function getUserProfileLabel ( { name, major } : UserProfileProps ) {
// ...
}
π¨ μ€νμΌ
μλ§¨ν± νκ·Έ μ κ·Ή νμ© (MDN λ¬Έμ μ°Έκ³ )
UI μ»΄ν¬λνΈμ λΆνμν <div> μ¬μ© κΈμ§
Wrapperκ° νμνλ©΄ Containerλ‘ λ€μ΄λ°
βοΈ React
κ³ μ°¨ μ»΄ν¬λνΈλ with μ λμ¬ μ¬μ©
Contextλ Context μ λ―Έμ¬ μ¬μ©
React νμ
μ κ°λ³ import μ¬μ©
import { ReactNode } from 'react' ;
React Compiler μ¬μ© μ μ , λΆνμν μλ λ©λͺ¨μ΄μ μ΄μ
(useMemo/useCallback) λ¨λ° μ§μ
π€ νμ
κΈ°λ³Έ μμΉ
μ§λ¬Έ λ§μ΄ νκΈ°, λͺ¨λ₯΄λ κ²μ λΆλλ¬μνμ§ μκΈ°
λ₯κΈκ² λ§νκΈ°, μ‘΄μ€/κ°μ¬ νννκΈ°
μμ©μ μΈ νλλ‘ νΌλλ°± μ£Όκ³ λ°κΈ°
μΌμ /리μ€ν¬κ° 보μ΄λ©΄ μ¦μ 곡μ νκΈ°
λ΄λΆμ μΌλ‘ μλ
Ό μ€μΈ μ΄μλ μΈλΆμ λ
ΈμΆνμ§ μκΈ°
π μ½λ 리뷰 κ·μΉ
ν©μ κΈ°κ° λμμ λΉμΌ μ¬λΌμ¨ PRμ μ΅λν λΉμΌ 리뷰 (λ¦μ΄λ λ€μλ )
μ½λ 리뷰λ μλ μκ° μ μΈ 3μκ° μ΄λ΄λ‘ λ§λ¬΄λ¦¬νκΈ°
κ·Όκ±° μλ 리뷰 μμ±νκΈ° (λ νΌλ°μ€ μ²¨λΆ κΆμ₯)
λ₯κΈκ² λ§νκΈ°, 곡격μ μΈ νν μ§μ
PR λ¨μλ μκ², "μκΈ°μ₯ PR" μ§μ
π PR/μ»€λ° μ΄μ
PRμ μκ², λ¬Έμλ ν¬κ² (μμ± μκ°λ κ°λ° μκ°μΌλ‘ μΈμ)
PRμ μμΈν μμ±ν΄ κ³ λ―Ό/κ²°μ κ³Όμ κΉμ§ 곡μ
컀λ°μ μμ λ¨μλ‘ λΆλ¦¬
kareer-client/
βββ apps/
β βββ web/
β β βββ public/
β β βββ src/ # FSD ꡬ쑰
β β βββ app/
β β βββ pages/
β β βββ widgets/
β β βββ features/
β β βββ entities/
β β βββ shared/
β βββ desktop/ # μΆν λ°μ€ν¬ν± μ± κ°λ° μμ
βββ packages/
β βββ kds-ui/
β β βββ src/
β β βββ components/
β β βββ styles/
β βββ icons/
β β βββ src/
β βββ configs/
β βββ eslint/
β βββ prettier/
β βββ typescript/
βββ pnpm-workspace.yaml # catalog κΈ°λ° λ²μ κ΄λ¦¬
π μ₯μ ν
μ΄νμ§
κΉμ€μ§
μνμ