30th SOPKATHON
λ¬΄λ° 2μΌ ν΄μ»€ν€
π 2022.05.21 ~ 2022.05.22
κΉλ¨μ€ | λ°λν¬ | μ΅λ€μΈ |
@NamjunKim12 | @Nahee-Park | @Chedda98 |
λ©μΌν¨μ μ 리νλ©°, μΈν°λ· μΌμμμ νκ²½λ³΄νΈ μμ½κ² μμνκΈ°
κΈ°λ₯ | μμΈ κΈ°λ₯ | λ΄λΉ | ꡬν μ¬λΆ |
---|---|---|---|
λ©μΈ ννμ΄μ§ | μ€νλμ μ΄λ―Έμ§ 보μ¬μ£ΌκΈ° | κΉλ¨μ€ | βοΈ |
λ©μΈ ννμ΄μ§ | κ΅¬κΈ μμ λ‘κ·ΈμΈ μΈμ¦ | κΉλ¨μ€ | βοΈ |
κ΅¬κΈ μμ λ‘κ·ΈμΈ | κ΅¬κΈ μμ λ‘κ·ΈμΈ κΈ°λ₯ | κΉλ¨μ€, λ°λν¬, μ΅λ€μΈ | βοΈ |
λ©μΌν¨ νν© νμ΄μ§ | νμ¬ μ½μ§ μμ λ©μΌ κ°―μ 보μ¬μ£Όλ νμ΄μ§ | λ°λν¬ | βοΈ |
λ‘λ©μ°½ | λ©μΌμ μ§μ°λ λμμ λ‘λ© νμ΄μ§ | κΉλ¨μ€, λ°λν¬, μ΅λ€μΈ | βοΈ |
μΊλ¦°λλ·° | λ©μΌμ μ§μ°λ κΈ°κ°μ μΊλ¦°λλ·° | λ°λν¬ | βοΈ |
κ²°κ³Ό νμ΄μ§ | κ²°κ³Ό λ ΈμΆ νμ΄μ§ | μ΅λ€μΈ | βοΈ |
κ²°κ³Ό νμ΄μ§ | 곡μ νκΈ° λ²νΌ | μ΅λ€μΈ | βοΈ |
λΌμ΄λΈλ¬λ¦¬ | λͺ©μ |
---|---|
Axios | μλ² ν΅μ |
React | μ¬μ©μ μΈν°νμ΄μ€ |
styled-components | μ½λ λ μ΄μμ μμ± |
react-calendar | μΊλ¦°λλ·°(컀μ€ν ) |
react-copy-to-clipboard | ν΄λ¦½λ³΄λ |
react-google-login | κ΅¬κΈ μμ λ‘κ·ΈμΈ |
"dependencies": {
"name": "frontend",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^13.0.0",
"@testing-library/user-event": "^13.2.1",
"axios": "^0.27.2",
"hoist-non-react-statics": "^3.3.2",
"moment": "^2.29.3",
"react": "^18.1.0",
"react-copy-to-clipboard": "^5.1.0",
"react-calendar": "^3.7.0",
"react-dom": "^18.1.0",
"react-google-login": "^5.2.2",
"react-router-dom": "^6.3.0",
"react-scripts": "5.0.1",
"styled-components": "^5.3.5",
"styled-reset": "^4.4.0",
"web-vitals": "^2.1.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^5.25.0",
"@typescript-eslint/parser": "^5.25.0",
"babel-eslint": "^10.1.0",
"eslint": "^8.15.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-prettier": "^8.5.0",
"eslint-import-resolver-typescript": "^2.7.1",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-react": "^7.30.0",
"eslint-plugin-react-hooks": "^4.5.0",
"prettier": "^2.6.2"
}
}
μ°λ¦¬μ λΈλμΉλ κΌΌκΌΌν΄!
type(νμ ): title(μ λͺ©)
μ λͺ©μ μ΅λ 50κΈμκΉμ§λ§ μ λ ₯
body(λ³Έλ¬Έ, μλ΅ κ°λ₯)
λ³Έλ¬Έμ ν μ€μ μ΅λ 72κΈμκΉμ§λ§ μ λ ₯
types = { init: λΈλμΉ μ²« μ»€λ° feat: μλ‘μ΄ κΈ°λ₯μ λν μ»€λ° fix: λ²κ·Έ μμ μ λν μ»€λ° build: λΉλ κ΄λ ¨ νμΌ μμ μ λν μ»€λ° chore: κ·Έ μΈ μμν μμ μ λν μ»€λ° ci: CI κ΄λ ¨ μ€μ μμ μ λν μ»€λ° docs: λ¬Έμ μμ μ λν μ»€λ° style: μ½λ μ€νμΌ νΉμ ν¬λ§· λ±μ κ΄ν μ»€λ° refactor: μ½λ 리ν©ν λ§μ λν μ»€λ° }
-
β eslint & prettier μ¬μ©νκΈ° μν μ€μ
-
π― eslint μ€μ
{ "extends": ["react-app", "plugin:prettier/recommended"], "plugins": ["prettier"], "rules": { "prettier/prettier": [ "error", { "endOfLine": "auto" } ] } }
-
πΈ prettier μ€μ
module.exports = { printWidth: 100, tabWidth: 2, singleQuote: true, trailingComma: 'all', bracketSpacing: true, semi: true, useTabs: false, arrowParens: 'avoid', endOfLine: 'lf', };
-
π» ν¨ν€μ§ 맀λμ μ€μ
-
yarn μ¬μ©νκΈ°
-
ν¨ν€μ§ λ€μ΄λ‘λ λ°μ λ βsave κΌ μμ±νκΈ°
Ex) yarn add react-router-dom βsave
-
-
πΒ μ»΄ν¬λνΈ λ° ν¨μ μ΄λ¦ 컨벀μ
π₯ **μ»΄ν¬λνΈ μμ± λ°©μ**- μ»΄ν¬λνΈ μμ± μμλ§ function ν€μλ μ¬μ©
function Main (){}
const Main = () β {} - κ·Έ μΈ ν¨μ μμ± μμλ νμ΄ν ν¨μ μ¬μ©
- const handleμ΄λ²€νΈλͺ = () β {}
- handleClick, handleSubmit, ...
- μ»΄ν¬λνΈ μμ± μμλ§ function ν€μλ μ¬μ©
βββ README.md
βββ package.json
βββ public
βΒ Β βββ favicon.ico
βΒ Β βββ index.html
βΒ Β βββ manifest.json
βΒ Β βββ _redirects
βββ src
βββ App.jsx
βββ index.jsx
βββ assets
βΒ Β βββ font
βΒ Β βββ icon
βΒ Β βββ image
βββ components
βΒ Β βββ GetDataTest.jsx
βΒ Β βββ common
βΒ Β βββ ErrorBoundary.jsx
βΒ Β βββ ErrorComponent.jsx
βΒ Β βββ Header.jsx
βΒ Β βββ Loading.jsx
βββ constants
βββ cores
βΒ Β βββ router.jsx
βββ hooks
βββ index.jsx
βββ lib
βΒ Β βββ index.js
βββ pages
βΒ Β βββ CleanMailPage.jsx
βΒ Β βββ Mainpage.jsx
βΒ Β βββ ResultPage.jsx
βΒ Β βββ Sample.jsx
βββ styles
βΒ Β βββ globalStyle.jsx
βΒ Β βββ theme.jsx
βββ utils
βΒ Β βββ app.js
βββ wrapPromise.js
main > κ°μμ λΈλμΉ
ex ) main β feature/λ¨μ€-1, feature/체λ€-1, feature/λν¬-1, feature/λν¬-2
κ°μμ λΈλμΉμμ pull request νκ³ μ½λ 리뷰 ν merge