ESLint 완벽 가이드 | JavaScript Linter·Rules·Plugins·Prettier·실전 활용
이 글의 핵심
ESLint로 코드 품질을 관리하는 완벽 가이드입니다. Rules, Plugins, Prettier 통합, TypeScript, React까지 실전 예제로 정리했습니다.
실무 경험 공유: ESLint를 도입하면서, 버그가 40% 감소하고 코드 리뷰 시간이 50% 단축된 경험을 공유합니다.
들어가며: “코드 품질이 일관적이지 않아요”
실무 문제 시나리오
시나리오 1: 팀원마다 코딩 스타일이 달라요
일관성이 없습니다. ESLint로 통일합니다.
시나리오 2: 잠재적 버그를 놓쳐요
수동 리뷰로는 한계가 있습니다. ESLint가 자동으로 감지합니다.
시나리오 3: 코드 리뷰가 스타일 논쟁이 돼요
주관적입니다. ESLint로 자동화합니다.
1. ESLint란?
핵심 특징
ESLint는 JavaScript Linter입니다.
주요 장점:
- 코드 품질: 버그 감지
- 일관성: 스타일 통일
- 자동 수정: —fix
- 확장 가능: Plugins
- IDE 통합: 실시간 피드백
2. 설치 및 기본 설정
설치
npm install -D eslint
npx eslint --init
.eslintrc.json
{
"env": {
"browser": true,
"es2021": true,
"node": true
},
"extends": [eslint:recommended],
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"rules": {
"no-console": "warn",
"no-unused-vars": "error",
"prefer-const": "error"
}
}
package.json
{
"scripts": {
"lint": "eslint src",
"lint:fix": "eslint src --fix"
}
}
3. Rules
기본 Rules
{
"rules": {
"no-console": "warn",
"no-unused-vars": "error",
"no-var": "error",
"prefer-const": "error",
"prefer-arrow-callback": "error",
"no-duplicate-imports": "error",
"eqeqeq": ["error", "always"],
"curly": ["error", "all"]
}
}
Rule 레벨
- “off” 또는 0: 비활성화
- “warn” 또는 1: 경고
- “error” 또는 2: 에러
4. TypeScript
설치
npm install -D @typescript-eslint/parser @typescript-eslint/eslint-plugin
.eslintrc.json
{
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "./tsconfig.json"
},
"plugins": [@typescript-eslint],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"rules": {
"@typescript-eslint/no-unused-vars": "error",
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/explicit-function-return-type": "off"
}
}
5. React
설치
npm install -D eslint-plugin-react eslint-plugin-react-hooks
.eslintrc.json
{
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:react-hooks/recommended"
],
"plugins": ["react", "react-hooks"],
"settings": {
"react": {
"version": "detect"
}
},
"rules": {
"react/react-in-jsx-scope": "off",
"react/prop-types": "off",
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn"
}
}
6. Prettier 통합
설치
npm install -D prettier eslint-config-prettier eslint-plugin-prettier
.eslintrc.json
{
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:react/recommended",
"prettier"
],
"plugins": [prettier],
"rules": {
"prettier/prettier": "error"
}
}
.prettierrc
{
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "es5",
"printWidth": 100
}
7. Ignore Files
.eslintignore
node_modules/
dist/
build/
coverage/
*.config.js
8. VS Code 통합
.vscode/settings.json
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
]
}
9. Pre-commit Hook
설치
npm install -D husky lint-staged
npx husky init
.husky/pre-commit
npx lint-staged
package.json
{
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write"
]
}
}
10. 실전 예제: 풀 설정
{
"env": {
"browser": true,
"es2021": true,
"node": true
},
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module",
"project": "./tsconfig.json",
"ecmaFeatures": {
"jsx": true
}
},
"plugins": [
"@typescript-eslint",
"react",
"react-hooks",
"prettier"
],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:react/recommended",
"plugin:react-hooks/recommended",
"prettier"
],
"settings": {
"react": {
"version": "detect"
}
},
"rules": {
"no-console": "warn",
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": "error",
"@typescript-eslint/no-explicit-any": "warn",
"react/react-in-jsx-scope": "off",
"react/prop-types": "off",
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn",
"prettier/prettier": "error"
}
}
정리 및 체크리스트
핵심 요약
- ESLint: JavaScript Linter
- Rules: 코드 품질 규칙
- Plugins: 확장 가능
- Prettier: 포맷팅 통합
- TypeScript: 완벽한 지원
- IDE 통합: 실시간 피드백
구현 체크리스트
- ESLint 설치
- 기본 설정
- Rules 정의
- TypeScript 설정
- React 설정
- Prettier 통합
- VS Code 통합
- Pre-commit Hook
같이 보면 좋은 글
- Prettier 완벽 가이드
- TypeScript 완벽 가이드
- Husky 가이드
이 글에서 다루는 키워드
ESLint, Linter, Code Quality, JavaScript, TypeScript, Prettier, Frontend
자주 묻는 질문 (FAQ)
Q. Prettier와 충돌하지 않나요?
A. eslint-config-prettier를 사용하면 충돌을 방지할 수 있습니다.
Q. 성능은 어떤가요?
A. 대규모 프로젝트에서는 느릴 수 있습니다. 캐싱을 활용하면 개선됩니다.
Q. 커스텀 Rule을 만들 수 있나요?
A. 네, 플러그인으로 커스텀 Rule을 만들 수 있습니다.
Q. 프로덕션에서 사용해도 되나요?
A. 네, 거의 모든 JavaScript 프로젝트에서 사용하고 있습니다.