๊ธฐ์ ๊ณผ ๋๋ฅผ ์ฐ๊ฒฐํ๋ ๊ธฐ์ค
Comfit์ ๊ธฐ์ ์ ํต์ฌ ์ ๋ณด์ ๋์ ๊ฒฝํ์ ํ๋๋ก ์ฎ์ด ์ง์ ๊ธฐ์ ๋ณ ๋ง์ถค ์์์ ์ ๋ต์ ์ ์ํ๋ AI ๊ธฐ๋ฐ ๋ถ์ ํ๋ซํผ์ ๋๋ค.
![]() |
![]() |
![]() |
![]() |
|---|---|---|---|
์ด์ฑ์ ๐ |
์ค์๋น |
์ ์ ์ง |
๋ฐฐ์ ๋ฏผ |
| @hummingbbird | @odukong | @u-zzn | @qowjdals23 |
| ์ญํ | ์ข ๋ฅ |
|---|---|
| Library | |
| Programming Language | |
| Formatting | |
| UI Documentation | |
| Styling | |
| Data Fetching | |
| Package Manager | |
| Build Tool | |
| Version Control | |
| Deployment |
๊ฐ์ฅ ๋ณดํธ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฐฉ์์ธ Udacity Git Style Guide ๊ธฐ๋ฐ ์ปจ๋ฒค์ ์ ๋ฐ๋ฆ ๋๋ค.
[init] ๊ฐ๋ฐ ํ๊ฒฝ ์ด๊ธฐ ์ธํ
[feat] ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ
[fix] ๋ฒ๊ทธ ์์
[design] ์คํ์ผ ๋ณ๊ฒฝ ๋ฐ ๋์์ธ ๊ตฌํ
[update] Fix์ ๋ฌ๋ฆฌ ์๋ ์ ์์ ์ผ๋ก ๋์ํ์ง๋ง ๋ณด์์ ๊ฐ๋
[remove] ํ์ผ์ ์ญ์ ํ๋ ๊ฒฝ์ฐ
[move] ์ฝ๋๋ ํ์ผ์ ์ด๋ํ๋ ๊ฒฝ์ฐ
[rename] ํ์ผ ํน์ ํด๋๋ช
์ ์์ ํ๋ ๊ฒฝ์ฐ
[docs] ๋ฌธ์๋ฅผ ์์ ํ ๊ฒฝ์ฐ
[comment] ํ์ํ ์ฃผ์ ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ
[refactor] ์ฝ๋ ๋ฆฌํฉํ ๋ง (๊ฒฐ๊ณผ์ ๋ณ๊ฒฝ ์์ด ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ์ฌ์กฐ์ , ๊ฐ๋
์ฑ์ ๋์)
[test] ํ
์คํธ ์ฝ๋
[chore] ๊ทธ ์ธ ์์ํ ์์
[deploy] ๋ฐฐํฌ
๐ ๊ธฐ๋ณธ ๊ตฌ์กฐ
type: description (#์ด์ ๋๋ฒ)
- ์ปค๋ฐ์ ๋ํ ์ค๋ช
- ์ปค๋ฐ๋ง ๋ณด๊ณ ๋ ์ด๋ค ์์
์ธ์ง ์ดํดํ ์ ์๋๋ก ํ๊ธฐ ์ํจ
- ๊ธฐ๋ณธ ํ: [type]/#[์ด์๋๋ฒ]/๊ธฐ๋ฅ ์ด๋ฆ (ex)
feat/#914/company-card-component) - ๊ธฐ๋ฅ ํ์ ์ ๋ง๊ฒ ๊ฐ์ฅ ์๋จ์ ํค์๋๋ฅผ ๋ณ๊ฒฝํด์ฃผ์ธ์. (feat / refactor / fix / hotfix/ chore ๋ฑ)
- ๊ธฐ๋ฅ ์ด๋ฆ์๋ kebab-case๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๐ ํ์ผ ๋ฐ ํด๋๋ช
- ์ผ๋ฐฅ ์ผ์ด์ค(kebab-case) ์ฌ์ฉ
- ์:
company-card.tsx
โจ ์ปดํฌ๋ํธ๋ช
- ํ์ค์นผ ์ผ์ด์ค(PascalCase) ์ฌ์ฉ
- ์:
const CompanyCard = () => {};
๐ย ๋ณ์
-
๊ธฐ๋ณธ:
var๊ธ์ง๊ท์น ์์ ๊ธฐ๋ณธ camelCase hotPostResponseDataBoolean ํ์ 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 ๋ฑ)
- ์กด์คํ๋ฉฐ ๋งํ๊ธฐ
- ์นด์นด์คํก, ๋์ค์ฝ๋ ๋ฑ ์ํต ์ฑ๋ ๋น ๋ฅธ ํ์ธ ํ์!
- ์ ๊ทน์ ์ธ ํ๋๋ก ์ ๊ทผํ๊ณ ๊ฐ์ด ํด๊ฒฐํ๊ธฐ
- ๋ง์ด ์๊ธฐ !!! ๐๐๐๐
- ์์ ์ ์ฝ๋๋ฆฌ๋ทฐ๋ถํฐ ๐จ
- PR ๋ณผ๋ฅจ ์กฐ์ ํ๊ธฐ(๋๋ฌด ํฐ PR์ ๋ฆฌ๋ทฐ์ด์๊ฒ ๋ถ๋ด์ด ๋ฉ๋๋ค ๐)
- 2์ธ ์ด์ approve ํ์๐ข / LGTM ์ง์โ
- ๊ทผ๊ฑฐ ์๋ ๊ฐ๋ฐ, ๊ทผ๊ฑฐ ์๋ AI ํด ์ฌ์ฉ ๐ค
- ์ปจ๋ฒค์ ์ ์งํค๊ธฐ ๐ฎ




