기존 Rush Stack 설정이 최신 ESLint 9(Flat Config) 환경에서 발생하는 구조적 오류(순환 참조 등)를 해결하고, Next.js 15와의 호환성을 확보하기 위해 Native Flat Config 기반의 typescript-eslint v8을 도입한다. Rush Stack 수준의 엄격한 Type-Safety를 유지하면서도, 설정의 복잡도를 낮추고 유지보수성을 높이는 것을 목표로 한다.
<aside>
Rush Stack 기반 린트 설정을 Native ESLint 9 (Flat Config)로 마이그레이션
Accepted
이 결정을 하게 된 상황, 문제, 요구사항
@rushstack/eslint-config는 구형 설정 방식(Legacy Config)에 최적화되어 있음.FlatCompat 등을 시도했으나, Circular structure 오류 및 플러그인 로드 실패 등 불안정한 모습을 보임.최종적으로 어떤 선택을 했는지
프로젝트의 린팅 시스템을 ESLint 9 Native Flat Config (eslint.config.mjs) 방식으로 전면 전환하고, 다음 구성을 확정한다.
typescript-eslint v8의 strictTypeChecked 및 stylisticTypeChecked 프리셋을 사용하여 Rush Stack 수준의 엄격함 유지.eslint-plugin-next, react, react-hooks를 직접 구성하여 Next.js 최적화 규칙 적용.no-floating-promises(비동기 처리 강제), explicit-module-boundary-types(함수 반환 타입 명시) 등 핵심 품질 규칙 커스텀 적용.왜 이 선택이 최선인지, 어떤 장단점이 있었는지
이 선택이 최선인 이유는 다음과 같음:
typescript-eslint의 strictTypeChecked 옵션은 Rush Stack이 제공하던 '타입 기반 린팅' 기능을 완벽하게 대체 및 상회함.eslint.config.mjs 파일 하나에서 모든 규칙을 제어할 수 있어, 팀원 누구나 설정을 이해하고 수정하기 쉬움.고려했지만 선택하지 않은 다른 옵션들, 그걸 선택하지 않은 이유
ESLINT_USE_FLAT_CONFIG=false 환경 변수를 사용하여 구형 모드로 작동.eslint-config-next만 사용
any 타입 남용이나 Promise 처리 누락 같은 잠재적 버그를 잡지 못해 팀의 품질 기준을 충족하지 못함.이 결정이 가져올 영향, 장기적 고려사항
긍정적 영향:
Circular structure 에러나 패치 오류에 시달리지 않음.tsconfig.json 기반의 강력한 타입 검사가 이루어져 런타임 에러를 사전에 방지함.주의해야 할 점:
Type-Aware Linting을 사용하므로 린트 실행 시 컴파일 시간이 소요되어 단순 문법 검사보다는 약간 느릴 수 있음.