PNPM 으로 중간 종속 항목 업그레이드하기: 문제를 일으키지 않고 보안 취약점 해결하기
보안 취약점을 해결하는 것은 특히 중간 종속 항목이 관련될 때 번거로울 수 있습니다. 직접 종속 항목에 영향을 주지 않으면서 이러한 항목을 업그레이드하는 방법을 알아보세요.
오늘날 소프트웨어 개발에서 보안 취약점은 흔한 문제입니다. 다행히 GitHub 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" 필드를 제거한 후 버전이 되돌아갔을 때
이것은 종속 패키지에 고정된 버전이 있거나 목표 버전이 포함되지 않은 범위가 설정된 경우에 발생할 수 있습니다. 이 경우, axios
의 package.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)에서는 이 방법을 사용하여 종속 항목을 최신 상태로 유지하고 보안을 강화합니다.