MCP Server와 Tool Service가 같은 스택과 같은 MCP SDK를 쓰므로 SBOM을
공통으로 적용한다. 산출물 이름을 AXHUB_MCP_Tool_Service_SBOM으로 바꾸고,
목록이 MCP Server 빌드 하나에서 나왔다는 한계를 함께 적는다. Tool Service가
스택 밖 의존을 추가하면 그 빌드에서 다시 산출해 합쳐야 한다.
JDK 라이선스를 미확정에서 GPL-2.0 with Classpath Exception으로 확정한다.
toolchain에 vendor를 고정하면서 배포판이 정해졌기 때문이다. Classpath
Exception이 있어 이 JDK로 실행하는 애플리케이션에 소스 공개 의무는 없다.
inputSchema 관련 보안 통제 설명은 SBOM의 범위가 아니므로 뺀다. 근거는
ADR-0011과 ADR-0012가 소유한다.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
vendor를 적지 않으면 설치된 아무 JDK 21이나 잡히므로, 표준가이드가 정한
배포판(openjdk21u-jdk_x64_windows_hotspot_21.0.5)과 다른 것으로 조용히
빌드될 수 있다. SBOM의 JDK 항목도 그 전제 위에 있다.
폐쇄망에서는 toolchain 자동 다운로드가 동작하지 않으므로 빌드 머신에
Temurin이 미리 설치되어 있어야 한다.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
build.gradle이 직접 선언한 오픈소스는 mcp-json-jackson2 하나지만, 런타임
전이 의존까지 따라가면 12건이 산출물 classpath에 올라간다. json-schema-validator,
itu, jackson-dataformat-yaml, reactor-core, reactive-streams는 SDK를 넣기
전에는 없던 것들이라 함께 수록한다. 여기에 빌드 환경 2건(JDK 21, Gradle
8.14.3)을 scope optional로 더해 14건이다.
버전과 해시는 Gradle 로컬 캐시의 실제 pom을 따라가 그래프를 만들고 실제 jar
바이너리에서 SHA-512/SHA-1을 계산했다. Gradle 배포본의 SHA-256은 wrapper의
distributionSha256Sum 값이다. 산출 근거와 한계는 docs/sbom/README.md에 있다.
라이선스는 Apache-2.0 9건, MIT 3건, MIT-0 1건, JDK 미확정 1건이다. copyleft가
없어 소스 공개 의무는 없다. JDK는 toolchain이 벤더를 고정하지 않으므로 실제
배포판이 정해지면 라이선스를 확정해야 한다.
optional인 joni/graal-js/graal-sdk(약 50MB), provided인 jakarta.servlet-api,
test scope와 annotationProcessor는 산출물에 포함되지 않아 제외했다. 제외 사유는
Exclusions 시트에 있다.
확인이 남은 항목은 jackson-databind다. SDK가 요청한 2.20.1이
io.spring.dependency-management에 의해 Spring Boot 3.5.11의 2.19.4로 내려간다.
sandbox에서 gradle daemon이 뜨지 않아 gradlew dependencies로 대조하지 못했으므로
빌드 환경에서 한 번 확인해야 한다.
xlsx가 줄바꿈 정규화 대상이 되지 않도록 .gitattributes에 binary로 명시한다.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>