한국어
  • pnpm
  • 보안
  • 종속 항목
  • npm
  • yarn

PNPM 으로 중간 종속 항목 업그레이드하기: 문제를 일으키지 않고 보안 취약점 해결하기

보안 취약점을 해결하는 것은 특히 중간 종속 항목이 관련될 때 번거로울 수 있습니다. 직접 종속 항목에 영향을 주지 않으면서 이러한 항목을 업그레이드하는 방법을 알아보세요.

Gao
Gao
Founder

오늘날 소프트웨어 개발에서 보안 취약점은 흔한 문제입니다. 다행히 GitHub Dependabot 같은 도구가 있어 자동 탐지 및 풀 요청을 통해 종속 항목을 최신 상태로 유지할 수 있습니다.

Dependabot

하지만 항상 기대한 대로 작동하지는 않습니다. 일부 종속 항목은 중간 종속 항목이므로, 이러한 도구들이 변경 사항의 영향을 파악하고 충돌이 발생할 때 어떤 결정을 내려야 할지 모를 수 있습니다. 이러한 경우는 수동으로 처리해야 합니다.

작동하지 않는 방법들

  • pnpm up 같은 공식 명령어는 pnpm-lock.yaml 파일을 망칠 수 있습니다. 작성 시점에 이 문제가 여전히 열려 있습니다.
  • 목표 중간 종속 항목이 포함된 직접 종속 항목의 최신 버전을 설치해도 작동하지 않을 수 있습니다. 직접 종속 항목이 버전 정의를 업그레이드하지 않은 경우, 중간 종속 항목이 pnpm-lock.yaml 파일에서 이미 해결되어 잠겼기 때문에 업그레이드되지 않습니다.

해결책

overrides 필드 는 일부 버전 해상도를 재정의할 수 있는 PNPM 의 강력한 기능입니다. 이 기능을 사용하여 중간 종속 항목을 업그레이드하면서 변경을 최소화할 수 있습니다.

위의 Dependabot 경고를 예로 들어보겠습니다. follow-redirects 패키지에 보안 취약점이 있으며, 패치된 버전은 1.15.6 입니다. 그러나 직접 종속 항목인 gatsby[email protected]에 의존하는 axios 를 사용합니다.

1단계: 중간 종속 항목 찾기

중간 종속 항목을 찾는 방법은 여러 가지가 있지만, 가장 간단한 방법을 추천합니다: pnpm-lock.yaml 파일에서 검색하기.

"pnpm why" 는 어떨까요?

pnpm why <package> 명령어는 확실히 유용합니다. 하지만 이 경우에는 혼란을 줄 수 있습니다. 예를 들어, pnpm why follow-redirects를 실행했을 때의 출력 중 일부는 다음과 같습니다:

사실상, pnpm-lock.yaml 파일에는 follow-redirects에 대한 하나의 해상도만 있습니다. pnpm why 명령어는 같은 버전에 의존하는 여러 경로를 보여줄 수 있습니다.

2단계: overrides 추가

가장 쉬운 경우는 pnpm-lock.yaml 파일에 하나의 해상도만 존재하는 경우입니다. 이 경우 package.json 파일에 직접 override 를 추가할 수 있습니다:

워크스페이스에 있는 경우, 워크스페이스의 루트 package.json 파일에 override 를 추가해야 합니다.

3단계: 변경 사항 적용

변경 사항을 적용하려면 pnpm install을 실행합니다. 그러면 최소한의 변경으로 pnpm-lock.yaml 파일에서 follow-redirects 패키지가 1.15.6으로 업그레이드된 것을 확인할 수 있습니다.

이제 package.json 파일에서 overrides 필드를 제거하여 파일을 깨끗하게 유지할 수 있습니다. 그런 다음 pnpm install을 다시 실행하여 overrides 필드 없이도 변경 사항이 적용될 수 있는지 확인합니다.

문제 해결

위 단계들은 이상적인 경우입니다. 항상 예상대로 일이 진행되는 것은 아닙니다. 여기 몇 가지 문제 해결 팁이 있습니다:

"overrides" 필드를 제거한 후 버전이 되돌아갔을 때

이것은 종속 패키지에 고정된 버전이 있거나 목표 버전이 포함되지 않은 범위가 설정된 경우에 발생할 수 있습니다. 이 경우, axiospackage.json 파일을 확인하여 해당되는지 확인하세요.

이 경우, 종속 패키지가 버전 정의를 업그레이드할 때까지 package.json 파일에 overrides 필드를 유지해야 합니다.

중간 종속 항목에 여러 해상도가 있을 때

프로젝트가 커짐에 따라 pnpm-lock.yaml 파일에 같은 패키지에 대해 여러 해상도가 생길 수 있습니다. 예를 들어, foo 라는 동일한 패키지의 두 개의 주요 버전이 있을 수 있습니다:

취약점 보고서는 [email protected]에 보안 문제가 있으며, 이는 1.0.1에서 수정되었고, [email protected]은 영향을 받지 않는다고 알려줍니다. 단순히 foo에 대해 override 를 추가할 수는 없습니다:

  • "foo": "^1.0.1"을 추가하면 [email protected]1.0.1로 다운그레이드됩니다. 이것은 [email protected]의 새로운 기능이 종속 패키지에서 사용될 수 있으므로 프로젝트를 망칠 수 있습니다.
  • "foo": "^2.0.0"을 추가하면 [email protected]2.0.0으로 업그레이드됩니다. 이것은 [email protected]에 중대한 변경 사항이 있을 수 있으므로 프로젝트를 망칠 수 있습니다.

foo시맨틱 버저닝을 따르고 있다고 가정하면, 다음과 같이 override 를 추가할 수 있습니다:

이렇게 하면 [email protected]1.0.1로 업그레이드되고 [email protected]은 변경되지 않습니다.

결론

PNPM 이 중간 종속 항목을 직접 업그레이드하는 기능을 지원하기 전까지는, overrides 필드는 문제를 일으키지 않고 보안 취약점을 해결하는 훌륭한 대안입니다. 이 기사를 통해 이러한 상황을 더 효율적으로 처리할 수 있기를 바랍니다. 로그토(Logto)에서는 이 방법을 사용하여 종속 항목을 최신 상태로 유지하고 보안을 강화합니다.