HA Refactoring with ESlint

πŸŽ‰λ“€μ–΄κ°€κΈ°μ— μ•žμ„œ

μ–΄μ œ this ν‚€μ›Œλ“œλ‚˜ call, apply, bind λ₯Ό ν•™μŠ΅ν•˜κ³  머리가 μ–Όμ–Όν•œ λŠλ‚Œμ—μ„œ 였늘 HA 과제λ₯Ό ESlint λ₯Ό μ‚¬μš©ν•΄ λ¦¬νŒ©ν† λ§ ν•˜κ³  κΉƒν—ˆλΈŒλ‘œ μ˜¬λ¦¬λŠ” μŠ€ν”„λ¦°νŠΈλ₯Ό μ§„ν–‰ν–ˆλ‹€.

νŽ˜μ–΄λ‹˜κ³Ό μΆ”κ°€ μ‹œκ°„ κΉŒμ§€ ν•¨κ»˜ ν•΄μ„œ 문제λ₯Ό ν•΄κ²°ν•΄μ„œ 끝내 과제λ₯Ό μ œμΆœν•΄μ„œ λΏŒλ“―ν•œ λŠλ‚Œμ΄λ‹€. 였늘의 과정을 μžŠμ§€ μ•Šκ³  였래 κΈ°μ–΅ν•˜κΈ° μœ„ν•΄ λΈ”λ‘œκ·Έλ₯Ό 남겨본닀.

πŸ§šβ€β™€οΈκ³Όμ œμ˜ λͺ©μ 

μ–΄μ œ 포크 및 ν΄λ‘ ν•΄μ˜¨ ν”„λ‘œμ νŠΈμ—μ„œ pre-hiring-assessment 디렉토리λ₯Ό 톡해 프리 μ½”μŠ€ μ‹œν—˜μ— μ œμΆœν•œ HA μ½”ν”Œμž‡ 7문제λ₯Ό ESlint λ₯Ό 가지고 λ¦¬νŒ©ν† λ§ ν•˜κ³  여기에 μΆ”κ°€λ‘œ νŽ˜μ–΄μ™€ git simple workflow λ₯Ό λ°°μ› λ˜ 것을 μ μš©ν•΄μ„œ μ„œλ‘œ 역할을 λ°”κΎΈμ–΄ κ°€λ©° κΉƒν—ˆλΈŒμ— 올린 기둝을 남기고 μ΅œμ’… PR ν•˜λŠ” 과제 이닀.

πŸ˜‰κ³Όμ • 1. ν”„λ‘œμ νŠΈ λ‚΄ package.json ν™•μΈν•˜κΈ°

단좕어와 단좕어가 κΈ°λŠ₯ν•˜λŠ” scripts 뢀뢄을 보면 urclass 에 μ ν˜€μžˆλ˜ lint κ°€ μ ν˜€ 있고 더 보면 eslint.. ν•˜λ©΄μ„œ μ‹€ν–‰λ˜λŠ” 뢀뢄에 μž‘μ„±λ˜μ–΄ μžˆλ‹€. ν•˜μ§€λ§Œ devDependency λ₯Ό 보면 eslint κ°€ μ—†λŠ” κ²ƒμœΌλ‘œ 보아 μ„€μΉ˜κ°€ λ˜μ–΄ μžˆμ§€ μ•Šλ‹€.

이제 이것을 μ„€μΉ˜ν•΄μ•Ό ν•œλ‹€.

// κΈ°μ–΅ν•˜κ³  λ„˜μ–΄κ°€κΈ°!
dependency λŠ” ν”„λ‘œμ νŠΈκ°€ λŒμ•„κ°€κΈ° μœ„ν•΄ λ°˜λ“œμ‹œ ν•„μš”ν•œ λͺ¨λ“ˆλ“€μ˜ λͺ…μ„Έ.

devDependency λŠ” μ‹€μ œ ν”„λ‘œμ νŠΈ λ™μž‘μ— 직접적인 영ν–₯을 μ£Όμ§€λŠ” μ•Šμ§€λ§Œ,
κ°œλ°œν•˜λŠ” ν™˜κ²½μ—μ„œ ν•„μš”ν•˜κ±°λ‚˜ 도움을 μ£ΌλŠ” λͺ¨λ“ˆλ“€μ˜ λͺ…μ„Έ 이닀.

πŸ–₯κ³Όμ • 2. ESlint μ„€μΉ˜

https://eslint.org/docs/user-guide/getting-started

곡식 λ¬Έμ„œ 링크λ₯Ό 톡해 μ„€μΉ˜λ₯Ό μ§„ν–‰ν–ˆλ‹€. Linter λŠ” μ½”λ“œμ˜ λ„μ–΄μ“°κΈ°λ‚˜ μ€„λ°”κΏˆ λ“±μ˜ κ·œμΉ™λ“€μ„ λ§žμΆ”λŠ” 데에 도움이 λœλ‹€λŠ” λͺ¨λ“ˆμ΄λ‹€.

// 1. ESLint λŠ” npm μ•±μŠ€ν† μ–΄μ—μ„œ μ„€μΉ˜ν•œλ‹€.
npm install eslint --save-dev
// save dev λŠ” package.json 의 devDependency 에 μ €μž₯ν•˜κ² λ‹€λŠ” 뜻.

// 2. ꡬ성 파일 섀정을 μœ„ν•΄ λ‹€μŒκ³Ό 같은 λͺ…λ Ήμ–΄λ₯Ό 터미널에 μž…λ ₯ν•œλ‹€.
npx eslint --init

그러면 터미널에 질문이 λ‚˜μ˜€κ³  그것을 μ•„λž˜μ™€ 같이 μ„ νƒν•΄μ„œ μ§„ν–‰ν–ˆλ‹€. eslintconfig

κ·Έλ ‡κ²Œ μ™„λ£Œ 되면 ν”„λ‘œμ νŠΈ 내에 .eslintrc.js λ˜λŠ” .eslintrc.json 와 같은 μ„€μ • 파일이 λ§Œλ“€μ–΄ 진닀.

μ„€μ • νŒŒμΌμ€ μ•„λž˜μ™€ 같이 생겼닀.

module.exports = {
  env: {
    commonjs: true,
    es2021: true,
    node: true,
    mocha: true, // μ›λž˜λŠ” μ—†μ—ˆλŠ”λ° lint μ—κ²Œ mocha λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλŠ” ν™˜κ²½μ΄λΌλŠ” 것을 μ•Œλ €μ£Όμ—ˆλ‹€!
    browser: true,
  },
  extends: 'eslint:recommended',
  parserOptions: {
    ecmaVersion: 12,
  },
  rules: {},
}

extends: β€˜eslint:recommended’, 둜 미루어 보아 λŠλ‚Œμƒ eslint μ—μ„œ μΆ”μ²œν•˜λŠ” κΈ°λ³Έ 섀정이 μ„ΈνŒ…λ˜μ—ˆμŒμ„ μ§μž‘ν•  수 μžˆλ‹€. μœ„μ˜ μ½”λ“œμ²˜λŸΌ μ²˜μŒμ— rules 뢀뢄이 λΉ„μ–΄ μžˆλ‹€.

μ—¬κΈ°λŠ” κΈ°λ³Έμ„€μ • μ•ŒνŒŒ ν”ŒλŸ¬μŠ€ λ‚΄κ°€ μ •μ˜ν•œ 섀정이 ESlint 검사할 λ•Œ μ—†κ±°λ‚˜ 틀리닀면 error λ˜λŠ” κ²½κ³  ν˜Ήμ€ λ¬΄μ‹œλ₯Ό μ •μ˜ν•  수 μžˆλŠ” 곳이닀.

"rules": {
        "semi": ["error", "always"],
        "quotes": ["error", "double"]
    }

μœ„λ₯Ό μ˜ˆμ‹œλ‘œ 보면 semi 콜둠 빼먹으면 항상 μ—λŸ¬λ₯Ό μΌμœΌν‚€κ³ , quotes λŠ” 더블 μ½”νŠΈλ₯Ό 쓰지 μ•ŠμœΌλ©΄ μ—λŸ¬λ₯Ό μΌμœΌν‚€λŠ” 것을 μ˜λ―Έν•œλ‹€.

μ‹€μ œ μ €λ ‡κ²Œ ν•˜λ©΄ 였λ₯˜κ°€ μ—„μ²­ λ‚˜κΈ° λ•Œλ¬Έμ— 넣지 μ•Šμ•˜λ‹€.

πŸ‘€κ³Όμ • 3. ESlint 둜 였λ₯˜ ν•΄κ²°ν•˜κΈ°

이제 npm run lint λ₯Ό 터미널에 치면 λ¬΄μˆ˜ν•œ μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό 확인할 수 μžˆλŠ”λ°, λ‚˜μ˜ κ²½μš°λŠ” μ½”λ”© μ»¨λ²€μ…˜μ„ 지킀지 μ•Šμ€ 경우의 μ—λŸ¬ λ³΄λ‹€λŠ”,

error  'test4' is defined but never used          no-unused-vars

이런 μ—λŸ¬κ°€ λŒ€λΆ€λΆ„μ΄μ˜€λ‹€. κ·Έλž˜μ„œ κ²€μƒ‰ν•΄λ³΄λ‹ˆ 이런 κ²½μš°λŠ” ν•¨μˆ˜ λ˜λŠ” λ³€μˆ˜κ°€ μ„ μ–Έλ§Œ 되고 μ‚¬μš©μ΄ λ˜μ§€ μ•Šμ€ κ²½μš°μ— λ„μš°λŠ” μ—λŸ¬μ΄λ―€λ‘œ λ‹¨μˆœ 경고둜 λ°”κΎΈκ±°λ‚˜ μ—λŸ¬λ₯Ό λ„μš°μ§€ μ•Šκ²Œ ν•  수 μžˆλ‹€κ³  ν–ˆλ‹€. κ·Έλž˜μ„œ μ°Ύμ•„λ΄€λ‹€.

.eslintrc.js μ„€μ • νŒŒμΌμ—μ„œ rules λ₯Ό μ•„λž˜μ™€ 같이 μˆ˜μ •ν–ˆλ‹€.

module.exports = {
  env: {
    commonjs: true,
    es2021: true,
    node: true,
    mocha: true,
    browser: true,
  },
  extends: 'eslint:recommended',
  parserOptions: {
    ecmaVersion: 12,
  },
  rules: {
    'no-unused-vars': 0,
  },
}

그리고 npm run lint λ₯Ό 톡해 였λ₯˜λ₯Ό ν•΄κ²°ν•΄ λ³΄μ•˜λ‹€.

errorlint

πŸ‘‹κ³Όμ • 4. 본격 HA μ½”λ“œ λ¦¬νŒ©ν† λ§

μ•„λž˜μ™€ 같이 μ—Šκ·Έμ œ 배운 사항을 μ μš©ν•˜λ©΄μ„œ νŽ˜μ–΄λ‹˜κ³Ό λ¦¬νŒ©ν† λ§ ν•˜λŠ” 과정을 κ±°μ³€λ‹€. λ‚΄κ°€ μž‘μ„±ν•œ μ½”λ“œμ— λΉ„ν•΄ νŽ˜μ–΄λ‹˜μ˜ μ½”λ“œκ°€ 짧고 가독성이 μ’‹μ•„μ„œ νŽ˜μ–΄λ‹˜μ˜ μ½”λ“œλ₯Ό μœ„μ£Όλ‘œ μ§„ν–‰ν–ˆλ‹€.

λ‚΄κ°€ νŽ˜μ–΄λ‹˜μ—κ²Œ 도움을 λ“œλ¦΄ 수 μžˆμ—ˆλ˜ μ½”λ“œλŠ” μ•„μ΄λŸ¬λ‹ˆ ν•˜κ²Œλ„ 7번 μ΄μ˜€λ‹€.

  • ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή (Destructing assignment)
  • μ „κ°œ μ—°μ‚°μž (Spread operator)와 λ‚˜λ¨Έμ§€ νŒŒλΌλ―Έν„° (Rest parameters)
  • ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄ (Template literals)
  • ν™”μ‚΄ν‘œ ν•¨μˆ˜ (Arrow functions)
  • for … of 반볡문

πŸŒ³κ³Όμ • 5. Git Workflow 티킀타카

https://dev-seolleung2.netlify.app/development/Git%20WorkFlow/

μœ„μ˜ 링크의 β€œBasic Git Workflow - 1.” 뢀뢄을 따라 ν•˜λ©΄μ„œ μ§„ν–‰ν–ˆμ–΄μ•Ό λ˜λŠ” 게 정석 μ΄μ§€λ§Œ

본의 μ•„λ‹ˆκ²Œ νŽ˜μ–΄λ‹˜κ³Ό λ‚˜λŠ” 각자 클둠받은 ν”„λ‘œμ νŠΈμ—μ„œ νŽ˜μ–΄λ‹˜ λ”°λ‘œ λ‚˜ λ”°λ‘œ μžμ‹ λ§Œμ˜ λ¦¬νŒ©ν† λ§ μ½”λ“œλ₯Ό λ„£κ³  컀밋 ν‘Έμ‹œλ₯Ό μ™„λ£Œ ν•œ μƒνƒœ μ˜€λ‹€.

μ›λž˜λŒ€λ‘œλΌλ©΄ 각자 클둠받은 μƒνƒœμ—μ„œ λ“œλΌμ΄λ²„ ν•œ λͺ…이 문제 ν•˜λ‚˜λ₯Ό λ¦¬νŒ©ν† λ§ μž‘μ—…ν•΄μ„œ ν‘Έμ‹œν•˜λ©΄, λ‹€μŒ 바톀을 μ΄μ–΄λ°›λŠ” μ‚¬λžŒμ΄ 이전 λ“œλΌμ΄λ²„μ˜ ν•΄λ‹Ή μ €μž₯μ†Œλ₯Ό 리λͺ¨νŠΈ ν•΄μ„œ pull 둜 κ°€μ Έμ˜¨ λ‹€μŒ 역할을 λ°”κΎΈμ–΄ μ§„ν–‰ν–ˆμ–΄μ•Ό ν–ˆλŠ”λ° 말이닀.

ν•˜μ§€λ§Œ μž¬λ°ŒλŠ” κ±Έ μ‹œλ„ν•΄ λ³Ό 수 μžˆμ—ˆλ‹€.

그것은 λ°”λ‘œ νŽ˜μ–΄λ‹˜μ—κ²Œ λ‚΄ λ ˆν¬μ— μ„€μ • μ“°κΈ° κΆŒν•œμ„ μ£ΌλŠ” 것이닀.

λ°˜λŒ€λ‘œ νŽ˜μ–΄λ‹˜λ„ λ‚˜μ—κ²Œ μ„€μ • μ“°κΈ° κΆŒν•œμ„ μ£Όμ–΄μ•Ό ν•œλ‹€.

  1. λ‚˜μ˜ μž‘μ—… 레포 메인 μ£Όμ†Œλ‘œ λ“€μ–΄κ°€μ„œ settings λ₯Ό λˆ„λ₯Έλ‹€.
  2. Manage access λ₯Ό λˆ„λ₯΄κ³  κΉƒν—ˆλΈŒ νŒ¨μŠ€μ›Œλ“œλ₯Ό μž…λ ₯ν•œλ‹€.
  3. Invite teams or people (μ΄ˆλ‘μƒ‰ λ²„νŠΌ)을 λˆ„λ₯Έλ‹€.
  4. λˆ„λ₯΄λ©΄ μœ μ €λ„€μž„ 검색을 ν•  수 μžˆλŠ”λ° νŽ˜μ–΄μ˜ μœ μ €λ„€μž„μ„ μž…λ ₯ν•˜λ©΄
  5. μ„Έ 개의 μ˜΅μ…˜μ΄ λ‚˜μ˜€λŠ”λ° μ—¬κΈ°μ„œ Write κΆŒν•œμ„ λˆ„λ₯΄κ³  λ§¨μ•„λž˜ Add λ₯Ό λˆ„λ₯Έλ‹€.
  6. 그러면 master 에 κ·ΈλŒ€λ‘œ ν‘Έμ‹œν•΄μ„œ ν•˜κ² λŠ”κ°€ μ•„λ‹˜ branch λ₯Ό λ”°μ„œ ν•˜λ‚˜ λ¬»λŠ”λ° master 둜 ν•˜κ³  λˆ„λ₯Έλ‹€.

νŽ˜μ–΄λ‹˜κ³Ό λ‚˜ 각자 μœ„μ™€ 같이 μ„œλ‘œμ—κ²Œ λ‚΄ μ €μž₯μ†Œμ— λŒ€ν•œ β€œμ“°κΈ°β€ μž‘μ—… κΆŒν•œμ„ μ£Όκ³ , λ‚΄κ°€ νŽ˜μ–΄λ‹˜μ˜ μ €μž₯μ†Œλ₯Ό ν΄λ‘ ν•΄μ™€μ„œ HA μ½”λ“œλ₯Ό λͺ‡κ°€μ§€ μˆ˜μ •ν•˜κ³  push ν–ˆλ‹€.

git push origin master 둜 진행 ν•˜κ³  νŽ˜μ–΄λ‹˜μ˜ μ €μž₯μ†Œμ˜ 내역이 λ‚΄κ°€ μˆ˜μ • ν•œ λ‚΄μš©μ„ λ°˜μ˜ν•˜λŠ” 것을 확인할 수 μžˆμ—ˆλ‹€.

πŸ€—κ³Όμ • 5. PR ν•˜κΈ°

pull request λ²„νŠΌμ„ λˆ„λ₯΄λ©΄,

Able to merge. These branches can be automatically merged. λΌλŠ” λ©”μ‹œμ§€κ°€ λœ¨μ§€ μ•Šκ³  μžλ™ 머지가 λ˜μ§€ μ•ŠλŠ”λ‹€ λΌλŠ” λΉ¨κ°„ λ¬Έμž₯을 ν™•μΈν•˜κ²Œ λ˜μ—ˆλ‹€.

κ·ΈλŒ€λ‘œ pr 을 ν•˜κ³  보면 μ–΄λ–€ 단좔가 μžˆμ—ˆλŠ”λ° κ·Έκ±Έ λˆ„λ₯΄λ©΄ 이전 사항, λ³€κ²½ 사항이 μžˆλŠ”λ° κ·Έ 뢀뢄을 κΉƒν—ˆλΈŒ μƒμ—μ„œ μ§€μš°κ³  λ‹€μ‹œ PR ν•˜λ‹ˆ 톡과가 λ˜μ—ˆλ‹€.

πŸ˜±μΆ”κ°€. 좩돌 κ³Όμ • 및 ν•΄κ²°ν•˜κΈ°

λΈ”λ‘œκ·Έλ₯Ό μž‘μ„±ν•˜λŠ” 와쀑에 test02 λ²ˆμ—μ„œ ν•¨μˆ˜λ‚΄μ— ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ„œ eslint κ°€ ν•¨μˆ˜ λ°”κΉ₯에 μž‘μ„±ν•˜λΌκ³  μ•Œλ € 쀬닀.

κ·Έλž˜μ„œ μ•„μ˜ˆ νŽ˜μ–΄λ‹˜μ˜ μ½”λ“œλ₯Ό μ°Έκ³ ν•΄μ„œ κ°„κ²°ν•˜κ²Œ λ§Œλ“€μ–΄ 버렸닀.

그런데 μ•„λž˜μ™€ 같은 좩돌 λ©”μ‹œμ§€κ°€ λ–³λ‹€. 이미 merged λ₯Ό ν•΄μ„œ κ·ΈλŸ°κ°€.

gitconflict

μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό λ³΄λ‹ˆ μΆ”μ²œ νžŒνŠΈμ— λ‹€μŒκ³Ό 같은 λ©”μ‹œμ§€κ°€ μžˆμ—ˆλ‹€.

hint: (e.g., 'git pull ...') before pushing again.

κ·Έλž˜μ„œ ν•΄λ³΄λ‹ˆ μ•„λž˜μ™€ 같은 ν™”λ©΄μœΌλ‘œ 잘 μ‹€ν–‰λ˜μ—ˆμŒμ„ ν™•μΈν•˜κ³  λ‹€μ‹œ PR 을 λ‚ λ € λ‹€μ‹œ μ œμΆœν–ˆλ‹€.

fixedconflict

끝!!

πŸ‘‹πŸ‘‹πŸ‘‹πŸ‘‹πŸ‘‹πŸ‘‹πŸ‘‹πŸ‘‹πŸ‘‹πŸ‘‹πŸ‘‹πŸ‘‹


Written by@[DotoriMook]
ν”„λ‘ νŠΈμ—”λ“œ μ£Όλ‹ˆμ–΄ 개발자 λ„ν† λ¦¬λ¬΅μ˜ 기술개발 λΈ”λ‘œκ·Έ μž…λ‹ˆλ‹€.

GitHubMediumTwitterFacebook