완벽한 린터를 기다리지 않기로 했다: ESLint V9 마이그레이션, 그리고 Biome 하이브리드 도입기

1 month ago 8

ESLint V8 지원 종료에 대응해 V9로 마이그레이션하고, 성능 문제를 Biome 하이브리드 도입으로 해결한 레몬베이스 프론트엔드 챕터의 경험을 공유합니다.

도입 배경

  • 2024년 9월 ESLint V8 지원 종료 공지, 보안 패치와 버그 수정을 받으려면 V9 마이그레이션이 필수인 상황
  • V9부터 .eslintrc.js 기반 설정이 deprecated 되고, Flat Config가 기본이 됨
  • 약 400개 규칙, 이원화된 설정 파일 구조, 다양한 플러그인 호환성 확인이 필요했음

마이그레이션 과정

  • ESLint 공식 마이그레이션 도구는 @eslint/compat으로 래핑해주는 수준이라 기대에 미치지 못함
  • AI 도구로 초안을 생성했지만, 누락된 규칙과 호환성 문제가 다수 발생
  • 결국 스프레드시트로 V8/V9 규칙을 한 줄씩 대조하며 전수 조사

마이그레이션 후 성능 문제

  • V9로 올렸더니 오히려 154초 → 184초로 30초 더 느려짐
  • import/no-cycle 규칙이 V8 대비 10배 느려져 전체의 45.8% 차지
  • prettier/prettier 규칙도 10.2%로 이중 파싱 오버헤드가 병목

Biome 하이브리드 도입

  • 완전 대체 대신 "같이 쓰면서 이득에 집중"하는 접근으로 전환
  • Prettier → Biome Formatter 교체, 포맷팅 14초 → 2초로 단축
  • ESLint는 프로젝트의 커스텀 규칙만 담당

최종 결과

  • ESLint V8: 154초 → ESLint V9: 184초
  • ESLint Only → Biome + ESLint 하이브리드: ~20초

배운 점

  • AI에게 마이그레이션을 맡길 때는 계획을 먼저 세우게 하고 사람이 검토, 성공 기준(예: V8 결과와 일치)을 명확히 정의해야 함
  • 완벽한 도구를 기다리기보다, 지금 쓸 수 있는 도구를 잘 조합하는 게 더 빠른 길일 때도 있음

주의할 점

  • 두 도구를 함께 쓰면 eslint.config.mjs와 biome.json을 모두 관리해야 하고, 규칙 충돌 가능성이 있음
  • 어떤 규칙을 어느 도구에서 담당할지 명확히 정해두고, 신규 팀원 온보딩 시 역할 분담 설명 필요

Read Entire Article