💻 프로그래밍

Oxlint

Rust로 작성된 빠른 JavaScript 린터

📖 상세 설명

Oxlint는 Rust로 작성된 초고속 JavaScript/TypeScript 린터(Linter)입니다. Oxc(Oxidation Compiler) 프로젝트의 일부로, JavaScript 생태계의 도구들을 Rust로 재작성하여 극한의 성능을 제공하는 것을 목표로 합니다. 코드의 잠재적 버그, 스타일 위반, 보안 취약점을 분석하여 더 안전하고 일관된 코드를 작성할 수 있도록 도와줍니다.

Oxlint는 Oxc 프로젝트의 핵심 도구 중 하나입니다. Oxc는 JavaScript/TypeScript를 위한 파서, 린터, 포매터, 트랜스파일러, 미니파이어를 Rust로 구현하는 야심찬 프로젝트로, 각 도구가 독립적으로 사용 가능하면서도 함께 통합될 때 최고의 성능을 발휘합니다. Oxlint는 이 중 린터 역할을 담당하며, Oxc 파서의 빠른 AST 파싱 속도를 활용합니다.

Oxlint의 가장 큰 장점은 압도적인 성능입니다. ESLint 대비 50~100배 빠른 속도를 자랑하며, 수천 개의 파일을 가진 대규모 프로젝트도 1초 이내에 린팅을 완료합니다. 이는 Rust의 제로 비용 추상화와 메모리 안전성, 그리고 병렬 처리 최적화 덕분입니다. CI/CD 파이프라인에서 린팅 시간이 몇 분에서 몇 초로 단축되어 개발 생산성이 크게 향상됩니다.

실무 도입 시 Oxlint는 ESLint를 완전히 대체하기보다 보완하는 용도로 사용하는 것이 권장됩니다. Oxlint를 먼저 실행하여 빠르게 기본적인 오류를 잡고, 특수 플러그인이 필요한 검사는 ESLint로 처리하는 하이브리드 전략이 효과적입니다. 2025년 현재 400개 이상의 린트 규칙을 지원하며, ESLint, TypeScript-ESLint, Jest, Unicorn, Import, React, JSX-a11y 등 주요 플러그인의 규칙들을 점진적으로 포팅하고 있습니다.

💻 코드 예제

// oxlint.json - Oxlint 설정 파일 (선택적)
{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "rules": {
    // ESLint 규칙
    "no-unused-vars": "warn",
    "no-console": "warn",
    "eqeqeq": "error",

    // TypeScript 규칙
    "typescript/no-explicit-any": "warn",
    "typescript/no-non-null-assertion": "warn",

    // React 규칙
    "react/no-direct-mutation-state": "error",
    "react-hooks/rules-of-hooks": "error",
    "react-hooks/exhaustive-deps": "warn",

    // Import 규칙
    "import/no-cycle": "error",
    "import/no-self-import": "error",

    // 접근성 규칙
    "jsx-a11y/alt-text": "warn",
    "jsx-a11y/anchor-is-valid": "warn"
  },
  "settings": {
    "jsx-a11y": {
      "polymorphicPropName": "as"
    }
  },
  "ignorePatterns": ["dist", "node_modules", "*.config.js"]
}

// 터미널 명령어
// 1. 설치
npm install -D oxlint

// 2. 전체 프로젝트 린팅
npx oxlint

// 3. 특정 디렉토리만 린팅
npx oxlint ./src

// 4. 설정 파일 지정
npx oxlint -c oxlint.json

// 5. 특정 규칙만 활성화 (카테고리 단위)
npx oxlint -D correctness -D suspicious -D perf

// 6. 자동 수정 가능한 문제 수정
npx oxlint --fix

// 7. 출력 형식 지정 (CI용)
npx oxlint --format github

// 8. ESLint와 함께 사용 (package.json scripts)
"scripts": {
  "lint": "oxlint && eslint . --ext .ts,.tsx",
  "lint:fast": "oxlint",
  "lint:full": "eslint . --ext .ts,.tsx"
}

🗣️ 실무에서 이렇게 말하세요

💬 회의에서 - ESLint 마이그레이션 논의
"CI에서 ESLint 돌리는 데 3분 넘게 걸리는데요, Oxlint를 먼저 실행하면 대부분의 오류를 1초 만에 잡을 수 있습니다. ESLint는 Oxlint가 지원 안 하는 특수 플러그인용으로만 남기고, 기본 린팅은 Oxlint로 전환하면 PR 피드백 시간이 대폭 줄어들 것 같습니다."
💬 면접에서
"Oxlint는 Oxc 프로젝트의 린터로, Rust로 작성되어 ESLint보다 50~100배 빠릅니다. 아직 모든 ESLint 플러그인을 지원하지는 않지만, correctness와 suspicious 카테고리 규칙들로 버그를 빠르게 찾을 수 있어서 ESLint와 병행해서 쓰면 개발 경험이 크게 개선됩니다."
💬 CI/CD 최적화 논의에서
"GitHub Actions에서 린트 job이 병목이었는데, Oxlint로 바꾸니까 전체 CI 시간이 5분에서 2분으로 줄었습니다. 특히 PR마다 실행되는 거라 하루에 수십 번 돌아가는데, 개발팀 전체 대기 시간 합치면 엄청난 시간 절약이에요. 설정도 거의 없이 바로 쓸 수 있어서 도입 비용도 낮았습니다."
💬 코드 리뷰에서 - 린트 설정 개선
"oxlint.json에서 'import/no-cycle': 'error' 설정 추가한 거 좋네요. 순환 참조 버그 예방에 효과적이에요. 근데 'typescript/no-explicit-any'는 warn 말고 error로 올려도 될 것 같아요. 현재 코드에 any가 거의 없어서 strict하게 가져도 문제없을 거예요. 그리고 CI에서 --format github 옵션 추가하면 PR에 인라인 어노테이션으로 린트 에러가 표시되니까 리뷰할 때 편합니다."

⚠️ 흔한 실수 & 주의사항

ESLint 규칙 100% 호환 기대하기

Oxlint는 ESLint의 모든 규칙과 플러그인을 지원하지 않습니다. eslint-plugin-import의 일부 규칙, 커스텀 플러그인 등은 아직 미지원입니다. 공식 규칙 지원 현황 페이지에서 확인 후 도입하세요.

ESLint 설정 파일 그대로 사용하기

Oxlint는 .eslintrc.js를 읽지 않습니다. 별도의 oxlint.json 설정 파일을 사용하거나 CLI 옵션으로 규칙을 지정해야 합니다. 대부분의 규칙은 기본적으로 적절히 설정되어 있어 설정 없이도 바로 사용 가능합니다.

하이브리드 전략 권장

Oxlint를 먼저 실행하여 빠른 피드백을 받고, ESLint는 Oxlint가 커버하지 못하는 규칙만 검사하도록 구성하세요. CI에서는 `oxlint && eslint --rule '{...}'` 형태로 조합하면 속도와 커버리지를 모두 잡을 수 있습니다.

🔗 관련 용어

📚 더 배우기