ᛓ Git Flow
main : 제품으로 출시될 수 있는 브랜치
develop : 다음 출시 버전을 개발하는 브랜치
feature : 기능을 개발하는 브랜치
release : 이번 출시 버전을 준비하는 브랜치
hotfix : 출시 버전에서 발생한 버그를 수정 하는 브랜치
브랜치 전략
1. upstream - origin - local
2. 이슈 단위 브랜치
- feature/iOS/#2_기능명
- feature/FE/#2_기능명
- feature/BE/#2_기능명
머지 전략
1. feature -> develop: squash & merge
2. Merge시 branch 삭제
PR 템플릿

# :eyes: What is this PR?
# :pencil: Changes
## :pushpin: Related issue(s)
## :camera: Attachment(optional)
🍓FE
⭐️ Prettier
{
"tabWidth": 2,
"semi": true,
"singleQuote": true,
"jsxSingleQuote": true,
"trailingComma": "all",
"printWidth": 120,
"arrowParens": "always",
"endOfLine": "auto",
"bracketSameLine": false,
"bracketSpacing": true,
"plugins": ["@trivago/prettier-plugin-sort-imports"],
"pluginSearchDirs": false,
// import order 나중에 수정
"importOrder": [
"^react",
"^@[^/]+/(.*)$",
"<THIRD_PARTY_MODULES>",
"^@/components/(.*)$",
"^@/providers/(.*)$",
"^@/assets/(.*)$",
"^@/styles/(.*)$",
"^@/types/(.*)$",
"^@/hooks/(.*)$",
"^@/apis/(.*)$",
"^@/libs/(.*)$",
"^@/utils/(.*)$",
"^~"
],
"importOrderSortSpecifiers": true
}
⭐️ Eslint
module.exports = {
env: {
browser: true,
node: true,
es2021: true,
},
parser: '@typescript-eslint/parser',
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:import/recommended',
'plugin:import/typescript',
'plugin:prettier/recommended',
'plugin:@typescript-eslint/recommended',
'eslint-config-prettier',
],
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
project: './tsconfig.json',
tsconfigRootDir: __dirname,
ecmaFeatures: {
jsx: true,
},
},
plugins: ['react', '@typescript-eslint', 'react-hooks', 'import', 'prettier'],
rules: {
"no-var": "warn",
'no-unused-vars': 'off',
'no-console': 'off',
'import/prefer-default-export': 'off',
'react/prop-types': 'off',
'react/jsx-filename-extension': ['warn', { extensions: ['js', 'jsx', '.ts', '.tsx'] }],
'react/jsx-props-no-spreading': ['warn', { custom: 'ignore' }],
'react/react-in-jsx-scope': 'off',
'react/jsx-uses-react': 'off',
'react-hooks/exhaustive-deps': 'warn',
'@typescript-eslint/no-unused-vars': 'warn',
'@typescript-eslint/no-empty-interface': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-var-requires': 'off',
'import/no-unresolved': 'off',
},
settings: {
react: {
version: 'detect',
},
'import/resolver': {
node: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
},
'prettier/prettier': [
'error',
{
endOfLine: 'auto',
},
],
},
ignorePatterns: ['build', 'dist', 'public', 'node_modules/'],
};
⭐️ Commit Convention
- 제목은 최대 50 글자까지만 입력
- 제목 아래 본문 사이에 공백은 필수로 포함
- 본문은 구체적으로 설명이 필요할 경우 아랫줄에 작성
- 여러 줄의 메시지를 작성할 땐 "-"로 구분 (한 줄은 72자 이내)
- feat: 새로운 기능 추가
- fix: 버그를 고친 경우
- design: css등 사용자 UI 디자인 변경
- !breaking change: 커다란 API 변경
- !hotfix: 급하게 치명적인 버그를 고쳐야하는 경우
- style: 코드 포맷 변경, 세미 콜론 누락, 코드 수정이 없는 경우
- refactor: 코드 리팩토링
- comment: 주석 추가 및 변경
- docs: 문서 수정
- test: 테스트 추가, 테스트 리팩토링
- chore: 빌드 테스트 업데이트, 패키지 매니저 설정, 이외의 자잘한것들
- rename: 파일 혹은 폴더명 수정
- remove: 파일을 삭제하는 경우만 수행한 경우