pnpm minimumReleaseAge 604800의 함정 — 단위는 초가 아니라 분이었어요
공급망 방어로 pnpm minimumReleaseAge를 604800으로 박았는데, 단위가 초가 아니라 분이라 실제로는 420일을 기다리는 설정이었어요. 7일은 10080이 맞았습니다.
새 패키지를 바로 안 받고 며칠 묵혔다 받는 설정, 한 번쯤 들어보셨을 거예요. 공급망 공격이 "정상 배포 몇 번 → 악성 버전 슬쩍" 방식으로 오다 보니, 갓 나온 버전을 곧장 물지 않는 게 얇지만 확실한 방어선이 돼요.
pnpm에는 이걸 해주는 minimumReleaseAge 옵션이 있어요. 그래서 제 저장소 하나에 "7일 = 604800" 이렇게 박아뒀어요. 초 단위 감각으로요. 7 × 24 × 60 × 60 = 604800초, 딱 7일. 계산도 맞고 마음도 편했죠.
그런데 며칠 뒤에 문서를 다시 확인해보니 단위가 초가 아니라 분이더라고요.
604800을 초로 봤을 때(7일)와 실제 분 단위(420일)의 차이
계산해보니 420일
분이라는 걸 알고 다시 계산해봤어요. 604800분 ÷ 1440분(하루) = 420일. 7일을 기다리게 하려던 설정이 사실은 1년 넘게 새 버전을 막고 있던 거예요. 방어가 아니라 사실상 업데이트 동결이었죠.
진짜 7일은 얼마냐면, 7 × 24 × 60 = 10080분. 그래서 값은 minimumReleaseAge: 10080이 맞아요.
- 단위=분
- 7일=10080
- 604800=420일
- workspace 파일에 설정
두 번째 함정: 전역 설정이 안 먹었어요
값을 고치면서 하나 더 걸렸어요. 습관적으로 pnpm config set --global로 넣으려 했는데, 이 경로가 최근 pnpm에선 조용히 안 먹더라고요. 에러도 안 나서 됐다고 착각하기 딱 좋았어요. 결국 pnpm-workspace.yaml에 직접 적는 게 실제로 강제되는 유일한 경로였어요.
돌려보니 확실하더라고요. 워크스페이스 파일에 적힌 값만 빌드에 반영됐어요.
남은 메모
- 값은 초가 아니라 분. 7일이면 10080.
- 전역 config 말고
pnpm-workspace.yaml에 박기. - 프로덕션 빌드는
--ignore-scripts도 같이 챙기기.
플랜씨(plan-c) 저장소를 정리하다 발견한 실수인데, 숫자 하나에서 "초냐 분이냐"만 어긋나도 방어가 통째로 딴 얘기가 돼요. 설정을 넣었다는 사실보다, 그 설정이 진짜 내 의도대로 도는지 한 번 더 계산해보는 습관이 저한테는 더 남았어요.
관련 글
댓글
아직 댓글이 없어요. 첫 댓글을 남겨주세요.