태그 | 설명 |
---|---|
feat |
새로운 기능 추가 |
fix |
버그 수정 |
docs |
문서 수정 (README 등) |
style |
코드 스타일 변경 (공백, 세미콜론 등) |
refactor |
코드 리팩토링 (기능 변화 없음) |
test |
테스트 코드 추가 및 수정 |
chore |
빌드 설정, 패키지 매니저 설정 등 기타 변경 |
perf |
성능 개선 |
ci |
CI 설정 변경 |
예시
🔍 [Feat] 로그인 기능 구현
🔧 [Fix] 로그인 에러 처리 추가
📝 [Docs] README 커밋 컨벤션 추가
브랜치명 | 설명 |
---|---|
main |
배포 가능한 메인 브랜치 |
feat/* |
기능 개발용 브랜치 (예: feat/login ) |
src/
├── api/ # api 관리
├── assets/ # 이미지, 폰트 등 정적 리소스
│
├── components/ # 재사용 가능한 컴포넌트
│ ├── common/ # 공통 UI 컴포넌트 (Button, Modal 등)
│ └── domain/ # 도메인별 컴포넌트
│
├── hooks/ # 커스텀 훅
├── layouts/ # 페이지 레이아웃
├── pages/ # 라우트 페이지 (React Router 기준)
├── routes/ # 라우터 설정
├── store/ # 상태 관리 (ContextAPI, Redux, Zustand 등)
├── types/ # 타입 정의
├── utils/ # 유틸 함수
├── constants/ # 상수 (색상, URL 등)
├── data/ # mock 데이터
├── App.tsx
└── main.tsx
- BEM (Block - Element - Modifier) 방식 사용
예:note-item__title--active
{
"semi": false, // 세미콜론(;) 사용 안 함
"singleQuote": true, // 문자열은 싱글쿼트(') 사용
"singleAttributePerLine": true, // JSX 속성은 줄마다 하나씩
"bracketSameLine": true, // JSX 닫는 괄호는 마지막 라인에 붙임
"endOfLine": "lf", // 줄바꿈은 LF (\n) 사용 (유닉스 스타일)
"trailingComma": "none", // 끝에 쉼표는 붙이지 않음
"arrowParens": "avoid" // 화살표 함수의 매개변수가 하나일 땐 괄호 생략
}
module.exports = {
env: {
browser: true,
es2021: true
},
extends: [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended"
],
parser: "@typescript-eslint/parser",
parserOptions: {
ecmaVersion: "latest",
sourceType: "module"
},
plugins: ["@typescript-eslint", "prettier", "unused-imports"],
rules: {
"prettier/prettier": "error",
"unused-imports/no-unused-imports": "error",
"@typescript-eslint/no-unused-vars": "warn",
"no-console": "warn"
}
}
대상 | 컨벤션 |
---|---|
변수, 함수 | camelCase |
컴포넌트, 클래스 | PascalCase |
타입, 인터페이스 | PascalCase (접두어 I 생략) |
상수 | UPPER_SNAKE_CASE |
목적 | 예시 접두/접미 | 변수명 예시 |
---|---|---|
상태 값 | is , has , can |
isOpen , hasError |
이벤트 핸들러 | handle |
handleClick |
이벤트 콜백 | on |
onClose |
렌더 함수 | render |
renderItem() |
커스텀 훅 | use |
useScroll() , useUser() |