Contents

ESLint์— ๋Œ€ํ•˜์—ฌ

   Jul 18, 2023     1 min read

ESLint ๋Œ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

์ด๋ฒˆ์— ์ €ํฌ ํšŒ์‚ฌ์—์„  ํ”„๋กœ์ ํŠธ์— Eslint ๊ด€๋ จ ๊ทœ์น™์„ ๊ฐ•ํ•˜๊ฒŒ ์žก๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ eslintrc.json ํŒŒ์ผ์˜ ์„ค์ •์„ ์ˆ˜์ •ํ•˜๊ณ  ๊ด€๋ จํ•˜์—ฌ ์ฝ”๋“œ ํฌ๋งทํŒ…์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌ๋งทํŒ…์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ ์•Œ๊ฒŒ๋œ ๋ฐ”๊ฐ€ ์žˆ์–ด ์ด๋ฅผ ์—ฌ๋Ÿฌ๋ถ„๊ณผ ๊ณต์œ ํ•˜๊ณ  ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ์ €ํฌ ํŒ€์˜ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ €ํฌ ํ”„๋กœ์ ํŠธ์—๋Š” ์›๋ž˜ ์•ฝํ•œ ๋‹จ๊ณ„์˜ eslint ์„ค์ •์ด ๋˜์–ด์žˆ์—ˆ๊ณ , ์ด์— ๋”ฐ๋ผ ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ์— eslint๊ฐ€ ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์Šˆ๋Š” ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์ถœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

์ด์Šˆ

ํฌ๋งทํŒ…์„ ํ•  ๋•Œ, ๋ณ€๊ฒฝ๋  eslintrc.json ๊ณผ package.json ํŒŒ์ผ์ด ์ œ๊ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ € ๊ฐ™์€ ๊ฒฝ์šฐ eslint๋Š” ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ์œผ๋‹ˆ ์„ค์ • ํŒŒ์ผ๋งŒ ๋ณ€๊ฒฝํ•˜๊ณ  lint ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํฌ๋งทํŒ… ์ˆ˜ํ–‰์„ ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ package.json ํŒŒ์ผ์—๋Š” โ€œ@typescript-eslint/eslint-pluginโ€ ์ด๋Ÿฐ ์˜์กด์„ฑ ์ฝ”๋“œ๋“ค์ด ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ €์˜ ์ƒ๊ฐ์€ โ€œ์ด๋ฏธ eslint๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”๋ฐ ์˜์กด์„ฑ์„ ๋ณ„๋„๋กœ ์„ค์น˜ํ•ด์•ผ ํ• ๊นŒ?โ€ ๋ผ๋Š” ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ํ™•์‹คํžˆ ํ•˜๊ธฐ ์œ„ํ•ด ํ•™์Šต์„ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

ESLint๋ž€?

ESLint๋Š” ์ž์ฒด์ ์œผ๋กœ ์ฝ”๋“œ ์Šคํƒ€์ผ ๊ทœ์น™, ์ผ๋ฐ˜์ ์ธ JavaScript ๊ทœ์น™, ECMAScript ๋ฒ„์ „๋ณ„ ๊ทœ์น™ ๋“ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ช‡ ๊ฐ€์ง€ ํŠน์ •ํ•œ ์ผ€์ด์Šค๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ๊ทœ์น™์€ ESLint์˜ ๊ธฐ๋ณธ ์ œ๊ณต ๊ทœ์น™์— ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ํ•ด๋‹น ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ESLint ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜์—ฌ ์ถ”๊ฐ€์ ์ธ ๊ทœ์น™์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

eslint์— ๋Œ€ํ•ด ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์™œ ๋ณ„๋„์˜ eslint ๊ด€๋ จ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์˜์กด์„ฑ์œผ๋กœ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์š”?

์™œ ๋ณ„๋„๋กœ eslint ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋Š”๊ฐ€

  1. ํ”„๋ ˆ์ž„์›Œํฌ/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŠน์ • ๊ทœ์น™: ํŠน์ • ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ณ ์œ ํ•œ ๊ทœ์น™์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” JSX ๋ฌธ๋ฒ•, React ํ›… ์‚ฌ์šฉ ๊ทœ์น™ ๋“ฑ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. React ๊ด€๋ จ ESLint ํ”Œ๋Ÿฌ๊ทธ์ธ์ธ eslint-plugin-react๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์ด๋Ÿฌํ•œ React ๊ด€๋ จ ๊ทœ์น™์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ์—ฌ: ํŠน์ • ํ”„๋กœ์ ํŠธ๋‚˜ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๊ฐœ๋ฐœํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™์ด๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜์—ฌ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ถ”๊ฐ€ ๊ทœ์น™์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, TypeScript ๊ด€๋ จ ESLint ๊ทœ์น™์„ ์ œ๊ณตํ•˜๋Š” @typescript-eslint/eslint-plugin ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ํ”„๋กœ์ ํŠธ ์š”๊ตฌ ์‚ฌํ•ญ: ํŠน์ • ํ”„๋กœ์ ํŠธ๋‚˜ ํŒ€์€ ๊ณ ์œ ํ•œ ๊ทœ์น™์„ ์ •์˜ํ•˜์—ฌ ์ผ๊ด€๋œ ์ฝ”๋“œ ์Šคํƒ€์ผ๊ณผ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ํŒ€์ด๋‚˜ ํ”„๋กœ์ ํŠธ์— ๋งž๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™์„ ์ •์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ๊ทœ์น™์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

ESLint ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ถ”๊ฐ€์ ์ธ ๊ทœ์น™, ์„ค์ •, ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ESLint๋ฅผ ํŠน์ • ํ”„๋ ˆ์ž„์›Œํฌ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ”„๋กœ์ ํŠธ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์œ ์—ฐํ•˜๊ฒŒ ํ™•์žฅํ•˜๊ณ  ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.