패키지 배포와 깃허브 dependabot

zmin·2022년 8월 13일
0

일단 npm 회원가입 해주고
npm login 통해서 나의 CLI에도 내 계정정보를 입력해주자.

npm init을 이용해서 questionnaire로 기본 package.json 파일을 만들 수 있다. (이거 없으면 패키지로 취급 안해준다)

꼭 포함되어야 하는 정보는

  • 패키지 이름"name"
  • 버전 정보"version"이기 때문에 이 둘만 적어두고 필요한 정보만 이후 추가해도 될 것이다.

-> 내 패키지를 공유하기 위한 최소 정보와 나중에 이를 사용할 사람들을 위한 정보를 적어둔다.

기본 과정은 공식 문서에 아주 친절하게 나와있어서 생략하겠다.
정말 인간적으로 친절한 글이다.


typescript 쓸 것이기 때문에

npm install --save-dev typescript

global이 아니라 --save-dev하는 이유는 트랜스파일러로 개발 도구의 일종이기 때문에 --save-dev 로 설치했다.

npmjs를 통해 배포할 때도 .ts파일이 아니라 빌드된 .js파일과 패키지를 이용할 typescript 사용자가 참고할 선언파일 .d.ts파일을 배포한다.

아무튼 설치하면 이렇게 devDependencies의 프로퍼티로 추가된다.

"devDependencies": {
    "typescript": "^4.7.4"
}

package.json에 typescript를 사용할 때 참고할 선언파일을 지정해줄 수 있다. (위에서 말한 .d.ts 파일)

//package.json
{
	...
	"main": "lib/index.js",
	"types": "lib/index.d.ts",
    ...
}

보통

  • github에는 빌드 전의 .ts 파일
  • npmjs 배포할 때는 빌드 후의 .js와 타입을 참고할 .d.ts파일

이렇게 나눠서 파일을 공유하는 것 같다.
그러면 각각의 파일 공유/배포시에 제외할 파일을 설정해줘야할텐데 이는 .gitignore, .npmignore를 통해 설정할 수 있다.
제외할 파일을 적어줘야하기 때문에 .gitignore에는 .js, .d.ts 파일들을 (보통 폴더로 관리) 적어줘야 할 것이다.

배포는 npm publish

나의 경우 scope를 지정해 주었는데 scope를 지정하면 기본으로 private package가 된다.
하지만 이는 유료 서비스이기 때문에..
다음과 같은 명령어로 public 배포를 해준다.

npm publish --access public

github dependabot

물론 내가 지금 만든건 기껏해야 devDependencies로 typescript 하나지만.. 만약 나중에 어떤 거대한 패키지를 만든다면 오래 사용될 패키지를 위해 이런 종속성을 잘 관리하는 것이 중요할 것이다.
https://docs.github.com/en/code-security/dependabot

보통 취약점이라 하는 것은 현재 프로젝트 또는 이 코드를 사용하는 또 다른 프로젝트에게 기밀성, 무결성, 가용성등을 손상시키는, 즉 간단히 말해 피해를 끼치기 위해 악용될 수 있는지의 가능성을 말한다. 의도하지 않더라도 이런 취약점은 생겨날 수 있기 때문에 발견즉시 수정하는 것이 좋다.

이와 반대로 일부러 유해하게 작동하도록 설계한 것이 malware -> 이 역시 알게된 직후 바로 제거하고 이를 대체할 수 있는 방안을 찾아야한다.

dependabot은 나의 종속성의 보안 취약점에 대해 알려주면서 해당 종속성들을 최신버전으로 유지할 수 있도록 하고 자동으로 풀리퀘스트를 생성한다. 두 가지 일을 하는 것

강제로 업데이트하진 않고 레포지토리 주인에게 이런 업데이트가 필요하다고 알려주는 것이 dependabot alert이다. 문제없이 바로 업데이트 할 수 있다면 풀 리퀘스트를 생성한다.
만약 또 다른 종속성 취약점이 발생한다는지의 이유로 해당 버전을 바로 사용할 수 없는 경우는 이 상황을 해결할 수 있도록 여러 가지 정보를 제공해준다. (직접 해결하긴 해야함)

이런 advisory는 국가적인 데이터베이스 취약점이나 기계학습+사람의리뷰를 잘 조합한 것과 깃허브, npm 데이터베이스에 기반하여 발생한다. -> 취약점을 검토하는 방식. 각종 취약점 관련 정보들을 모아 저장하고 해당 버전의 패키지가 취약점이 있는지 분석하여 사용자에게 알려줌

dependency graph

이런 취약점 검토와 수정에 쓰이는 dependency graph, npm 사용자라면 package-lock.json이 익숙할 것이다.
직접적으로 사용하는 패키지들 뿐만 아니라 내부적으로 종속하고 있는 것들에 대한 정보도 입력된다.
취약점을 수정할 때 이 dependency graph에 최대한 변화가 없도록 최소 버전으로 업데이트를 유도한다.

빠른 적용

git repository의 security탭의 dependabot alerts를 활성화하여 종속성 취약점과 업데이트 관련 알림을 받을 수 있다.
이를 활성화하면 이동되는 페이지에서 옵션을 선택하여 보안 업데이트를 할 것인지, 버전 업데이트를 할 것인지도 지정해줄 수 있다.

profile
308 Permanent Redirect

0개의 댓글