개발자의 끄적끄적

NPM — About audit [펌] 본문

개발

NPM — About audit [펌]

효벨 2020. 8. 9. 02:00
728x90
반응형

NPM — About audit [펌]

 

 

프로젝트를 진행하던 도중 dependency를 추가해야 할 일이 있었는데 보안 문제가 있다고 하여 npm audit fix 를 통해 해결을 하려 하였다.

그러나 해결은 되지 않았고 npm audit fix --force 를 사용하라고 지시하였고 npm audit fix --force를 하자 다음과 같은 Warning이 나왔다.

나는 너가 무엇을 하고 있는지 알았으면 좋겠어….

결론적으로 보안 문제는 해결이 되었지만 나는 --force 옵션을 사용하면 무엇이 바뀌는지 몰랐기에 이번 기회에 npm audit 에 대해 알아보려고 한다.

npm audit

npm@6 (npm@5.10.0도 사용 가능)에 npm audit 이라는 기능이 추가되었다. 이는 npm을 사용하는 프로젝트에서 dependency를 추가하거나 npm audit 명령어를 사용했을 때 그 dependency tree의 보안 취약점과 해결 방안을 제공해준다. 이 제공된 정보를 통해 Node를 사용하는 오픈소스 프로젝트와 애플리케이션 모두 견고하고 완전하게 만들 수 있다.

npm audit fix

npm audit fix  npm audit 을 통해 나온 보안 취약점 결과들을 자동적으로 고쳐준다. 문서를 참고해보면 여러 옵션이 있다.

  • --dry-run: 바뀌는 점을 확인해 볼 수 있다. --json 옵션을 추가하면 JSON 형식으로 확인할 수 있다.
  • --package-lock-only: package.json과 package-lock.json만 수정하고 node_modules는 수정하지 않는다.
  • --only=prod|dev: dependencies만 혹은 devDependencies만 fix한다.
  • --force: ???

audit fix — force option

Have audit fix install semver-major updates to toplevel dependencies, not just semver-compatible ones — NPM Audit Document

이 문장을 번역기에 넣어보면

아하! 근데 semver가 뭐지?

semver가 무엇인지는 모르겠지만, npm audit fix --force를 하게되면 최상위 종속성의 major 업데이트를 설치한다는 것을 알 수 있다. 그렇다면 semver는 무엇일까?

semver는 Semantic Versioning의 약자로 한국말로 번역해보자면 의미론적 버전 부여 방식이다. semver에서는 버전을 major.minor.patch로 나누고 다음과 같은 방식으로 부여한다.

  • major는 이전 버전과 호환되지 않게 기능이 추가되었을 때 변경
  • minor는 이전 버전과 호환이 가능하면서 기능이 추가되었을 때 변경
  • patch는 이전 버전과 호환이 가능하면서 버그를 수정했을 때 변경

그렇다면 npm audit fix에 대입하여 생각해보면 기존 fix는 minor나 patch를 변경하는 반면 --force 옵션이 생기면 major 를 수정할지도 모른다는 의미이다.

결론

npm audit fix --force는 semver-major를 수정하므로 기존에 사용하던 라이브러리의 API가 호환이 안 될수도 있으니 주의를 요구한다.

 

 

출처 : https://medium.com/@kimjnsjwj/npm-about-audit-8e02e3b7c833

반응형
Comments