Skip to content
Β 
Β 

Latest commit

Β 

History

156 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🐦 Kareer

${\textsf{\color{blue}ν•œκ΅­ 컀리어 μ—¬μ •, Kareer와 ν•¨κ»˜ λͺ…ν™•ν•˜κ²Œ}}$

ν•œκ΅­μ—μ„œ 컀리어λ₯Ό μ‹œμž‘/μ „ν™˜ν•˜λŠ” 외ꡭ인 μœ ν•™μƒμ„ μœ„ν•œ μ»€λ¦¬μ–΄Β·λΉ„μž κ°€μ΄λ“œ
Korea + Career = Kareer, λ‚˜λ§Œμ˜ 컀리어 여정을 μ •λ¦¬ν•˜λ‹€

γ„΄ 전곡/μ–Έμ–΄/λΉ„μž μƒνƒœ 기반으둜 지원 κ°€λŠ₯ν•œ 직무,λΉ„μž μ˜΅μ…˜μ„ μžλ™ μ œμ‹œ
γ„΄ 개인 맞좀 νƒ€μž„λΌμΈκ³Ό To-Do둜 μ€€λΉ„ 단계λ₯Ό ν•œλˆˆμ— 정리
Image Image Image Image

πŸ‘¨πŸ»β€πŸ’» νŒ€μ› μ†Œκ°œ

πŸ‘‘ μž₯μ •ν›ˆ μ΄ν›ˆμ§„ κΉ€μœ€μ§€ μ†ν•˜μ€
Image Image Image Image
@jeonghoon11 @huniversal @yooncandooit @sonnnnhe

πŸ›  기술 μŠ€νƒ

μ—­ν•  μ’…λ₯˜ μ„ μ • 이유
UI Library React μ»΄ν¬λ„ŒνŠΈ 기반 개발둜 μœ μ§€λ³΄μˆ˜μ„±κ³Ό μž¬μ‚¬μš©μ„±μ„ 높이기 μœ„ν•΄ μ„ μ •
Programming Language TypeScript μ½”λ“œ μ•ˆμ •μ„±κ³Ό 생산성을 λ™μ‹œμ— ν™•λ³΄ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
Build Tool Vite λΉ λ₯Έ λ²ˆλ“€λ§κ³Ό HMR둜 개발 속도λ₯Ό 높이기 μœ„ν•΄ μ‚¬μš©
Styling vanilla-extract Zero-runtimeκ³Ό νƒ€μž… μ•ˆμ „ μŠ€νƒ€μΌλ§μœΌλ‘œ 일관성을 ν™•λ³΄ν•˜κΈ° μœ„ν•¨
Data Fetching TanStack Query Ky 캐싱/동기화와 κ²½λŸ‰ HTTP ν΄λΌμ΄μ–ΈνŠΈλ‘œ μ•ˆμ •μ μΈ 데이터 흐름을 μœ„ν•΄ μ„ μ •
Error Tracking Sentry 운영 ν™˜κ²½ μ—λŸ¬λ₯Ό λΉ λ₯΄κ²Œ νƒμ§€ν•˜κ³  원인을 μΆ”μ ν•˜κΈ° μœ„ν•΄ λ„μž…
Build System Turborepo λͺ¨λ…Έλ ˆν¬μ—μ„œ 캐싱/병렬 λΉŒλ“œλ‘œ 생산성을 높이기 μœ„ν•΄ μ‚¬μš©
Package Manager pnpm μ›Œν¬μŠ€νŽ˜μ΄μŠ€ μ˜μ‘΄μ„± 관리와 μ„€μΉ˜ 속도λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
Version Control Git GitHub ν˜‘μ—…κ³Ό μ½”λ“œ 리뷰 흐름을 ν‘œμ€€ν™”ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
Git Hook Lefthook 컀밋 μ „ μžλ™ κ²€μ¦μœΌλ‘œ ν’ˆμ§ˆ 기쀀을 μ§€ν‚€κΈ° μœ„ν•΄ λ„μž…
Deployment Cloudflare ν•΄μ™Έ μ‚¬μš©μž λŒ€μ‘μ„ μœ„ν•΄ κΈ€λ‘œλ²Œ μ—£μ§€ μ„œλ²„ 기반 전솑이 κ°€λŠ₯ν•œ ν”Œλž«νΌμ„ 선택
Formatting ESLint Prettier μ½”λ“œ μŠ€νƒ€μΌκ³Ό ν’ˆμ§ˆ 기쀀을 μΌκ΄€λ˜κ²Œ μœ μ§€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

πŸ“ Convention

πŸ“­ Git Convention

🌿 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 ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„± 및 μˆ˜μ •

πŸ’» Coding Convention

βœ… μ»΄ν¬λ„ŒνŠΈ
  • 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) λ‚¨λ°œ μ§€μ–‘

πŸ“‹ Ground Rule

🀝 ν˜‘μ—… κΈ°λ³Έ 원칙
  • 질문 많이 ν•˜κΈ°, λͺ¨λ₯΄λŠ” 것은 λΆ€λ„λŸ¬μ›Œν•˜μ§€ μ•ŠκΈ°
  • λ‘₯κΈ€κ²Œ λ§ν•˜κΈ°, 쑴쀑/감사 ν‘œν˜„ν•˜κΈ°
  • 수용적인 νƒœλ„λ‘œ ν”Όλ“œλ°± μ£Όκ³ λ°›κΈ°
  • 일정/λ¦¬μŠ€ν¬κ°€ 보이면 μ¦‰μ‹œ κ³΅μœ ν•˜κΈ°
  • λ‚΄λΆ€μ μœΌλ‘œ μ˜λ…Ό 쀑인 μ΄μŠˆλŠ” 외뢀에 λ…ΈμΆœν•˜μ§€ μ•ŠκΈ°
πŸ” μ½”λ“œ 리뷰 κ·œμΉ™
  • ν•©μˆ™ κΈ°κ°„ λ™μ•ˆμ€ 당일 올라온 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 기반 버전 관리
πŸ‘‘ μž₯μ •ν›ˆ μ΄ν›ˆμ§„ κΉ€μœ€μ§€ μ†ν•˜μ€
Image Image Image Image

About

[πŸ† λŒ€ν•™μƒ μ—°ν•© IT 벀처 μ°½μ—… 동아리 SOPT APPJAM μ‹¬μ‚¬μœ„μ›μƒ, μš°μˆ˜μƒ] ν•œκ΅­μ—μ„œ 컀리어λ₯Ό μ‹œμž‘/μ „ν™˜ν•˜λŠ” 외ꡭ인 μœ ν•™μƒμ„ μœ„ν•œ μ»€λ¦¬μ–΄Β·λΉ„μž κ°€μ΄λ“œ

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages