Files
dap-was-dapms/docs/sbom
koseokmin 7afb4d9e05 toolchain을 Eclipse Temurin으로 고정한다
vendor를 적지 않으면 설치된 아무 JDK 21이나 잡히므로, 표준가이드가 정한
배포판(openjdk21u-jdk_x64_windows_hotspot_21.0.5)과 다른 것으로 조용히
빌드될 수 있다. SBOM의 JDK 항목도 그 전제 위에 있다.

폐쇄망에서는 toolchain 자동 다운로드가 동작하지 않으므로 빌드 머신에
Temurin이 미리 설치되어 있어야 한다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 23:31:40 +09:00
..

SBOM — AXHUB MCP&Tool Service

  • 산출물: AXHUB_MCP_Tool_Service_SBOM_CycloneDX1.5.json (CycloneDX 1.5 정본), AXHUB_MCP_Tool_Service_SBOM_CycloneDX1.5.xlsx (검토용)
  • 대상: AXHUB MCP Server와 Tool Service의 공통 스택 (Java 21 / Spring Boot 3.5.11)
  • 산출 기준 빌드: ax-hub-mcp-server@0.1.0
  • 생성 기준일: 2026-08-18

대상 범위

MCP Server와 Tool Service는 같은 기술 스택과 같은 MCP SDK를 쓰므로 이 SBOM을 공통으로 적용한다. build.gradle이 직접 선언한 오픈소스는 io.modelcontextprotocol.sdk:mcp-json-jackson2:2.0.0 하나이며, 이 SBOM은 그 런타임 전이 의존 전체빌드 환경을 담는다. Spring Boot starter 계열(web / validation / data-redis / actuator)은 glow f/w가 제공하는 플랫폼 구성이라 범위 밖이다.

다만 목록은 MCP Server 빌드(ax-hub-mcp-server@0.1.0) 하나에서 산출했다. Tool Service가 이 스택 밖의 의존(예: DB 드라이버, 연계 라이브러리)을 추가하면 그만큼은 이 SBOM에 없으므로, 해당 빌드에서 다시 산출해 합쳐야 한다.

구분 개수 내용
런타임 의존성 (scope: required) 12 실행 산출물 classpath에 올라가는 라이브러리
빌드 환경 (scope: optional) 2 JDK 21, Gradle 8.14.3
합계 14

라이선스는 Apache-2.0 9건, MIT 3건, MIT-0 1건, 미확정 1건(JDK)이다. copyleft는 0건이라 소스 공개 의무가 없다. JDK는 toolchain이 languageVersion = 21만 고정하고 벤더를 지정하지 않으므로, 실제 배포판이 정해지면 라이선스를 확정해 기재한다.

제외 항목

제외 항목과 사유는 엑셀 Exclusions 시트가 정본이다. 요약하면 다음과 같다.

  • test scope와 annotationProcessor — 선언 4건. 산출물에 포함되지 않는다.
    • spring-boot-starter-test, com.squareup.okhttp3:mockwebserver:4.12.0, org.junit.platform:junit-platform-launcher (test scope)
    • org.springframework.boot:spring-boot-configuration-processor (annotationProcessor)
  • joni, graal-js, graal-sdk — json-schema-validator의 optional. ECMA262 정규식 검증을 쓰지 않아 해석되지 않으므로 약 50MB가 빠진다.
  • jakarta.servlet-api:6.1.0 — mcp-core의 provided. 산출물에 포함되지 않고 서블릿 컨테이너가 제공한다.
  • mcp:2.0.0(aggregate), mcp-json-jackson3:2.0.0 — Jackson 3 경로를 쓰지 않아 선언하지 않는다. 자세한 배경은 mcp-java-sdk-adoption.md 참고.

산출 방법과 한계

버전과 해시는 build.gradle 선언에서 출발해 Gradle 로컬 캐시의 실제 pom을 따라가 그래프를 만들고, 캐시된 실제 jar 바이너리에서 SHA-512 / SHA-1을 직접 계산했다. Gradle 배포본의 SHA-256은 wrapper의 distributionSha256Sum 값을 그대로 옮겼다.

gradlew dependencies로 해석 결과를 대조하려 했으나 sandbox에서 gradle daemon이 뜨지 않아 (Unable to establish loopback connection) 실행하지 못했다. 따라서 다음 버전 정렬은 pom과 Spring Boot BOM 판독에 근거한 것이며, 빌드 환경에서 한 번 확인해야 한다.

./gradlew dependencies --configuration runtimeClasspath
컴포넌트 pom 요청 버전 수록 버전 근거
jackson-databind 2.20.1 (mcp-json-jackson2) 2.19.4 Spring Boot 3.5.11 → jackson-bom 2.19.4
jackson-databind 2.18.3 (json-schema-validator) 2.19.4 위와 동일
reactor-core 3.7.0 (mcp-core) 3.7.16 Spring Boot 3.5.11 → reactor-bom 2024.0.15
slf4j-api 2.0.16 (mcp-core) 2.0.17 Spring Boot 3.5.11 관리 버전

가장 확인이 필요한 항목은 jackson-databind다. SDK가 요청한 2.20.1이 io.spring.dependency-management에 의해 2.19.4로 내려가므로, initialize / tools/list / tools/call 직렬화 계약 테스트로 동작을 확인한다.

CycloneDX 1.5 공식 JSON Schema 원본 대조는 폐쇄망이라 수행하지 않았다. 대신 생성 시점에 dependencies의 모든 ref / dependsOn이 실재하는 bom-ref를 가리키는지, 컴포넌트가 빠짐없이 dependencies에 등장하는지 구조 점검을 통과시켰다.