๐Ÿš€ ESLint ๊ทœ์น™ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์œผ๋กœ ์ฝ”๋“œ ํ’ˆ์งˆ ํ–ฅ์ƒํ•˜๊ธฐ ๐Ÿš€

์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿš€ ESLint ๊ทœ์น™ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์œผ๋กœ ์ฝ”๋“œ ํ’ˆ์งˆ ํ–ฅ์ƒํ•˜๊ธฐ ๐Ÿš€

 

 

์•ˆ๋…•ํ•˜์„ธ์š”, ์—ฌ๋Ÿฌ๋ถ„! ์˜ค๋Š˜์€ ๊ฐœ๋ฐœ์ž๋“ค์˜ ํ•„์ˆ˜ ์นœ๊ตฌ, ESLint์— ๋Œ€ํ•ด ๊นŠ์ด ํŒŒํ—ค์ณ๋ณผ ๊ฑฐ์˜ˆ์š”. ํŠนํžˆ ESLint ๊ทœ์น™์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•ด์„œ ์šฐ๋ฆฌ์˜ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ํ•œ ๋‹จ๊ณ„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฑฐ๋ž๋‹ˆ๋‹ค. ์žฌ๋Šฅ๋„ท์˜ 'JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์— ๋”ฑ ์–ด์šธ๋ฆฌ๋Š” ์ฃผ์ œ์ฃ ? ใ…Žใ…Ž

์ž, ์ด์ œ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”? ์ค€๋น„๋˜์…จ๋‚˜์š”? ๊ทธ๋Ÿผ ๊ณ ๊ณ ์”ฝ~! ๐Ÿƒโ€โ™‚๏ธ๐Ÿ’จ

๐Ÿค” ESLint๊ฐ€ ๋ญ๊ธธ๋ž˜?

ESLint๋ผ๊ณ  ํ•˜๋ฉด ๋ญ๊ฐ€ ๋– ์˜ค๋ฅด์‹œ๋‚˜์š”? '์—๋Ÿฌ ์žก์•„์ฃผ๋Š” ๋„๊ตฌ?' '์ฝ”๋“œ ์Šคํƒ€์ผ ์ง€์ผœ์ฃผ๋Š” ์นœ๊ตฌ?' ๋„ค, ๋งž์•„์š”! ํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ๋‹ค๊ฐ€ ์•„๋‹ˆ๋ž๋‹ˆ๋‹ค.

ESLint๋Š” JavaScript ์ฝ”๋“œ์—์„œ ๋ฐœ๊ฒฌ ๋œ ๋ฌธ์ œ ํŒจํ„ด์„ ์‹๋ณ„ํ•˜๊ณ  ๋ณด๊ณ ํ•˜๋Š” ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ์˜ˆ์š”. ์‰ฝ๊ฒŒ ๋งํ•ด, ์šฐ๋ฆฌ๊ฐ€ ์ฝ”๋”ฉํ•  ๋•Œ ์‹ค์ˆ˜๋กœ ๋†“์น  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„๋“ค์„ ๋ฏธ๋ฆฌ ์ฒดํฌํ•ด์ฃผ๋Š” ๋˜‘๋˜‘ํ•œ ์นœ๊ตฌ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์ฃ .

ESLint๋Š” ์šฐ๋ฆฌ์˜ ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•˜๋ฉด์„œ ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ์ฒดํฌํ•ด์ค˜์š”:

  • ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ๐Ÿšซ
  • ์ž ์žฌ์ ์ธ ๋ฒ„๊ทธ ๐Ÿ›
  • ์ฝ”๋”ฉ ์Šคํƒ€์ผ ๋ถˆ์ผ์น˜ ๐ŸŽจ
  • ์•ˆํ‹ฐ ํŒจํ„ด ์‚ฌ์šฉ โš ๏ธ

๊ทธ๋Ÿฐ๋ฐ ๋ง์ด์ฃ , ESLint๊ฐ€ ์ •๋ง ๋Œ€๋‹จํ•œ ์ด์œ ๋Š” ๋ฐ”๋กœ ์ด๊ฑฐ์˜ˆ์š”. ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ๊ทœ์น™์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑฐ! ๐Ÿ‘€

์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ๋ถ„์ด ์„ธ๋ฏธ์ฝœ๋ก ์„ ๊ผญ ์จ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”? ์•„๋‹ˆ๋ฉด ์•ˆ ์จ๋„ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”? ESLint๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฐ ๊ทœ์น™์„ ํŒ€์ด๋‚˜ ํ”„๋กœ์ ํŠธ์— ๋งž๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์™„์ „ ๊ฟ€์ด์ฃ ? ๐Ÿฏ

ESLint ๊ทœ์น™

์ด์ œ ESLint๊ฐ€ ๋ญ”์ง€ ๋Œ€์ถฉ ๊ฐ์ด ์˜ค์‹œ์ฃ ? ๊ทธ๋Ÿผ ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ESLint ๊ทœ์น™์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ๊นŒ์š”? ๋ ˆ์ธ ๊ณ ~! ๐Ÿš€

๐Ÿ› ๏ธ ESLint ์„ค์น˜ํ•˜๊ณ  ์„ค์ •ํ•˜๊ธฐ

์ž, ์ด์ œ ESLint๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์„ค์ •ํ•ด๋ณผ ๊ฑฐ์˜ˆ์š”. ๊ฑฑ์ • ๋งˆ์„ธ์š”, ์–ด๋ ต์ง€ ์•Š์•„์š”! ๊ทธ๋ƒฅ ์ œ๊ฐ€ ํ•˜๋Š” ๋Œ€๋กœ ๋”ฐ๋ผ์˜ค์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ‘

1. ESLint ์„ค์น˜ํ•˜๊ธฐ

๋จผ์ €, ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™ํ•ด์ฃผ์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋ณผ๊นŒ์š”?

npm install eslint --save-dev

์ด ๋ช…๋ น์–ด๋Š” ESLint๋ฅผ ๊ฐœ๋ฐœ ์˜์กด์„ฑ์œผ๋กœ ์„ค์น˜ํ•ด์š”. ๋ญ” ์†Œ๋ฆฌ๋ƒ๊ณ ์š”? ์‰ฝ๊ฒŒ ๋งํ•ด์„œ, ์ด ๋„๊ตฌ๋Š” ๊ฐœ๋ฐœํ•  ๋•Œ๋งŒ ํ•„์š”ํ•˜๊ณ  ์‹ค์ œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ํ•„์š” ์—†๋‹ค๋Š” ๋œป์ด์—์š”.

2. ESLint ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ

ESLint๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด, ์ด์ œ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ค˜์•ผ ํ•ด์š”. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”:

npx eslint --init

์˜ค, ๋ญ”๊ฐ€ ์งˆ๋ฌธ๋“ค์ด ๋‚˜์˜ค๋„ค์š”! ๐Ÿ˜ฎ ๊ฑฑ์ • ๋งˆ์„ธ์š”, ํ•˜๋‚˜์”ฉ ์ฒœ์ฒœํžˆ ์‚ดํŽด๋ณผ๊ฒŒ์š”.

  • How would you like to use ESLint? - ๋ณดํ†ต์€ "To check syntax, find problems, and enforce code style"์„ ์„ ํƒํ•ด์š”.
  • What type of modules does your project use? - ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ, ์š”์ฆ˜์€ ์ฃผ๋กœ "JavaScript modules (import/export)"๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•ด์š”.
  • Which framework does your project use? - React, Vue, None of these ์ค‘์— ์„ ํƒํ•˜๋ฉด ๋ผ์š”.
  • Does your project use TypeScript? - TypeScript ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”.
  • Where does your code run? - Browser, Node ๋“ฑ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์„ ์„ ํƒํ•ด์š”.
  • How would you like to define a style for your project? - "Use a popular style guide"๋ฅผ ์„ ํƒํ•˜๋ฉด ์ข‹์•„์š”.
  • Which style guide do you want to follow? - Airbnb, Standard, Google ์ค‘์— ์„ ํƒํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ €๋Š” Airbnb๋ฅผ ์ข‹์•„ํ•ด์š”!
  • What format do you want your config file to be in? - JavaScript, YAML, JSON ์ค‘์— ์„ ํƒํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ €๋Š” JSON์„ ์„ ํ˜ธํ•ด์š”.

์šฐ์™€~ ์ด์ œ .eslintrc.json ํŒŒ์ผ์ด ์ƒ๊ฒผ์–ด์š”! ๐ŸŽ‰ ์ด ํŒŒ์ผ์ด ๋ฐ”๋กœ ESLint์˜ ์„ค์ • ํŒŒ์ผ์ด์—์š”. ์ด์ œ ์ด ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์„œ ์šฐ๋ฆฌ๋งŒ์˜ ๊ทœ์น™์„ ๋งŒ๋“ค์–ด๋ณผ ๊ฑฐ์˜ˆ์š”!

.eslintrc.json ESLint ์„ค์ • ํŒŒ์ผ

์ž, ์ด์ œ ESLint๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ดˆ๊ธฐ ์„ค์ •์„ ๋งˆ์ณค์–ด์š”. ๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์ด ์„ค์ • ํŒŒ์ผ์„ ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ•˜๋Š”์ง€ ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ๊ธฐ๋Œ€๋˜์ง€ ์•Š๋‚˜์š”? ๐Ÿ˜†

๐ŸŽจ ESLint ๊ทœ์น™ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๊ธฐ

์ž, ์ด์ œ ์ง„์งœ ์žฌ๋ฏธ์žˆ๋Š” ๋ถ€๋ถ„์ด ์™”์–ด์š”! ESLint ๊ทœ์น™์„ ์šฐ๋ฆฌ ์ž…๋ง›๋Œ€๋กœ ๋ฐ”๊ฟ”๋ณผ ๊ฑฐ์˜ˆ์š”. ๋ญ”๊ฐ€ ์š”๋ฆฌํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š๋‚˜์š”? ๐Ÿณ

1. .eslintrc.json ํŒŒ์ผ ์—ด๊ธฐ

๋จผ์ €, ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ํด๋”์— ์žˆ๋Š” .eslintrc.json ํŒŒ์ผ์„ ์—ด์–ด์ฃผ์„ธ์š”. ๋ญ”๊ฐ€ ์ด๋Ÿฐ ๋ชจ์–‘์ผ ๊ฑฐ์˜ˆ์š”:

{
  "env": {
    "browser": true,
    "es2021": true
  },
  "extends": "airbnb-base",
  "parserOptions": {
    "ecmaVersion": 12,
    "sourceType": "module"
  },
  "rules": {
  }
}

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์ฃผ๋ชฉํ•  ๋ถ€๋ถ„์€ ๋ฐ”๋กœ "rules" ๊ฐ์ฒด์˜ˆ์š”. ์—ฌ๊ธฐ์— ์šฐ๋ฆฌ๋งŒ์˜ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด์š”!

2. ๊ทœ์น™ ์ถ”๊ฐ€ํ•˜๊ธฐ

์ž, ์ด์ œ ๋ช‡ ๊ฐ€์ง€ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•ด๋ณผ๊นŒ์š”? ์˜ˆ๋ฅผ ๋“ค์–ด, ์„ธ๋ฏธ์ฝœ๋ก ์„ ๊ฐ•์ œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์–ด์š”:

{
  // ... ๋‹ค๋ฅธ ์„ค์ •๋“ค
  "rules": {
    "semi": ["error", "always"]
  }
}

์ด ๊ทœ์น™์€ ์„ธ๋ฏธ์ฝœ๋ก ์„ ํ•ญ์ƒ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•ด์š”. ๋งŒ์•ฝ ์„ธ๋ฏธ์ฝœ๋ก ์„ ๋นผ๋จน์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๋œป์ด์ฃ .

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”? ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ 2์นธ์œผ๋กœ ๊ฐ•์ œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด:

{
  // ... ๋‹ค๋ฅธ ์„ค์ •๋“ค
  "rules": {
    "semi": ["error", "always"],
    "indent": ["error", 2]
  }
}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ 2์นธ์œผ๋กœ ํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์š”. ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ์œ„ํ•ด์„œ์ฃ ! โœจ

3. ๊ทœ์น™ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์˜ˆ์‹œ

์ด์ œ ์ข€ ๋” ๋‹ค์–‘ํ•œ ๊ทœ์น™๋“ค์„ ์‚ดํŽด๋ณผ๊นŒ์š”? ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋”ฉ ์Šคํƒ€์ผ์— ๋งž๊ฒŒ ๊ทœ์น™์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.

{
  // ... ๋‹ค๋ฅธ ์„ค์ •๋“ค
  "rules": {
    "semi": ["error", "always"],
    "indent": ["error", 2],
    "quotes": ["error", "single"],
    "no-console": "warn",
    "max-len": ["error", { "code": 80 }],
    "no-unused-vars": "error",
    "camelcase": "error"
  }
}

์ด ์„ค์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ์ ์šฉํ•ด์š”:

  • ์„ธ๋ฏธ์ฝœ๋ก  ํ•„์ˆ˜
  • ๋“ค์—ฌ์“ฐ๊ธฐ 2์นธ
  • ๋ฌธ์ž์—ด์€ ์ž‘์€๋”ฐ์˜ดํ‘œ ์‚ฌ์šฉ
  • console.log() ์‚ฌ์šฉ ์‹œ ๊ฒฝ๊ณ 
  • ํ•œ ์ค„ ์ตœ๋Œ€ 80์ž
  • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ๊ธˆ์ง€
  • ๋ณ€์ˆ˜๋ช…์€ ์นด๋ฉœ์ผ€์ด์Šค ์‚ฌ์šฉ

์™€~ ์ด์ œ ์šฐ๋ฆฌ๋งŒ์˜ ์ฝ”๋”ฉ ์Šคํƒ€์ผ์ด ์™„์„ฑ๋์–ด์š”! ๐Ÿ‘

ESLint ๊ทœ์น™ ์„ธ๋ฏธ์ฝœ๋ก  ํ•„์ˆ˜ ๋“ค์—ฌ์“ฐ๊ธฐ 2์นธ ์ตœ๋Œ€ ์ค„ ๊ธธ์ด 80์ž

์ด๋ ‡๊ฒŒ ๊ทœ์น™์„ ์„ค์ •ํ•˜๋ฉด, ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๋” ์ผ๊ด€์„ฑ ์žˆ๊ณ  ๊น”๋”ํ•ด์งˆ ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ์ •์›์‚ฌ๊ฐ€ ์ •์›์„ ๊ฐ€๊พธ๋“ฏ์ด, ์šฐ๋ฆฌ๋„ ์ฝ”๋“œ๋ฅผ ๊ฐ€๊ฟ€ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. ๐ŸŒฑ

ํ•˜์ง€๋งŒ ์ฃผ์˜ํ•˜์„ธ์š”! ๋„ˆ๋ฌด ๋งŽ์€ ๊ทœ์น™์„ ํ•œ ๋ฒˆ์— ์ ์šฉํ•˜๋ฉด ์˜คํžˆ๋ ค ์ฝ”๋”ฉ์ด ํž˜๋“ค์–ด์งˆ ์ˆ˜ ์žˆ์–ด์š”. ํŒ€์›๋“ค๊ณผ ์ƒ์˜ํ•ด์„œ ์ ์ ˆํ•œ ๊ทœ์น™์„ ์ •ํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ต๋‹ˆ๋‹ค.

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•œ ๊ทœ์น™์„ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•˜๊ณ  ํ™•์ธํ•˜๋Š”์ง€ ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ๊ธฐ๋Œ€๋˜์ง€ ์•Š๋‚˜์š”? ๐Ÿ˜‰

๐Ÿš€ ESLint ๊ทœ์น™ ์ ์šฉํ•˜๊ณ  ํ™•์ธํ•˜๊ธฐ

์ž, ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ์„ค์ •ํ•œ ๋ฉ‹์ง„ ๊ทœ์น™๋“ค์„ ์‹ค์ œ๋กœ ์ ์šฉํ•ด๋ณผ ์‹œ๊ฐ„์ด์—์š”! ๋งˆ์น˜ ์ƒˆ ์˜ท์„ ์ž…์–ด๋ณด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์„ค๋ ˆ์ง€ ์•Š๋‚˜์š”? ๐Ÿ˜†

1. ESLint ์‹คํ–‰ํ•˜๊ธฐ

ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ , ํ”„๋กœ์ ํŠธ ํด๋”์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋ณผ๊นŒ์š”?

npx eslint .

์ด ๋ช…๋ น์–ด๋Š” ํ˜„์žฌ ํด๋”์™€ ๊ทธ ํ•˜์œ„ ํด๋”์˜ ๋ชจ๋“  JavaScript ํŒŒ์ผ์„ ๊ฒ€์‚ฌํ•ด์š”. ์™€์šฐ, ๋ญ”๊ฐ€ ๋งŽ์ด ๋‚˜์˜ค์ฃ ? ๐Ÿ˜…

2. ์—๋Ÿฌ ํ™•์ธํ•˜๊ธฐ

ESLint๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์„ค์ •ํ•œ ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•œ ๋ถ€๋ถ„๋“ค์ด ํ‘œ์‹œ๋ผ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋Ÿฐ ์‹์œผ๋กœ์š”:

/Users/username/project/src/index.js
  5:1   error  Expected indentation of 2 spaces but found 4  indent
  7:21  error  Missing semicolon                             semi
  9:1   warn   Unexpected console statement                  no-console

์ด๋Ÿฐ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ณด์ด๋ฉด ๋‹นํ™ฉํ•˜์ง€ ๋งˆ์„ธ์š”! ์ด๊ฑด ์šฐ๋ฆฌ ์ฝ”๋“œ๊ฐ€ ๋” ์ข‹์•„์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์‹ ํ˜ธ์˜ˆ์š”. ๋งˆ์น˜ ์„ ์ƒ๋‹˜์ด ์ˆ™์ œ๋ฅผ ์ฑ„์ ํ•ด์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์š”. ๐Ÿ“

3. ์ž๋™์œผ๋กœ ๊ณ ์น˜๊ธฐ

์ผ์ผ์ด ์ˆ˜์ •ํ•˜๊ธฐ ๊ท€์ฐฎ์ฃ ? ESLint๋Š” ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์ž๋™์œผ๋กœ ๊ณ ์ณ์ค„ ์ˆ˜ ์žˆ์–ด์š”. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”:

npx eslint . --fix

์™€! ๋งˆ๋ฒ•์ฒ˜๋Ÿผ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋์ฃ ? ๐ŸŽฉโœจ ํ•˜์ง€๋งŒ ๋ชจ๋“  ๋ฌธ์ œ๊ฐ€ ์ž๋™์œผ๋กœ ํ•ด๊ฒฐ๋˜์ง„ ์•Š์•„์š”. ์ผ๋ถ€๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์ˆ˜์ •ํ•ด์•ผ ํ•ด์š”.

4. IDE์— ESLint ์—ฐ๋™ํ•˜๊ธฐ

๋งค๋ฒˆ ํ„ฐ๋ฏธ๋„์—์„œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฑด ๊ท€์ฐฎ์ฃ ? ๋‹คํ–‰ํžˆ ๋Œ€๋ถ€๋ถ„์˜ ํ˜„๋Œ€์ ์ธ IDE๋Š” ESLint๋ฅผ ์ง€์›ํ•ด์š”. VS Code๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ESLint ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•ด๋ณด์„ธ์š”.

์„ค์น˜ํ•˜๊ณ  ๋‚˜๋ฉด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋™์•ˆ ์‹ค์‹œ๊ฐ„์œผ๋กœ ESLint ๊ฒฝ๊ณ ์™€ ์—๋Ÿฌ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”. ๋งˆ์น˜ ์˜†์—์„œ ์ฝ”์น˜๊ฐ€ ์กฐ์–ธํ•ด์ฃผ๋Š” ๊ฒƒ ๊ฐ™์ฃ ? ๐Ÿ‘จโ€๐Ÿซ

VS Code const x = 5 Missing semicolon console.log(x); Unexpected console statement Problems Panel

์ด๋ ‡๊ฒŒ IDE์— ์—ฐ๋™ํ•˜๋ฉด ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š”. ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ๋™์‹œ์— ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ์ฃ . ์™„์ „ ์ผ์„์ด์กฐ ์•„๋‹Œ๊ฐ€์š”? ๐Ÿ˜Ž

5. Git Hooks ์‚ฌ์šฉํ•˜๊ธฐ

ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, Git Hooks๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์•„์š”. ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ์ž๋™์œผ๋กœ ESLint๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฑฐ๋“ ์š”.

Husky๋ผ๋Š” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‹ค์ˆ˜๋กœ ๋ฆฐํŠธ ์—๋Ÿฌ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ปค๋ฐ‹ํ•˜๋Š” ์ผ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์ฃ . ๋งˆ์น˜ ๋ฌธ์ง€๊ธฐ๊ฐ€ ์ง€์ผœ์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์š”! ๐Ÿšง

ํŒ: Git Hooks๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŒ€ ์ „์ฒด์˜ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์š”. ํ•˜์ง€๋งŒ ์ฒ˜์Œ์—๋Š” ์กฐ๊ธˆ ๊ท€์ฐฎ๊ฒŒ ๋Š๊ปด์งˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ํŒ€์›๋“ค๊ณผ ์ถฉ๋ถ„ํžˆ ์ƒ์˜ํ•œ ํ›„์— ๋„์ž…ํ•˜๋Š” ๊ฒŒ ์ข‹์•„์š”!

์ž, ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ์„ค์ •ํ•œ ESLint ๊ทœ์น™์„ ์ ์šฉํ•˜๊ณ  ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ดค์–ด์š”. ์–ด๋•Œ์š”? ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ต์ง€ ์•Š์ฃ ? ๐Ÿ™Œ

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ESLint๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ๋“ค์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ESLint๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ง€๋งŒ, ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ์˜คํžˆ๋ ค ๋…์ด ๋  ์ˆ˜ ์žˆ๊ฑฐ๋“ ์š”. ๊ทธ๋Ÿผ ๊ณ„์† ๊ฐ€๋ณด์ž๊ณ ์š”! ๐Ÿƒโ€โ™‚๏ธ๐Ÿ’จ

โš ๏ธ ESLint ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

ESLint๋Š” ์ •๋ง ์œ ์šฉํ•œ ๋„๊ตฌ์ง€๋งŒ, ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ๋“ค์ด ์žˆ์–ด์š”. ๋งˆ์น˜ ๋‚ ์นด๋กœ์šด ์นผ์ฒ˜๋Ÿผ, ์ž˜ ์“ฐ๋ฉด ์š”๋ฆฌ์‚ฌ์˜ ์†๊ธธ์ด ๋˜์ง€๋งŒ ์ž˜๋ชป ์“ฐ๋ฉด ๋‹ค์น  ์ˆ˜ ์žˆ์ฃ . ๊ทธ๋Ÿผ ์–ด๋–ค ์ ๋“ค์„ ์กฐ์‹ฌํ•ด์•ผ ํ• ๊นŒ์š”? ๐Ÿค”

1. ๊ณผ๋„ํ•œ ๊ทœ์น™ ์„ค์ • ์ฃผ์˜

๊ทœ์น™์€ ๋งŽ์œผ๋ฉด ๋งŽ์„์ˆ˜๋ก ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”? ์Œ... ๊ทธ๋ ‡์ง€ ์•Š์•„์š”! ๐Ÿ˜…

์ฃผ์˜: ๋„ˆ๋ฌด ๋งŽ์€ ๊ทœ์น™์„ ์„ค์ •ํ•˜๋ฉด ์˜คํžˆ๋ ค ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ์–ด์š”. ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋งˆ๋‹ค ์ˆ˜๋งŽ์€ ๊ฒฝ๊ณ ์™€ ์—๋Ÿฌ์— ์‹œ๋‹ฌ๋ฆฌ๊ฒŒ ๋  ์ˆ˜ ์žˆ๊ฑฐ๋“ ์š”.

ํŒ€์›๋“ค๊ณผ ์ƒ์˜ํ•ด์„œ ์ •๋ง ํ•„์š”ํ•œ ๊ทœ์น™๋งŒ ์„ ๋ณ„์ ์œผ๋กœ ์ ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์•„์š”. ๋งˆ์น˜ ์˜ท์žฅ ์ •๋ฆฌํ•  ๋•Œ ์ •๋ง ํ•„์š”ํ•œ ์˜ท๋งŒ ๋‚จ๊ธฐ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์š”! ๐Ÿ‘•๐Ÿ‘–

2. ํ”„๋กœ์ ํŠธ ํŠน์„ฑ ๊ณ ๋ คํ•˜๊ธฐ

๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ๋˜‘๊ฐ™์€ ESLint ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด ์ข‹์ง€ ์•Š์•„์š”. ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ํŠน์„ฑ์ด ๋‹ค๋ฅด๋‹ˆ๊นŒ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฃจ๋Š” ํ”„๋กœ์ ํŠธ๋ผ๋ฉด ๋„ˆ๋ฌด ์—„๊ฒฉํ•œ ๊ทœ์น™์„ ์ ์šฉํ•˜๋ฉด ์˜คํžˆ๋ ค ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์–ด์š”. ๋ฐ˜๋ฉด์— ์ƒˆ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ผ๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ์—„๊ฒฉํ•œ ๊ทœ์น™์„ ์ ์šฉํ•ด๋„ ๊ดœ์ฐฎ๊ฒ ์ฃ .

์ƒˆ ํ”„๋กœ์ ํŠธ ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ ESLint ์„ค์ •

3. ํŒ€์›๋“ค๊ณผ์˜ ์†Œํ†ต

ESLint ๊ทœ์น™์„ ์„ค์ •ํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ํŒ€์›๋“ค๊ณผ ์ƒ์˜ํ•ด์•ผ ํ•ด์š”. ์™œ๋ƒ๊ณ ์š”? ๐Ÿคทโ€โ™‚๏ธ

  • ๋ชจ๋“  ํŒ€์›์ด ๋™์˜ํ•˜์ง€ ์•Š๋Š” ๊ทœ์น™์€ ๊ฐˆ๋“ฑ์˜ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ์–ด์š”.
  • ์ผ๋ถ€ ๊ทœ์น™์€ ํŠน์ • ํŒ€์›์˜ ์ƒ์‚ฐ์„ฑ์„ ํฌ๊ฒŒ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ์–ด์š”.
  • ๋„ˆ๋ฌด ์—„๊ฒฉํ•œ ๊ทœ์น™์€ ์ฐฝ์˜์„ฑ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์–ด์š”.

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ESLint ์„ค์ •์€ ํŒ€์˜ 'ํ—Œ๋ฒ•'๊ฐ™์€ ๊ฑฐ์˜ˆ์š”. ๋ชจ๋‘๊ฐ€ ๋™์˜ํ•˜๊ณ  ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ทœ์น™์„ ๋งŒ๋“ค์–ด์•ผ ํ•ด์š”! ๐Ÿ‘ฅ

4. ๊ทœ์น™ ๋ฌด์‹œํ•˜๊ธฐ (ํ•˜์ง€๋งŒ ์กฐ์‹ฌํžˆ!)

๋•Œ๋กœ๋Š” ESLint ๊ทœ์น™์„ ๋ฌด์‹œํ•ด์•ผ ํ•  ๋•Œ๋„ ์žˆ์–ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋กœ ํŠน์ • ๊ทœ์น™์„ ์–ด๊ฒจ์•ผ ํ•  ์ˆ˜๋„ ์žˆ์ฃ .

์ด๋Ÿด ๋•Œ๋Š” ์ฃผ์„์„ ์‚ฌ์šฉํ•ด ํŠน์ • ์ค„์ด๋‚˜ ํŒŒ์ผ์—์„œ ๊ทœ์น™์„ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์–ด์š”:

// eslint-disable-next-line no-console
console.log('์ด ์ค„์€ ESLint ๊ทœ์น™์„ ๋ฌด์‹œํ•ด์š”!');

/* eslint-disable */
// ์ด ๋ธ”๋ก ์•ˆ์˜ ๋ชจ๋“  ์ฝ”๋“œ๋Š” ESLint ๊ทœ์น™์„ ๋ฌด์‹œํ•ด์š”
/* eslint-enable */

ํ•˜์ง€๋งŒ ์ฃผ์˜ํ•˜์„ธ์š”! ์ด๋Ÿฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๋„ˆ๋ฌด ์ž์ฃผ ์‚ฌ์šฉํ•˜๋ฉด ESLint๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ์—†์–ด์ ธ์š”. ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ด์š”. ๐Ÿšจ

5. ์ •๊ธฐ์ ์ธ ๊ทœ์น™ ๋ฆฌ๋ทฐ

ESLint ๊ทœ์น™์€ ํ•œ ๋ฒˆ ์„ค์ •ํ•˜๊ณ  ๋๋‚˜๋Š” ๊ฒŒ ์•„๋‹ˆ์—์š”. ์ •๊ธฐ์ ์œผ๋กœ ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ๊ทœ์น™์„ ๋ฆฌ๋ทฐํ•˜๊ณ  ํ•„์š”ํ•˜๋‹ค๋ฉด ์ˆ˜์ •ํ•ด์•ผ ํ•ด์š”.

ํŒ: ๋ถ„๊ธฐ๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ 'ESLint ๊ทœ์น™ ๋ฆฌ๋ทฐ ๋ฐ์ด'๋ฅผ ๊ฐ€์ ธ๋ณด๋Š” ๊ฑด ์–ด๋–จ๊นŒ์š”? ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ํ˜„์žฌ ๊ทœ์น™์˜ ์žฅ๋‹จ์ ์„ ๋…ผ์˜ ํ•˜๊ณ  ํ•„์š”ํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ESLint ๊ทœ์น™์ด ํ•ญ์ƒ ํŒ€์˜ ํ˜„์žฌ ์ƒํ™ฉ๊ณผ ๋‹ˆ์ฆˆ์— ๋งž๊ฒŒ ์œ ์ง€๋  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

์ž, ์ด์ œ ESLint๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ๋“ค์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์–ด์š”. ์ด๋Ÿฐ ์ ๋“ค์„ ์ž˜ ๊ธฐ์–ตํ•˜๊ณ  ์‹ค์ฒœํ•œ๋‹ค๋ฉด, ESLint๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋†’์ด๋Š” ๊ฐ•๋ ฅํ•œ ๋™๋ฐ˜์ž๊ฐ€ ๋  ๊ฑฐ์˜ˆ์š”! ๐Ÿš€

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ESLint๋ฅผ ๋”์šฑ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ฟ€ํŒ๋“ค์„ ์†Œ๊ฐœํ•ด๋“œ๋ฆด๊ฒŒ์š”. ๊ธฐ๋Œ€๋˜์ง€ ์•Š๋‚˜์š”? ๐Ÿ˜‰

๐Ÿฏ ESLint ํ™œ์šฉ ๊ฟ€ํŒ

ESLint๋ฅผ ๋”์šฑ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฟ€ํŒ์„ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”. ์ด ํŒ๋“ค์„ ํ™œ์šฉํ•˜๋ฉด ESLint๋ฅผ ๋งˆ์Šคํ„ฐํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”! ๐Ÿ†

1. ํ”„๋ฆฌ์…‹ ํ™œ์šฉํ•˜๊ธฐ

๋งค๋ฒˆ ๊ทœ์น™์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์„ค์ •ํ•˜๋Š” ๊ฒŒ ๊ท€์ฐฎ๋‹ค๊ตฌ์š”? ๊ทธ๋Ÿด ๋• ํ”„๋ฆฌ์…‹์„ ํ™œ์šฉํ•ด๋ณด์„ธ์š”!

{
  "extends": [
    "eslint:recommended",
    "plugin:react/recommended"
  ]
}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ESLint์—์„œ ์ถ”์ฒœํ•˜๋Š” ๊ธฐ๋ณธ ๊ทœ์น™๊ณผ React ๊ด€๋ จ ๊ทœ์น™์„ ํ•œ ๋ฒˆ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ํŽธ๋ฆฌํ•˜์ฃ ? ๐Ÿ˜Ž

2. ์—๋””ํ„ฐ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์šฉํ•˜๊ธฐ

VS Code, WebStorm ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ํ˜„๋Œ€์ ์ธ ์—๋””ํ„ฐ๋“ค์€ ESLint ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ๊ณตํ•ด์š”. ์ด๊ฑธ ์„ค์น˜ํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋™์•ˆ ์‹ค์‹œ๊ฐ„์œผ๋กœ ESLint ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š”.

ํŒ: VS Code๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด "ESLint" ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•ด๋ณด์„ธ์š”. ์ฝ”๋“œ์— ๋นจ๊ฐ„ ์ค„์ด ๊ทธ์–ด์ง€๋ฉด ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ค ESLint ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”!

3. ์ž๋™ ์ˆ˜์ • ๊ธฐ๋Šฅ ํ™œ์šฉํ•˜๊ธฐ

ESLint์˜ --fix ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”. ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด๋ณด์„ธ์š”:

npx eslint --fix .

์ด ๋ช…๋ น์–ด๋Š” ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์™€ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ์— ๋Œ€ํ•ด ์ž๋™ ์ˆ˜์ •์„ ์‹œ๋„ํ•ด์š”. ๋งˆ๋ฒ•์ฒ˜๋Ÿผ ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์งˆ ๊ฑฐ์˜ˆ์š”! โœจ

4. ์ปค์Šคํ…€ ๊ทœ์น™ ๋งŒ๋“ค๊ธฐ

์ •๋ง ํŠน๋ณ„ํ•œ ๊ทœ์น™์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, ์ง์ ‘ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์–ด์š”! ์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ํ•จ์ˆ˜ ์ด๋ฆ„์„ ๊ธˆ์ง€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด:

module.exports = {
  create: function(context) {
    return {
      Identifier: function(node) {
        if (node.name === "badFunction") {
          context.report(node, "์ด ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”!");
        }
      }
    };
  }
};

์ด๋ ‡๊ฒŒ ๋งŒ๋“  ๊ทœ์น™์„ ESLint ์„ค์ •์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋ผ์š”. ์™„์ „ ํ”„๋กœ ๊ฐœ๋ฐœ์ž ๊ฐ™์ฃ ? ๐Ÿ˜Ž

5. ์ฃผ์„์œผ๋กœ ๊ทœ์น™ ์ œ์–ดํ•˜๊ธฐ

ํŠน์ • ์ค„์ด๋‚˜ ํŒŒ์ผ์—์„œ๋งŒ ๊ทœ์น™์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ฃผ์„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”:

// eslint-disable-next-line no-console
console.log('๋””๋ฒ„๊น…์šฉ ๋กœ๊ทธ');

/* eslint-disable */
// ์ด ๋ธ”๋ก ๋‚ด์—์„œ๋Š” ๋ชจ๋“  ESLint ๊ทœ์น™์ด ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค
/* eslint-enable */

ํ•˜์ง€๋งŒ ์ด ๊ธฐ๋Šฅ์€ ๊ผญ ํ•„์š”ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜์„ธ์š”. ๋‚จ์šฉํ•˜๋ฉด ESLint์˜ ํšจ๊ณผ๊ฐ€ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์–ด์š”!

6. Git Hooks ์‚ฌ์šฉํ•˜๊ธฐ

Git Hooks๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปค๋ฐ‹์ด๋‚˜ ํ‘ธ์‹œ ์ „์— ์ž๋™์œผ๋กœ ESLint๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์š”. Husky๋ผ๋Š” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

{
  "husky": {
    "hooks": {
      "pre-commit": "eslint ."
    }
  }
}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ESLint ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ ์ฝ”๋“œ๋Š” ์ปค๋ฐ‹๋˜์ง€ ์•Š์•„์š”. ํŒ€์˜ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์ง€ํ‚ค๋Š” ์ˆ˜ํ˜ธ์ฒœ์‚ฌ ์—ญํ• ์„ ํ•˜๋Š” ๊ฑฐ์ฃ ! ๐Ÿ‘ผ

โœ“ Git Hooks

์ด๋Ÿฐ ๊ฟ€ํŒ๋“ค์„ ํ™œ์šฉํ•˜๋ฉด ESLint๋ฅผ ๋”์šฑ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ฝ”๋“œ ํ’ˆ์งˆ๋„ ์˜ฌ๋ฆฌ๊ณ , ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ๋„ ๋†’์ด๊ณ , ์ผ์„์ด์กฐ๋„ค์š”! ๐Ÿ‘

์ž, ์ด์ œ ์šฐ๋ฆฌ๋Š” ESLint์˜ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์„ ์•Œ์•„๋ดค์–ด์š”. ESLint๋ฅผ ์„ค์น˜ํ•˜๊ณ , ๊ทœ์น™์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๊ณ , ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋ถ€ํ„ฐ ์ฃผ์˜์‚ฌํ•ญ๊ณผ ๊ฟ€ํŒ๊นŒ์ง€! ์—ฌ๋Ÿฌ๋ถ„์€ ์ด์ œ ESLint ์ „๋ฌธ๊ฐ€๊ฐ€ ๋œ ๊ฑฐ๋‚˜ ๋‹ค๋ฆ„์—†์–ด์š”. ๐Ÿ‘จโ€๐ŸŽ“๐Ÿ‘ฉโ€๐ŸŽ“

ESLint๋ฅผ ํ™œ์šฉํ•ด ๋” ๋‚˜์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ๋” ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ์„ ํ•ด๋ณด์„ธ์š”. ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ ๋น›๋‚˜๋Š” ๋ณด์„์ฒ˜๋Ÿผ ์•„๋ฆ„๋‹ค์›Œ์งˆ ๊ฑฐ์˜ˆ์š”! โœจ

์ฝ”๋”ฉ ์ฆ๊ฒ๊ฒŒ ํ•˜์„ธ์š”! ๊ทธ๋ฆฌ๊ณ  ESLint์™€ ํ•จ๊ป˜ ๋” ๋‚˜์€ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•˜๊ธธ ๋ฐ”๋ž„๊ฒŒ์š”. ํ™”์ดํŒ…! ๐Ÿ’ช๐Ÿ˜„