Skip to content

Latest commit

ย 

History

History
202 lines (158 loc) ยท 9.49 KB

File metadata and controls

202 lines (158 loc) ยท 9.49 KB

Comfit ๋กœ๊ณ  ์ด๋ฏธ์ง€

๊ธฐ์—…๊ณผ ๋‚˜๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ์ค€


Comfit์€ ๊ธฐ์—…์˜ ํ•ต์‹ฌ ์ •๋ณด์™€ ๋‚˜์˜ ๊ฒฝํ—˜์„ ํ•˜๋‚˜๋กœ ์—ฎ์–ด ์ง€์› ๊ธฐ์—…๋ณ„ ๋งž์ถค ์ž์†Œ์„œ ์ „๋žต์„ ์ œ์•ˆํ•˜๋Š” AI ๊ธฐ๋ฐ˜ ๋ถ„์„ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.


comfit_background



๐Ÿ‘ฅ Team member

์ฑ„๋ฆฌ๋“œ ์˜ค๋‘์ฝฉ ๋ง‰๋ƒ‰์ด ๋ฐฐ์ •๋ฏผ
์ด์ฑ„์˜ ๐Ÿ‘‘
์˜ค์ˆ˜๋นˆ
์ •์œ ์ง„
๋ฐฐ์ •๋ฏผ
@hummingbbird @odukong @u-zzn @qowjdals23

๐Ÿ”ง Tech Stack

์—ญํ•  ์ข…๋ฅ˜
Library React
Programming Language TypeScript
Formatting ESLint Prettier
UI Documentation Storybook
Styling Vanilla Extract
Data Fetching TanstackQuery swagger-typescript-api
Package Manager Pnpm
Build Tool VITE
Version Control Git GitHub
Deployment Vercel



๐Ÿ Convention

๐Ÿ‘€ Commit Convention

๊ฐ€์žฅ ๋ณดํŽธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์ธ Udacity Git Style Guide ๊ธฐ๋ฐ˜ ์ปจ๋ฒค์…˜์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

[init] ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ดˆ๊ธฐ ์„ธํŒ…
[feat] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
[fix] ๋ฒ„๊ทธ ์ˆ˜์ •
[design] ์Šคํƒ€์ผ ๋ณ€๊ฒฝ ๋ฐ ๋””์ž์ธ ๊ตฌํ˜„
[update] Fix์™€ ๋‹ฌ๋ฆฌ ์›๋ž˜ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ–ˆ์ง€๋งŒ ๋ณด์™„์˜ ๊ฐœ๋…
[remove] ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ
[move] ์ฝ”๋“œ๋‚˜ ํŒŒ์ผ์„ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ
[rename] ํŒŒ์ผ ํ˜น์€ ํด๋”๋ช…์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ
[docs] ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•œ ๊ฒฝ์šฐ
[comment] ํ•„์š”ํ•œ ์ฃผ์„ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ
[refactor] ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (๊ฒฐ๊ณผ์˜ ๋ณ€๊ฒฝ ์—†์ด ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ์žฌ์กฐ์ •, ๊ฐ€๋…์„ฑ์„ ๋†’์ž„)
[test] ํ…Œ์ŠคํŠธ ์ฝ”๋“œ
[chore] ๊ทธ ์™ธ ์ž์ž˜ํ•œ ์ˆ˜์ •
[deploy] ๋ฐฐํฌ

๐Ÿ‘‡ ๊ธฐ๋ณธ ๊ตฌ์กฐ

type: description (#์ด์Šˆ ๋„˜๋ฒ„)

- ์ปค๋ฐ‹์— ๋Œ€ํ•œ ์„ค๋ช…
- ์ปค๋ฐ‹๋งŒ ๋ณด๊ณ ๋„ ์–ด๋–ค ์ž‘์—…์ธ์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ

๐Ÿ‘€ Git Convention

  • ๊ธฐ๋ณธ ํ‹€: [type]/#[์ด์Šˆ๋„˜๋ฒ„]/๊ธฐ๋Šฅ ์ด๋ฆ„ (ex)feat/#914/company-card-component)
  • ๊ธฐ๋Šฅ ํƒ€์ž…์— ๋งž๊ฒŒ ๊ฐ€์žฅ ์•ž๋‹จ์˜ ํ‚ค์›Œ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ์„ธ์š”. (feat / refactor / fix / hotfix/ chore ๋“ฑ)
  • ๊ธฐ๋Šฅ ์ด๋ฆ„์—๋Š” kebab-case๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘€ Coding Convention

๐Ÿ“ ํŒŒ์ผ ๋ฐ ํด๋”๋ช…
  • ์ผ€๋ฐฅ ์ผ€์ด์Šค(kebab-case) ์‚ฌ์šฉ
  • ์˜ˆ: company-card.tsx
โœจ ์ปดํฌ๋„ŒํŠธ๋ช…
  • ํŒŒ์Šค์นผ ์ผ€์ด์Šค(PascalCase) ์‚ฌ์šฉ
  • ์˜ˆ: const CompanyCard = () => {};
๐Ÿ“›ย ๋ณ€์ˆ˜
  • ๊ธฐ๋ณธ: var ๊ธˆ์ง€

    ๊ทœ์น™ ์˜ˆ์‹œ
    ๊ธฐ๋ณธ camelCase hotPostResponseData
    Boolean ํƒ€์ž… is ์ ‘๋‘์‚ฌ ์‚ฌ์šฉ isActive
    ์ƒ์ˆ˜ ๋Œ€๋ฌธ์ž ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค VITE_API_KEY, ROTATE_DELAY
๐Ÿฆพย ํ•จ์ˆ˜

๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ Jake Trent์˜ ๋„ค์ด๋ฐ ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ: ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‚ฌ์šฉ

  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ

    • handle์ ‘๋‘์‚ฌ ์‚ฌ์šฉ(๋‹จ, props๋Š” on ์ ‘๋‘์‚ฌ ์‚ฌ์šฉ)
    • ๋„ค์ด๋ฐ ์ˆœ์„œ๋Š” handle+๋ช…์‚ฌ+๋™์‚ฌ (ex) handleButtonClick)
    • 2๋ฒˆ ์ด์ƒ ์‚ฌ์šฉ๋  ๊ฒฝ์šฐ shared/lib ํด๋”์— ์ƒ์„ฑ
    <MyComponent onAlertClick={handleAlertClick} />
๐Ÿ†Ž ํƒ€์ž…
  • ๊ธฐ๋ณธ: interface ์‚ฌ์šฉ(ํ™•์žฅ์„ฑ good ๐Ÿ‘)
  • ์œ ๋‹ˆ์˜จ, ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž…๊ณผ ๊ฐ™์€ ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ์—๋งŒ type ์‚ฌ์šฉ
  • ๋„ค์ด๋ฐ: PascalCase(ex) LoginResponseType)
โž• ๊ทธ ์™ธ
  • ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ ์‚ฌ์šฉ(๋ฌด์ง€์„ฑ div ํƒœ๊ทธ โŒ)
  • border, border-radius์™€ ๊ฐ™์ด ํฌ๊ธฐ๊ฐ€ ์ ˆ๋Œ€์ ์œผ๋กœ ๊ณ ์ •๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ px ๋‹จ์œ„ ์‚ฌ์šฉ
  • ๊ทธ ์™ธ ๋ชจ๋“  ๊ฒƒ์€ rem ๋‹จ์œ„๋กœ ํ†ต์ผ
  • letter-spacing: em ๋‹จ์œ„ ์ ์šฉ
  • ์›น ์ ‘๊ทผ์„ฑ๋„ ๊ณ ๋ คํ•˜๋Š” ๊ฐœ๋ฐœ
  • import ๋ฌธ์—์„œ type์€ ํ•˜๋‹จ์— ์ž…๋ ฅ

๐Ÿ“‚ ํด๋” ๊ตฌ์กฐ

fsd ๊ตฌ์กฐ๋Š” ํ‘œ์ค€ํ™”๋œ ํด๋” ๊ตฌ์กฐ ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ ์ดํ•ด ๊ด€๊ณ„ ํŒŒ์•…์ด ์šฉ์ดํ•˜๊ณ , ๊ธฐ๋Šฅ์„ ์ค‘์ ์œผ๋กœ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋‚˜๋‰˜์–ด ์ฝ”๋“œ์˜ ์œ„์น˜๊ฐ€ ๋ช…ํ™•ํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์–ด์š”. Comfit ํŒ€์€ ์ด์™€ ๊ฐ™์€ ์ด์œ ๋กœ fsd ํด๋” ๊ตฌ์กฐ๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ์–ด์š”. ๋” ์ž์„ธํ•œ ๋„์ž… ์ด์œ ๊ณผ ๊ทธ ๊ณผ์ •์€ ํ•ด๋‹น PR์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

src
 โ”ฃ app // ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™”, ๋ผ์šฐํŒ… ์„ค์ • ๋“ฑ
 โ”ƒ โ”ฃ layout
 โ”ƒ โ”ฃ providers
 โ”ƒ โ”ฃ routes
 โ”ƒ โ”ฃ styles
 โ”ƒ โ”ฃ App.tsx
 โ”ƒ โ”— main.tsx
 โ”ฃ features // ๋„๋ฉ”์ธ ๋‹จ์œ„๋กœ ์ปดํฌ๋„ŒํŠธ ๊ด€๋ฆฌ
 โ”ƒ โ”ฃ bookmark
 โ”ƒ โ”ฃ company-analyze
 โ”ƒ โ”ฃ experience
 โ”ƒ โ”ฃ home
 โ”ƒ โ”ฃ login
 โ”ƒ โ”ฃ my-page
 โ”ƒ โ”ฃ onboarding
 โ”ƒ โ”— register
 โ”ฃ pages // ๋„๋ฉ”์ธ ๋‹จ์œ„๋กœ ํŽ˜์ด์ง€ ๊ด€๋ฆฌ
 โ”ฃ shared // ๊ณต์œ ๋˜๋Š” ํ•ญ๋ชฉ๋“ค
 โ”ƒ โ”ฃ assets
 โ”ƒ โ”ƒ โ”ฃ icons
 โ”ƒ โ”ƒ โ”ฃ icons
 โ”ƒ โ”ƒ โ”— images
 โ”ƒ โ”ฃ config
 โ”ƒ โ”ฃ lib
 โ”ƒ โ”ฃ model
 โ”ƒ โ”ฃ stories
 โ”ƒ โ”ฃ styles
 โ”ƒ โ”ƒ โ”ฃ tokens
 โ”ƒ โ”ฃ types
 โ”ƒ โ”— ui
 โ”— widgets // ์˜๋ฏธ์ ์œผ๋กœ ๊ตฌ๋ถ„๋˜๋Š” ์ปดํฌ๋„ŒํŠธ(header, company-card ๋“ฑ)

๐Ÿ‘ผ Ground Rule

๐Ÿงฉ ํ˜‘์—… ๊ทœ์น™

  1. ์กด์ค‘ํ•˜๋ฉฐ ๋งํ•˜๊ธฐ
  2. ์นด์นด์˜คํ†ก, ๋””์Šค์ฝ”๋“œ ๋“ฑ ์†Œํ†ต ์ฑ„๋„ ๋น ๋ฅธ ํ™•์ธ ํ•„์ˆ˜!
  3. ์ ๊ทน์ ์ธ ํƒœ๋„๋กœ ์ ‘๊ทผํ•˜๊ณ  ๊ฐ™์ด ํ•ด๊ฒฐํ•˜๊ธฐ
  4. ๋งŽ์ด ์›ƒ๊ธฐ !!! ๐Ÿ˜†๐Ÿ˜†๐Ÿ˜†๐Ÿ˜†

๐Ÿงฉ ๊ฐœ๋ฐœ ๊ทœ์น™

  1. ์ž‘์—… ์ „ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ถ€ํ„ฐ ๐Ÿ’จ
  2. PR ๋ณผ๋ฅจ ์กฐ์ ˆํ•˜๊ธฐ(๋„ˆ๋ฌด ํฐ PR์€ ๋ฆฌ๋ทฐ์–ด์—๊ฒŒ ๋ถ€๋‹ด์ด ๋ฉ๋‹ˆ๋‹ค ๐Ÿ˜‡)
  3. 2์ธ ์ด์ƒ approve ํ•„์ˆ˜๐ŸŸข / LGTM ์ง€์–‘โŒ
  4. ๊ทผ๊ฑฐ ์žˆ๋Š” ๊ฐœ๋ฐœ, ๊ทผ๊ฑฐ ์žˆ๋Š” AI ํˆด ์‚ฌ์šฉ ๐Ÿค–
  5. ์ปจ๋ฒค์…˜ ์ž˜ ์ง€ํ‚ค๊ธฐ ๐Ÿ‘ฎ