본문 바로가기

업무

커밋시 eslint 속도 개선 (lint-staged, husky)

우리팀 git 시스템은

커밋 한 번 할 때마다 10~20초씩 걸린다.

그렇다 보니 커밋을 최대한 나중에 하려는 습관이 생기는 것 같다. (다른 팀원들도 그렇다고 한다)

그리고 갈수록 더 느려진다.

 

처음엔 코드베이스에 익숙하지 않아서

그냥 별로 문제로 여기지 않았지만

 

문득 내가 왜 이 시간을 기다려야 하지?

라는 생각이 들었다.

 

그래서 우리 커밋 시스템을 살펴보니

매 커밋마다 전체 프로젝트를 eslint 하고 있는 것이다.

 

이러니 느릴 수 밖에 없던 것이다.

 

아마도 우리팀 규모가 처음엔 이렇게 크지 않아서

이런 방식을 사용했던 것 같다.

 

매 커밋마다 전체 파일을 eslint 해야 할까?

그냥 커밋에 올라가는 변경된 파일만 eslint 하면 되는 것 아닌가?

생각했고 문제 없다고 팀원들과 얘기했다.

 

그래서 적용했다.

 

처음엔 git diff와 grep 커맨드로 비교할 계획이었지만

 

이미 이런 고민을 위해 훌륭한 라이브러리가 있었다.

 

lint-staged 라는 라이브러리다.

https://www.npmjs.com/package/lint-staged

 

lint-staged

Lint files staged by git. Latest version: 13.0.3, last published: 2 months ago. Start using lint-staged in your project by running `npm i lint-staged`. There are 1779 other projects in the npm registry using lint-staged.

www.npmjs.com

 

확장자마다 커밋 전에 다양한 커맨드를 조합할 수 있도록 지원하고, 동시성도 지원하여 채택했다.

{
  "*.ts": ["prettier --list-different", "eslint"],
  "*.md": "prettier --list-different"
}

 

이제 10~20초 걸리던 것이 1초 정도로 줄었다.

 

딱 내가 겪던 문제를 해결하기 위해 만들어졌다고 소개하고 있다.