컴포넌트 인벤토리
프로젝트의 Components 탭은 "이 프로젝트에 무엇이 들어 있는가"에 답합니다. 사이드바의 컴포넌트 항목은 반대 방향에 답합니다. 이 패키지가 조직 어디에 있고, 고치려면 무엇을 건드려야 하는가.
새로운 CVE가 알려지는 순간 바로 필요한 질문입니다. 이 화면이 없으면 프로젝트를 하나씩 열어 확인해야 합니다.
목록 읽기
한 행은 패키지 하나입니다. 버전별도 아니고 프로젝트별도 아닙니다. 아홉 개 프로젝트에서 세 가지 버전으로 쓰이는 라이브러리는 한 행이며, 그 행이 두 종류의 분포를 함께 보여 줍니다.
| 열 | 의미 |
|---|---|
| 패키지 | 이름과 전체 purl. |
| 종류 | 패키지가 속한 생태계(npm, pypi, maven 등). |
| 프로젝트 | 현재 사용 중인 프로젝트 수. 이 화면이 존재하는 이유가 되는 숫자입니다. |
| 사용 중 버전 | 사용 중인 서로 다른 버전을 최대 다섯 개까지 보여 줍니다. 그보다 많으면 몇 개가 더 있는지 함께 표시하며, 왼쪽의 개수는 항상 실제 전체 수입니다. |
| 심각도 | 사용 중인 버전 가운데 가장 높은 CVE 심각도. |
| 취약점 | 사용 중인 모든 버전에 걸친 서로 다른 CVE 수. 같은 CVE가 두 버전에 영향을 주더라도 하나로 셉니다. |
| 라이선스 | 관측된 가장 제한적인 라이선스 분류. 사용 중인 버전 중 하나라도 해당하면 지원 종료·구버전 배지가 함께 붙습니다. |
"사용 중"의 기준
패키지가 프로젝트의 최근 성공한 스캔에 포함되어 있으면 사용 중입니다.
여기서 두 가지가 따라옵니다.
- 스캔이 실패해도 인벤토리가 비지 않습니다. 가장 최근 스캔 시도가 실패했더라도, 그 프로젝트는 마지막으로 성공한 스캔의 패키지를 그대로 반영합니다. 프로젝트 Overview와 빌드 게이트가 따르는 기준과 같습니다.
- 의존성을 제거하면 여기서도 사라집니다. 이후 성공한 스캔이 그 패키지를 더 이상 선언하지 않으면 목록에서 빠집니다. 인벤토리는 지금까지 스캔한 모든 것이 아니라 현재 포트폴리오를 보여 줍니다.
보관된 프로젝트는 제외되며, 소속 팀이 접근할 수 있는 프로젝트만 보입니다.
패키지 찾기
검색창은 패키지 이름 또는 purl을 찾으므로 좌표를 그대로 붙여 넣어도 됩니다. 종류 필터로 생태계를 좁힐 수 있고, 필터 추가를 누르면 위험 축(심각도, 라이선스 분류)과 수명주기 조건(지원 종료만, 구버전만)이 나타납니다. 필요할 때만 꺼내 쓰는 구성입니다.
모든 필터는 URL에 반영되므로 걸러진 화면을 새로 고침하거나 북마크하거나 공유해도 그대로 유지됩니다.
이 화면은 프로젝트별 최근 성공한 스캔만 읽으므로, 몇 릴리스 전에 걷어낸 패키지는 여기서 찾을 수 없습니다. 검색 화면도 같은 최근 스캔 범위를 읽으므로 거기서도 찾을 수 없습니다. 한때 있었 다는 것을 확인하거나 언제 걷어냈는지 보려면 해당 프로젝트를 열어 스캔 이력을 확인하세요.
어느 프로젝트가 쓰는지 보기
행을 클릭하면 사용 중인 프로젝트 패널이 열립니다. 프로젝트와 버전 조합마다 한 줄이며 직접인지 전이인지 표시됩니다. 각 항목은 해당 프로젝트의 Components 탭으로 이미 걸러진 상태로 연결되므로, "어딘가 쓰고 있다"에서 "이 매니페스트 줄이다"까지 두 번의 클릭이면 됩니다.
CVE가 어디까지 영향을 주는지 보기
같은 질문을 취약점 방향에서 묻는 답은 취약점 상세 화면에 있습니다. findings 하나를 열었을 때 그 CVE가 볼 수 있는 다른 프로젝트에도 영향을 준다면 함께 영향받는 프로젝트 구역이 각 프로젝트의 findings 링크와 함께 표시됩니다. 지금 보고 있는 프로젝트에만 해당하면 이 구역은 나타나지 않습니다. 보여 줄 내용이 없기 때문입니다.
동작 확인
- 사이드바의 컴포넌트를 누르면
/components가 열리고 요약 줄에 패키지 개수가 표시됩니다. GET /v1/inventory/components가items,total,limit,offset을 담아 200으로 응답합니다.- 존재하지 않는 컴포넌트 id, 또는 다른 팀만 사용하는 컴포넌트 id를 요청하면 403이 아니라 404가 돌아옵니다. 두 경우를 구분할 수 없게 만든 것은 의도된 설계로, id를 넣어 보는 것만으로는 아무것도 알 수 없게 하기 위해서입니다.
함께 보기
- 컴포넌트와 라이선스 — 같은 데이터를 프로젝트 단위로 보는 화면.
- 취약점 — 한 프로젝트 안에서 findings를 처리하는 방법.