-
Notifications
You must be signed in to change notification settings - Fork 2
프로젝트 컨벤션
Yerin edited this page Jun 1, 2024
·
1 revision
🔥 branch 전략 (배민 git flow 참고 🔗 : https://techblog.woowahan.com/2553/)
- main(master): 서비스을 직접 배포하는 역할을 하는 브랜치입니다.
- feature(기능): 각 기능 별 개발 브랜치입니다.
- develop(개발): feature에서 개발된 내용이 저장되는 브랜치입니다.
- 커밋 메세지를 잘 작성하면, 우리는 단순히 커밋 이력만 보고서도 현재까지 어떤 개발이 진행되었고, 어떤 커밋에서 문제가 발생했는지 등을 확인할 수 있게 됩니다. 특히나 규모가 큰 개발일수록 이 커밋 메세지는 더욱 중요해집니다.
작업 타입 | 작업내용 |
---|---|
feat | 해당 파일에 새로운 기능이 생김 |
fix | 버그 수정 |
docs | 문서 수정 |
refactor | 코드 리팩토링 |
style | 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우 |
chore | 빌드 업무 수정, 패키지 매니저 수정 |
- 프로젝트에서는 패키지 매니저로 Yarn Berry를 사용합니다. 빠른 속도와 Zero-Install 기능을 사용하여 프로젝트의 의존성 관리를 효율적으로 진행할 수 있습니다.
-
src: 소스 코드가 위치하는 폴더입니다.
-
components: 재사용 가능한 UI 컴포넌트들이 위치합니다.
- 예:
Badge.jsx
- 예:
-
styles: 스타일 관련 파일들이 위치합니다.
- 예:
constants.js
,utils.js
- 예:
- pages: 각 페이지 컴포넌트들이 위치합니다.
- hooks: 커스텀 훅들이 위치합니다.
- utils: 유틸리티 함수들이 위치합니다.
- assets: 이미지, 폰트 등 정적 파일들이 위치합니다.
-
components: 재사용 가능한 UI 컴포넌트들이 위치합니다.
src/
├── assets/
│ ├── images/
│ │ └── logo.png
├── components/
│ ├── Badge.jsx
│ ├── Button.jsx
│ └── ...
├── hooks/
│ └── useCustomHook.js
├── pages/
│ ├── Home/
│ │ └── Home.jsx
│ ├── About/
│ │ └── About.jsx
│ ├── index.js
│ └── ...
├── styles/
│ ├── globalStyles.js
│ ├── constants.js
│ └── utils.js
├── utils/
│ └── index.js
└── index.js
// prop-types 미사용
'react/prop-types': 'off',
// 함수 컴포넌트를 화살표 함수 형태로 정의하도록 규칙 설정
'react/function-component-definition': [
'error',
{
namedComponents: 'arrow-function',
unnamedComponents: 'arrow-function',
},
],
//안 쓰는 import 에러 처리
'unused-imports/no-unused-imports': 'error',
'import/order': [
'error',
{
groups: [
// 내장 모듈
'builtin',
// npm을 통해 설치된 외부 모듈
'external',
// 프로젝트 내부에서 설정한 경로 별칭을 사용하는 모듈
'internal',
// 상위 디렉토리에 있는 모듈
'parent',
// 같은 디렉토리에 있는 모듈
'sibling',
// 같은 디렉토리의 index 파일
'index'
],
pathGroups: [
{
pattern: 'react*',
group: 'external',
position: 'before'
},
{
pattern: '@/hooks{,/**}',
group: 'internal',
position: 'after'
},
{
pattern: '@/schemas{,/**}',
group: 'internal',
position: 'after'
},
{
pattern: '@/utils{,/**}',
group: 'internal',
position: 'after'
},
{
pattern: '@/constants{,/**}',
group: 'internal',
position: 'after'
},
{
pattern: '@/pages{,/**}',
group: 'internal',
position: 'after'
},
{
pattern: '@/components{,/**}',
group: 'internal',
position: 'after'
},
{
pattern: '@/styles{,/**}',
group: 'internal',
position: 'after'
},
{
pattern: '@/svg{,/**}',
group: 'internal',
position: 'after'
},
{
pattern: '@/**',
group: 'internal',
position: 'after'
}
],
// pathGroups 규칙을 적용하지 않을 import 타입을 설정
pathGroupsExcludedImportTypes: [],
// 임포트 그룹 사이 개행 여부
'newlines-between': 'never',
alphabetize: {
// 알파벳 순서대로 정렬
order: 'asc',
// 대소문자 구분 없이 정렬
caseInsensitive: true
}
}
]