Dependabot 경고가 많다면, 취약 함수까지 이어지는 길을 보세요
보안 경고에 같은 패키지 이름이 떠도 수정 순서는 달라질 수 있어요. 로그인 요청을 처리할 때 취약 함수를 부르는 서비스와, 패키지는 설치돼 있지만 그 함수를 쓰지 않는 서비스는 상황이 다르거든요. GitHub가 2026년 10월 28일 공개한 Dependabot reachability analysis는 바로 이 차이를 경고 화면에서 보여주는 공개 미리보기예요.
설치된 패키지에서 실제 호출 경로로
기존 Dependabot 경고가 취약한 의존성 버전을 알려줬다면, 새 분석은 저장소 코드에서 취약 함수로 이어지는 호출 경로를 찾아요. GitHub가 관리하는 Actions 워크플로에서 CodeQL이 저장소와 의존성의 호출 그래프를 만들고, 취약 함수를 식별하는 정리된 advisory 데이터를 대조하는 방식이에요.
아래는 설명을 위해 만든 가상 코드예요. 주문 API가 도우미 함수를 거쳐 package.parseUnsafe를 호출한다면 연결된 경로가 생겨요. 반대로 package.formatLabel만 쓰는 코드에는 예시 그래프 안에서 그 경로가 없어요. 실제 패키지의 취약점이나 GitHub 분석 결과를 재현한 화면은 아니지만, 패키지 이름만으로 우선순위를 정하기 어려운 이유는 보여줘요.

네 가지 판정이 서로 다른 이유
Reachable은 취약 함수로 가는 경로를 적어도 하나 찾았다는 뜻이에요. 공격 성공까지 입증한 것은 아니에요. 외부 입력을 받을 수 있는지와 배포 환경에서 실행되는지 같은 맥락은 경로 증거와 함께 읽어야 해요. 화면에 나오는 표본 경로도 최대 다섯 개여서 모든 경로를 나열한 목록은 아니에요.
Potentially reachable은 호출 가능성을 배제하지 못한 상태라 Reachable과 함께 우선 대응해야 해요. Unreachable은 분석이 끝났지만 경로를 찾지 못한 상태이고, Reachability unavailable은 분석 결과 자체를 제공하지 못한 상태예요. 둘을 같은 초록불로 읽으면 안 돼요. 이번 기능은 판정을 붙일 뿐 경고를 자동으로 닫거나 무시 처리하지 않아요.
코드를 고쳐도 판정은 바로 바뀌지 않아요
이 기능에서 놓치기 쉬운 부분은 시간이에요. 활성화하면 첫 스캔을 시작하고, 열린 Dependabot 경고가 있으면 이후 24시간마다 분석해요. 코드 push가 스캔을 즉시 시작하지는 않으며 공개 미리보기에서는 원하는 시점에 수동 스캔을 실행할 수도 없어요.
예를 들어 오늘 주문 처리 경로에서 취약 함수 호출을 제거했더라도, 이전 스캔의 Reachable이 한동안 남을 수 있어요. 반대로 새 호출을 추가한 직후에도 이전 Unreachable이 보일 수 있고요. 아래 가상 경로 출력은 두 경로를 비교하는 교육용 예시예요. 실제 수정 뒤에는 완료된 스캔 시점과 그때 분석한 코드를 함께 보는 편이 정확해요.

어느 저장소에서 시작할 수 있을까요
현재 공개 미리보기는 GitHub Enterprise Cloud와 데이터 레지던시 환경에서 제공해요. JavaScript·TypeScript 저장소에 npm·Yarn·pnpm lockfile과 활성화된 Dependabot alerts가 필요해요. GitHub Code Security 라이선스는 필요 없고 미리보기 분석은 무료이며, 분석에 쓰인 Actions 시간도 청구하지 않아요. 자체 호스팅 러너는 지원하지 않아요.
기능은 기본적으로 꺼져 있어요. 저장소 Settings의 Advanced Security에서 켜거나 조직·기업의 사용자 지정 보안 구성으로 적용할 수 있어요. 큰 모노레포 등은 세 시간 분석 제한이나 리소스 한계로 결과가 unavailable이 될 수 있으니, 심각도·EPSS·실제 운영 노출을 함께 읽어야 해요. 달라지는 건 경고를 없애는 방식보다 먼저 살펴볼 경고를 고르는 근거예요.