콘텐츠로 이동

12. 의존성도 공급망이다

내 코드는 한 줄도 안 바꿨는데 보안 사고가 난다. 가져다 쓴 패키지에 취약점이 공개됐거나, 인기 패키지가 탈취돼 악성 버전이 배포됐다. 락파일이 없어서 배포할 때마다 최신 버전을 자동으로 받아왔다면, 악성 버전이 자동으로 내 프로덕션에 들어온 것이다.

의존성은 내가 고용한 코드다. 무엇을 쓰는지(락파일), 그것이 뚫렸는지(취약점 알림), 언제 갱신할지(루틴)를 관리하는 것까지가 사용이다.

  • 락파일을 커밋한다. 이것 하나로 “배포마다 다른 의존성” 문제와 자동 악성 버전 유입의 큰 부분이 막힌다.
  • 저장소 호스팅의 취약점 알림(Dependabot류)을 켠다. 보안 패치 자동 PR까지 켜면 솔로 개발자에게는 무료 보안팀이다.
  • 다만 자동 갱신 PR을 검토 없이 자동 머지하는 것은 다른 위험(악성 신버전 즉시 유입)을 만든다 — 보안 패치는 빠르게, 일반 갱신은 릴리스 노트 훑고.
  • 의존성을 추가하기 전에 한 번 묻는다: 표준 라이브러리나 몇 줄 직접 구현으로 되는 일인가. 안 쓰는 의존성은 제거한다 — 표면적 자체가 위험이다.
  • CI에 취약점 검사(audit) 한 줄을 넣어 심각 등급에서 빌드가 실패하게 한다.
  • 락파일이 커밋돼 있다
  • 취약점 알림+보안 패치 PR이 켜져 있다
  • 자동 머지 정책이 구분돼 있다 (보안 패치=빠르게, 일반=검토)
  • 안 쓰는 의존성이 정리돼 있다