SBOM 내보내기, 이제 시간 제한 없이!
기존 SBOM(Software Bill of Materials) 내보내기 기능은 10초의 하드코딩된 타임아웃(Hard-coded Timeout)으로 인해 대규모 저장소에서 실패 가능성(Failure Probability)이 높았음
새로운 UI 및 API 엔드포인트(API Endpoints)를 통해 비동기 방식(Asynchronous Operation)으로 SBOM 생성을 지원하며, 타임아웃 문제를 해결함
API는 `/generate-report`로 요청을 시작하고, `/fetch-report`로 완료 여부를 확인하는 방식으로, HTTP 리다이렉션(HTTP Redirection)을 통해 SBOM을 다운로드함
비동기 SBOM 생성 아키텍처
본문에 따르면 기존 동기 방식의 SBOM 생성은 단일 작업자(Single Worker)에 의존하여 대규모 저장소에서 타임아웃(Timeout) 문제를 야기했다. 새로운 비동기 방식은 작업 큐(Job Queue)를 활용하여 백그라운드에서 SBOM 생성을 처리한다.
`/generate-report` API: 요청을 받아 고유 식별자(Unique Identifier)를 반환하고, 작업 시작을 알림
`/fetch-report/{sbom-uuid}` API: SBOM 생성 완료 시 302 리다이렉션(Redirection)을 통해 SBOM 파일 다운로드
장점: 응답 시간(Response Time) 단축 및 사용자 경험(User Experience) 개선
이러한 비동기 아키텍처는 대규모 데이터 처리(Large-scale Data Processing)에 효과적이며, 시스템의 안정성(Stability) 및 확장성(Scalability)을 향상시킨다.
API 엔드포인트(API Endpoint) 상세 분석
새로운 API 엔드포인트는 두 단계로 구성되어, SBOM 생성 과정을 세분화한다.
`GET /repos/{owner}/{repo}/dependency-graph/sbom/generate-report`: 요청 시 202 Accepted 응답과 함께 UUID(Universally Unique Identifier)를 반환하여 작업 상태를 추적
`GET /repos/{owner}/{repo}/dependency-graph/sbom/fetch-report/{sbom-uuid}`: SBOM 생성 완료 전까지 201 Created 응답, 완료 시 302 Found 응답과 함께 SBOM 파일 URL을 반환
익명 사용자(Anonymous User) 제한: 동시 SBOM 요청(Concurrent SBOM Request) 1개로 제한
이러한 설계는 API 응답 시간(API Response Time)을 개선하고, 서버 부하(Server Load)를 분산하는 데 기여한다.
SBOM 생성 시 고려 사항
본문에 따르면 SBOM은 요청 시점의 저장소 상태를 반영하며, HEAD(HEAD) 레퍼런스에 대해서만 생성된다.
HEAD 레퍼런스: 최신 코드(Latest Code)에 대한 SBOM만 제공
익명 사용자 제한: 무분별한 SBOM 생성(SBOM Generation) 방지를 위해 동시 요청 제한
SBOM 생성 시간: 저장소 크기 및 의존성 복잡도에 따라 가변적(Variable)
SBOM 생성 시점의 정확성을 보장하고, 자원 고갈(Resource Exhaustion)을 방지하기 위한 설계로 분석된다.