Skip to content

๐ŸŽฐ ์ปค์Šคํ…€ ESLint ๋งŒ๋“ค๊ธฐ

JiSu Kim edited this page Dec 5, 2024 · 1 revision

ํŒ€์—์„œ ์‚ฌ์šฉํ•  ESLint ๋งŒ๋“ค๊ธฐ

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

ESLint๋ž€?

์ •์˜

ESLint๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์˜ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ •์  ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ์˜ ๋ฌธ๋ฒ•๊ณผ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜, ์Šคํƒ€์ผ ๋ฌธ์ œ ๋“ฑ์„ ๋ถ„์„ํ•˜์—ฌ ๊ฒฐํ•จ์„ ์‚ฌ์ „์— ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ: ์ฝ”๋“œ์˜ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ง€
  • ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ ์ค€์ˆ˜: ํŒ€์—์„œ ์ •ํ•œ ์ฝ”๋“œ ์Šคํƒ€์ผ ๊ทœ์น™์„ ์ ์šฉ
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ์ง€์›: ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ๊ธฐ๋Šฅ ํ™•์žฅ
  • ์ž๋™ ์ˆ˜์ •: ์ผ๋ถ€ ์˜ค๋ฅ˜์™€ ์Šคํƒ€์ผ ๋ฌธ์ œ๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜์ •

ESLint์˜ ํ•„์š”์„ฑ

์ฝ”๋“œ ํ’ˆ์งˆ ํ–ฅ์ƒ

ESLint๋Š” ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ์ž ์žฌ์ ์ธ ๋ฒ„๊ทธ๋ฅผ ์‚ฌ์ „์— ๋ฐœ๊ฒฌํ•˜์—ฌ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋†’์ž…๋‹ˆ๋‹ค.

ํŒ€ ๊ฐ„ ํ˜‘์—… ๊ฐ•ํ™”

ํŒ€์› ๊ฐ„์˜ ์ฝ”๋“œ ์Šคํƒ€์ผ๊ณผ ๊ทœ์น™์ด ์ผ๊ด€๋˜๋ฉด ํ˜‘์—…์ด ์›ํ™œํ•ด์ง‘๋‹ˆ๋‹ค. ESLint๋Š” ํŒ€ ์ „์ฒด๊ฐ€ ๋™์ผํ•œ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋„๋ก ๊ฐ•์ œํ•˜์—ฌ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ํ™”๋œ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ

ESLint๋Š” CI/CD ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ๋ณ‘ํ•ฉ๋˜๊ธฐ ์ „์— ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜๊ฐ€ ํฌํ•จ๋œ ์ฝ”๋“œ๊ฐ€ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ํ•ฉ์ณ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ESLint ์„ค์ • ํŒŒ์ผ ์ดํ•ดํ•˜๊ธฐ

๊ธฐ๋ณธ ๊ตฌ์กฐ

ESLint ์„ค์ • ํŒŒ์ผ์€ JSON ๋˜๋Š” JavaScript ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— .eslintrc.json ๋˜๋Š” .eslintrc.js ํŒŒ์ผ๋กœ ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

{
  "env": {
    "browser": true,
    "es2021": true},
  "extends": ["eslint:recommended"],
  "parserOptions": {
    "ecmaVersion": 12,
    "sourceType": "module"
  },
  "rules": {
    "indent": ["error", 2],
    "linebreak-style": ["error", "unix"],
    "quotes": ["error", "single"],
    "semi": ["error", "always"]
  }
}

์ฃผ์š” ์˜ต์…˜

  • env: ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋  ํ™˜๊ฒฝ์„ ์ง€์ • (์˜ˆ: ๋ธŒ๋ผ์šฐ์ €, Node.js)
  • extends: ๊ธฐ์กด์˜ ESLint ์„ค์ •์„ ํ™•์žฅ (์˜ˆ: eslint:recommended)
  • parserOptions: ECMAScript ๋ฒ„์ „๊ณผ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ ๋“ฑ์„ ์„ค์ •
  • rules: ์ ์šฉํ•  ๊ฐœ๋ณ„ ๊ทœ์น™๊ณผ ๊ทธ ๊ฐ•๋„๋ฅผ ์ •์˜

root ์˜ต์…˜

๋ชจ๋…ธ๋ ˆํฌ์™€ ๊ฐ™์€ ๋‹ค์ค‘ ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์—์„œ ESLint ์„ค์ • ํŒŒ์ผ์˜ ์ƒ์† ๊ด€๊ณ„๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด root ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • root: true: ์ด ์„ค์ • ํŒŒ์ผ์„ ์ตœ์ƒ์œ„๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์„ค์ •์„ ๋ฌด์‹œ
  • root: false: ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์„ค์ •์„ ์ƒ์†๋ฐ›์Œ

์˜ˆ์‹œ: ํ”„๋กœ์ ํŠธ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์˜ .eslintrc.json:

{
  "root": true,
  "extends": ["eslint:recommended"],
  "rules": { /* ๊ณตํ†ต ๊ทœ์น™ */ }
}

๋‚˜๋งŒ์˜ ๋ฆฐํŠธ ๋งŒ๋“ค์–ด๋ณด๊ธฐ

https://www.npmjs.com/package/eslint-plugin-jsk-rules

https://github.com/jsk3342/eslint-plugin-jsk-rules

%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-10-30_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_10 15 43

%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-10-30_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_10 15 31

์ฐธ๊ณ  ์ž๋ฃŒ

  1. Prettier, ESLint ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ - velog
    Prettier์™€ ESLint์˜ ๊ธฐ๋ณธ ๊ฐœ๋… ๋ฐ ์„ค์ • ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค.

  2. PoiemaWeb - ESLint
    ESLint๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃฌ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.

  3. ์šฐ์•„ํ•œํ˜•์ œ๋“ค ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ - ์šฐ๋ฆฌ ํŒ€์„ ์œ„ํ•œ ESLint, Prettier ๊ณต์œ  ์ปจํ”ผ๊ทธ ๋งŒ๋“ค์–ด๋ณด๊ธฐ
    ํŒ€ ํ˜‘์—…์„ ์œ„ํ•ด ESLint์™€ Prettier์˜ ๊ณต์œ  ์„ค์ •์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  4. ์šฐ์•„ํ•œํ…Œํฌ - [10๋ถ„ ํ…Œํฌํ†ก] ๋‚™ํƒ€์˜ ESLint
    ESLint์˜ ๊ฐœ๋…๊ณผ ํ™œ์šฉ๋ฒ•์„ ์งง๊ฒŒ ๋‹ค๋ฃฌ ์šฐ์•„ํ•œํ…Œํฌ ์˜์ƒ์ž…๋‹ˆ๋‹ค.

  5. Kakao Tech - ESLint ์กฐ๊ธˆ ๋” ์ž˜ ํ™œ์šฉํ•˜๊ธฐ
    Kakao Tech ๋ธ”๋กœ๊ทธ์—์„œ ESLint๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

  6. Medium - ESLint ์•Œ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ
    ESLint์˜ ์„ค์ •๊ณผ ํ™œ์šฉ๋ฒ•์„ ๋‹ค๋ฃฌ Medium์˜ ๊ธฐ์ˆ  ํฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

  7. ๋‚˜๋งŒ์˜ ESLint ๋ฃฐ ๋งŒ๋“ค์–ด๋ณด๊ธฐ - yceffort
    ESLint ๋ฃฐ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜์—ฌ ์ž์‹ ๋งŒ์˜ ๊ทœ์น™์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  8. ์ •ํ˜„์ˆ˜ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ - ESLint ์„ค์ •์„ ๋‚˜๋งŒ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋งŒ๋“ค์–ด๋ณด์ž
    ESLint ์„ค์ •์„ ๊ณต์œ  ๊ฐ€๋Šฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ œ์ž‘ํ•˜๊ณ  ๋ชจ๋…ธ๋ ˆํฌ์—์„œ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  9. ESLint ๊ณต์‹ ๋ฌธ์„œ - Shareable Configurations
    ESLint์˜ ๊ณต์œ  ๊ฐ€๋Šฅํ•œ ์„ค์ •์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ณต์‹ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

LiBoo

ํŒ€

๊ณตํ†ต

๋ฏผ์ง€

์˜๊ธธ

์ค€์„œ

์ง€์ˆ˜

์ฐฝํ˜„

๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ

ํšŒ์˜๋ก

๋ฐœํ‘œ

์ผ๊ธฐ์žฅ

Clone this wiki locally