MCP Java SDK 2.0.0의 SBOM을 CycloneDX 1.5로 추가한다
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>
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -20,5 +20,6 @@ gradlew text eol=lf
|
||||
*.jpg binary
|
||||
*.pdf binary
|
||||
*.pptx binary
|
||||
*.xlsx binary
|
||||
*.p12 binary
|
||||
*.jks binary
|
||||
|
||||
708
docs/sbom/AXHUB_MCP_Server_SBOM_CycloneDX1.5.json
Normal file
708
docs/sbom/AXHUB_MCP_Server_SBOM_CycloneDX1.5.json
Normal file
@@ -0,0 +1,708 @@
|
||||
{
|
||||
"bomFormat": "CycloneDX",
|
||||
"specVersion": "1.5",
|
||||
"serialNumber": "urn:uuid:dd2dbf54-3ff5-57b2-bc28-765721359457",
|
||||
"version": 1,
|
||||
"metadata": {
|
||||
"timestamp": "2026-08-18T00:00:00Z",
|
||||
"component": {
|
||||
"type": "application",
|
||||
"bom-ref": "pkg:maven/io.shinhanlife.dap.biz.mcp/ax-hub-mcp-server@0.1.0",
|
||||
"group": "io.shinhanlife.dap.biz.mcp",
|
||||
"name": "ax-hub-mcp-server",
|
||||
"version": "0.1.0",
|
||||
"description": "AX HUB MCP Server (Spring Boot 3.5.11 / Java 21)",
|
||||
"purl": "pkg:maven/io.shinhanlife.dap.biz.mcp/ax-hub-mcp-server@0.1.0"
|
||||
},
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:scope",
|
||||
"value": "MCP Java SDK 2.0.0과 그 런타임 전이 의존, 그리고 빌드 환경"
|
||||
},
|
||||
{
|
||||
"name": "axhub:source",
|
||||
"value": "build.gradle + Gradle 로컬 캐시의 실제 pom/jar 판독"
|
||||
}
|
||||
]
|
||||
},
|
||||
"components": [
|
||||
{
|
||||
"type": "library",
|
||||
"bom-ref": "pkg:maven/io.modelcontextprotocol.sdk/mcp-json-jackson2@2.0.0",
|
||||
"name": "mcp-json-jackson2",
|
||||
"version": "2.0.0",
|
||||
"publisher": "Anthropic",
|
||||
"description": "MCP JSON 직렬화 · JSON Schema 2020-12 검증 구현체",
|
||||
"scope": "required",
|
||||
"purl": "pkg:maven/io.modelcontextprotocol.sdk/mcp-json-jackson2@2.0.0",
|
||||
"group": "io.modelcontextprotocol.sdk",
|
||||
"hashes": [
|
||||
{
|
||||
"alg": "SHA-1",
|
||||
"content": "2f9b7d72acb74d854589b7f22477aaaef4d84083"
|
||||
},
|
||||
{
|
||||
"alg": "SHA-512",
|
||||
"content": "58951bd4b1c5a385af5b146b5582bc457475e2933a220d2fd63c1aed4435d1fc6f585b068dc752170d58890bd4036947c82afa8686f872560c2d148d270654fe"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"license": {
|
||||
"id": "MIT",
|
||||
"url": "https://opensource.org/licenses/MIT"
|
||||
}
|
||||
}
|
||||
],
|
||||
"externalReferences": [
|
||||
{
|
||||
"type": "website",
|
||||
"url": "https://github.com/modelcontextprotocol/java-sdk"
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:dependencyPath",
|
||||
"value": "직접 선언 (build.gradle implementation)"
|
||||
},
|
||||
{
|
||||
"name": "axhub:note",
|
||||
"value": "이 SBOM의 유일한 직접 선언 오픈소스"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "library",
|
||||
"bom-ref": "pkg:maven/io.modelcontextprotocol.sdk/mcp-core@2.0.0",
|
||||
"name": "mcp-core",
|
||||
"version": "2.0.0",
|
||||
"publisher": "Anthropic",
|
||||
"description": "MCP 표준 프로토콜 모델(McpSchema) · JSON-RPC 상수",
|
||||
"scope": "required",
|
||||
"purl": "pkg:maven/io.modelcontextprotocol.sdk/mcp-core@2.0.0",
|
||||
"group": "io.modelcontextprotocol.sdk",
|
||||
"hashes": [
|
||||
{
|
||||
"alg": "SHA-1",
|
||||
"content": "fd49feda3b9e6914a46a56ccd4a8f70e35156898"
|
||||
},
|
||||
{
|
||||
"alg": "SHA-512",
|
||||
"content": "44dcf26bddfaa4757d7b2d765cd48745a0130fbc074ebb59565a03f66c92f387073d109c54fe62e1a68f3df71629928df973f6adc8abe75d4f5cf76b1d1f6f0b"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"license": {
|
||||
"id": "MIT",
|
||||
"url": "https://opensource.org/licenses/MIT"
|
||||
}
|
||||
}
|
||||
],
|
||||
"externalReferences": [
|
||||
{
|
||||
"type": "website",
|
||||
"url": "https://github.com/modelcontextprotocol/java-sdk"
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:dependencyPath",
|
||||
"value": "전이 ← mcp-json-jackson2"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "library",
|
||||
"bom-ref": "pkg:maven/com.networknt/json-schema-validator@2.0.0",
|
||||
"name": "json-schema-validator",
|
||||
"version": "2.0.0",
|
||||
"publisher": "Network New Technologies Inc.",
|
||||
"description": "JSON Schema draft 2020-12 검증 엔진 (Tool inputSchema 검증)",
|
||||
"scope": "required",
|
||||
"purl": "pkg:maven/com.networknt/json-schema-validator@2.0.0",
|
||||
"group": "com.networknt",
|
||||
"hashes": [
|
||||
{
|
||||
"alg": "SHA-1",
|
||||
"content": "bc7c4ddf322d1295e3c296f28a9966590e6dea20"
|
||||
},
|
||||
{
|
||||
"alg": "SHA-512",
|
||||
"content": "bc033e50c66e72ad89df6442532b614fc984386aad2da68daaa098d81ac5a4a82933d0783d3f1a0ed5fe80e3bca6091d72acf5d7dcadcb50c3153100edcf334b"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"license": {
|
||||
"id": "Apache-2.0",
|
||||
"url": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"externalReferences": [
|
||||
{
|
||||
"type": "website",
|
||||
"url": "https://github.com/networknt/json-schema-validator"
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:dependencyPath",
|
||||
"value": "전이 ← mcp-json-jackson2"
|
||||
},
|
||||
{
|
||||
"name": "axhub:note",
|
||||
"value": "문서 밖 $ref 조회는 ToolSchemaReferencePolicy가 차단(ADR-0011). joni·graal-js 미해석으로 pattern 검증이 java.util.regex(백트래킹)로 처리되어, ToolSchemaPatternPolicy가 반복 구조·수량자 개수·maxLength를 제한하고 patternProperties를 금지한다(ADR-0012). 둘 다 ToolMetadata 생성 시점 검사"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "library",
|
||||
"bom-ref": "pkg:maven/com.ethlo.time/itu@1.14.0",
|
||||
"name": "itu",
|
||||
"version": "1.14.0",
|
||||
"publisher": "ethlo (Morten Haraldsen)",
|
||||
"description": "RFC 3339 date/date-time 파싱 — json-schema-validator의 format 구현용",
|
||||
"scope": "required",
|
||||
"purl": "pkg:maven/com.ethlo.time/itu@1.14.0",
|
||||
"group": "com.ethlo.time",
|
||||
"hashes": [
|
||||
{
|
||||
"alg": "SHA-1",
|
||||
"content": "c0f9f9d4f4404787e992ab3af5ae95f2fad79e47"
|
||||
},
|
||||
{
|
||||
"alg": "SHA-512",
|
||||
"content": "aa69a6af3a7123eb41425bbaf6834e16dc3323172709e2338b8a21b970fd21333d996515f42da4aa0225251e30542ad7d9c8332bdf7d62ed96b42fadc8a1520d"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"license": {
|
||||
"id": "Apache-2.0",
|
||||
"url": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"externalReferences": [
|
||||
{
|
||||
"type": "website",
|
||||
"url": "https://github.com/ethlo/itu"
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:dependencyPath",
|
||||
"value": "전이 ← json-schema-validator"
|
||||
},
|
||||
{
|
||||
"name": "axhub:note",
|
||||
"value": "SDK 검증기가 format을 단언하지 않아 런타임에 호출되지 않는다. classpath에는 포함되므로 수록"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "library",
|
||||
"bom-ref": "pkg:maven/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml@2.19.4",
|
||||
"name": "jackson-dataformat-yaml",
|
||||
"version": "2.19.4",
|
||||
"publisher": "FasterXML, LLC",
|
||||
"description": "YAML 형식 schema 로딩 (validator 부가 기능)",
|
||||
"scope": "required",
|
||||
"purl": "pkg:maven/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml@2.19.4",
|
||||
"group": "com.fasterxml.jackson.dataformat",
|
||||
"hashes": [
|
||||
{
|
||||
"alg": "SHA-1",
|
||||
"content": "500956daea0869bf753b94fdaa77e5dc99847d79"
|
||||
},
|
||||
{
|
||||
"alg": "SHA-512",
|
||||
"content": "42cf2edacf2dea3c0616991a9a945c6e3e44dcb719918e76e6babae55601454397a1667bf75b7d55c74f96a7da7c0d9f60a0f4be60f84fd405fa31eb144f9b92"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"license": {
|
||||
"id": "Apache-2.0",
|
||||
"url": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"externalReferences": [
|
||||
{
|
||||
"type": "website",
|
||||
"url": "https://github.com/FasterXML/jackson-dataformats-text"
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:dependencyPath",
|
||||
"value": "전이 ← json-schema-validator"
|
||||
},
|
||||
{
|
||||
"name": "axhub:note",
|
||||
"value": "Spring Boot 3.5.11 BOM이 2.19.4로 정렬"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "library",
|
||||
"bom-ref": "pkg:maven/io.projectreactor/reactor-core@3.7.16",
|
||||
"name": "reactor-core",
|
||||
"version": "3.7.16",
|
||||
"publisher": "VMware (Project Reactor)",
|
||||
"description": "mcp-core가 참조하는 리액티브 타입 제공",
|
||||
"scope": "required",
|
||||
"purl": "pkg:maven/io.projectreactor/reactor-core@3.7.16",
|
||||
"group": "io.projectreactor",
|
||||
"hashes": [
|
||||
{
|
||||
"alg": "SHA-1",
|
||||
"content": "dc7f2ba3c4fbc69678937dfe1ad45264d8a1c7be"
|
||||
},
|
||||
{
|
||||
"alg": "SHA-512",
|
||||
"content": "f0313eedd03acee06e7e38a915ecb8060d6996ffafbd05afeff4c7cdeb239e022b65f8f721290e228d5c30180d069a417cb40c3f782b643508fa0b64d11de10f"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"license": {
|
||||
"id": "Apache-2.0",
|
||||
"url": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"externalReferences": [
|
||||
{
|
||||
"type": "website",
|
||||
"url": "https://github.com/reactor/reactor-core"
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:dependencyPath",
|
||||
"value": "전이 ← mcp-core"
|
||||
},
|
||||
{
|
||||
"name": "axhub:note",
|
||||
"value": "pom 요청 3.7.0 → reactor-bom 2024.0.15의 3.7.16"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "library",
|
||||
"bom-ref": "pkg:maven/org.reactivestreams/reactive-streams@1.0.4",
|
||||
"name": "reactive-streams",
|
||||
"version": "1.0.4",
|
||||
"publisher": "Reactive Streams SIG",
|
||||
"description": "리액티브 스트림 표준 인터페이스",
|
||||
"scope": "required",
|
||||
"purl": "pkg:maven/org.reactivestreams/reactive-streams@1.0.4",
|
||||
"group": "org.reactivestreams",
|
||||
"hashes": [
|
||||
{
|
||||
"alg": "SHA-1",
|
||||
"content": "3864a1320d97d7b045f729a326e1e077661f31b7"
|
||||
},
|
||||
{
|
||||
"alg": "SHA-512",
|
||||
"content": "cdab6bd156f39106cd6bbfd47df1f4b0a89dc4aa28c68c31ef12a463193c688897e415f01b8d7f0d487b0e6b5bd2f19044bf8605704b024f26d6aa1f4f9a2471"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"license": {
|
||||
"id": "MIT-0",
|
||||
"url": "https://spdx.org/licenses/MIT-0.html"
|
||||
}
|
||||
}
|
||||
],
|
||||
"externalReferences": [
|
||||
{
|
||||
"type": "website",
|
||||
"url": "http://www.reactive-streams.org/"
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:dependencyPath",
|
||||
"value": "전이 ← reactor-core"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "library",
|
||||
"bom-ref": "pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.19.4",
|
||||
"name": "jackson-databind",
|
||||
"version": "2.19.4",
|
||||
"publisher": "FasterXML, LLC",
|
||||
"description": "JSON 데이터 바인딩",
|
||||
"scope": "required",
|
||||
"purl": "pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.19.4",
|
||||
"group": "com.fasterxml.jackson.core",
|
||||
"hashes": [
|
||||
{
|
||||
"alg": "SHA-1",
|
||||
"content": "7a39bf9257b726b90b80f27fa3f5174bc75162a5"
|
||||
},
|
||||
{
|
||||
"alg": "SHA-512",
|
||||
"content": "02a80c97ea12874f66802cb2c8909e5358639b41050bd04da495c0ee8db496a0d9d609a3c62a1dca7cbd89681bf340d6f6dbc507d4f21602aa1a7f31b2285ba8"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"license": {
|
||||
"id": "Apache-2.0",
|
||||
"url": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"externalReferences": [
|
||||
{
|
||||
"type": "website",
|
||||
"url": "https://github.com/FasterXML/jackson-databind"
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:dependencyPath",
|
||||
"value": "전이 ← mcp-json-jackson2, json-schema-validator"
|
||||
},
|
||||
{
|
||||
"name": "axhub:note",
|
||||
"value": "pom 요청 2.20.1 / 2.18.3 → Spring Boot 3.5.11 BOM의 2.19.4로 정렬"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "library",
|
||||
"bom-ref": "pkg:maven/com.fasterxml.jackson.core/jackson-core@2.19.4",
|
||||
"name": "jackson-core",
|
||||
"version": "2.19.4",
|
||||
"publisher": "FasterXML, LLC",
|
||||
"description": "JSON 스트리밍 파서/생성기",
|
||||
"scope": "required",
|
||||
"purl": "pkg:maven/com.fasterxml.jackson.core/jackson-core@2.19.4",
|
||||
"group": "com.fasterxml.jackson.core",
|
||||
"hashes": [
|
||||
{
|
||||
"alg": "SHA-1",
|
||||
"content": "a720ca9b800742699e041c3890f3731fe516085e"
|
||||
},
|
||||
{
|
||||
"alg": "SHA-512",
|
||||
"content": "987de559d452fb78557c038a02289454cf1354985bdb79df1087c5bc33db35c9510ee6c1c1dd3816e220a86a35d19820a8c32176a7d4fc4e5d3c7e65df5536d4"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"license": {
|
||||
"id": "Apache-2.0",
|
||||
"url": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"externalReferences": [
|
||||
{
|
||||
"type": "website",
|
||||
"url": "https://github.com/FasterXML/jackson-core"
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:dependencyPath",
|
||||
"value": "전이 ← jackson-databind"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "library",
|
||||
"bom-ref": "pkg:maven/com.fasterxml.jackson.core/jackson-annotations@2.19.4",
|
||||
"name": "jackson-annotations",
|
||||
"version": "2.19.4",
|
||||
"publisher": "FasterXML, LLC",
|
||||
"description": "JSON 바인딩 애노테이션",
|
||||
"scope": "required",
|
||||
"purl": "pkg:maven/com.fasterxml.jackson.core/jackson-annotations@2.19.4",
|
||||
"group": "com.fasterxml.jackson.core",
|
||||
"hashes": [
|
||||
{
|
||||
"alg": "SHA-1",
|
||||
"content": "bbb09b1e7f7f5108890270eb701cb3ddef991c05"
|
||||
},
|
||||
{
|
||||
"alg": "SHA-512",
|
||||
"content": "22a2ce8150c380b9dc00bfbdd026f26e626f483e8ceebfbb2087e9abd63462781daf4e18ca09543a7d0eb7b5c5625f02332d3251e29c2abc6016d69a7194a565"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"license": {
|
||||
"id": "Apache-2.0",
|
||||
"url": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"externalReferences": [
|
||||
{
|
||||
"type": "website",
|
||||
"url": "https://github.com/FasterXML/jackson-annotations"
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:dependencyPath",
|
||||
"value": "전이 ← mcp-core, jackson-databind"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "library",
|
||||
"bom-ref": "pkg:maven/org.slf4j/slf4j-api@2.0.17",
|
||||
"name": "slf4j-api",
|
||||
"version": "2.0.17",
|
||||
"publisher": "QOS.ch",
|
||||
"description": "로깅 파사드",
|
||||
"scope": "required",
|
||||
"purl": "pkg:maven/org.slf4j/slf4j-api@2.0.17",
|
||||
"group": "org.slf4j",
|
||||
"hashes": [
|
||||
{
|
||||
"alg": "SHA-1",
|
||||
"content": "d9e58ac9c7779ba3bf8142aff6c830617a7fe60f"
|
||||
},
|
||||
{
|
||||
"alg": "SHA-512",
|
||||
"content": "9a3e79db6666a6096a3021bb2e1d918f30f589d8de51d6b600f8ebd92515a510ae2d8f87919cc2dfa8365d64f10194cac8dfa0fb950160eef0e9da06f6caaeb9"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"license": {
|
||||
"id": "MIT",
|
||||
"url": "https://opensource.org/licenses/MIT"
|
||||
}
|
||||
}
|
||||
],
|
||||
"externalReferences": [
|
||||
{
|
||||
"type": "website",
|
||||
"url": "https://www.slf4j.org/"
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:dependencyPath",
|
||||
"value": "전이 ← mcp-core, json-schema-validator"
|
||||
},
|
||||
{
|
||||
"name": "axhub:note",
|
||||
"value": "pom 요청 2.0.16 → Spring Boot 3.5.11 BOM의 2.0.17로 정렬"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "library",
|
||||
"bom-ref": "pkg:maven/org.yaml/snakeyaml@2.4",
|
||||
"name": "snakeyaml",
|
||||
"version": "2.4",
|
||||
"publisher": "SnakeYAML",
|
||||
"description": "YAML 파서 (jackson-dataformat-yaml 백엔드)",
|
||||
"scope": "required",
|
||||
"purl": "pkg:maven/org.yaml/snakeyaml@2.4",
|
||||
"group": "org.yaml",
|
||||
"hashes": [
|
||||
{
|
||||
"alg": "SHA-1",
|
||||
"content": "e0666b825b796f85521f02360e77f4c92c5a7a07"
|
||||
},
|
||||
{
|
||||
"alg": "SHA-512",
|
||||
"content": "1573717e2c47868515cbed5265a6f77ebec23a0b5c6376ac18b9f5c2335beb65d4c68d2073d50143d59a60141980be8db1e493a85d7c78106cdb94a52e8361d2"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"license": {
|
||||
"id": "Apache-2.0",
|
||||
"url": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"externalReferences": [
|
||||
{
|
||||
"type": "website",
|
||||
"url": "https://bitbucket.org/snakeyaml/snakeyaml"
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:dependencyPath",
|
||||
"value": "전이 ← jackson-dataformat-yaml"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "platform",
|
||||
"bom-ref": "pkg:generic/jdk@21",
|
||||
"name": "jdk",
|
||||
"version": "21",
|
||||
"publisher": "미지정 (toolchain languageVersion=21)",
|
||||
"description": "언어/실행 환경 — Java 21 toolchain",
|
||||
"scope": "optional",
|
||||
"purl": "pkg:generic/jdk@21",
|
||||
"licenses": [
|
||||
{
|
||||
"license": {
|
||||
"name": "벤더별 상이 (GPL-2.0-with-classpath-exception 등)"
|
||||
}
|
||||
}
|
||||
],
|
||||
"externalReferences": [
|
||||
{
|
||||
"type": "website",
|
||||
"url": "https://openjdk.org/projects/jdk/21/"
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:dependencyPath",
|
||||
"value": "build.gradle java.toolchain"
|
||||
},
|
||||
{
|
||||
"name": "axhub:note",
|
||||
"value": "벤더가 고정돼 있지 않아 라이선스는 실제 배포판 확정 후 기재"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "application",
|
||||
"bom-ref": "pkg:generic/gradle@8.14.3",
|
||||
"name": "gradle",
|
||||
"version": "8.14.3",
|
||||
"publisher": "Gradle Inc.",
|
||||
"description": "빌드 도구 (gradle wrapper 고정)",
|
||||
"scope": "optional",
|
||||
"purl": "pkg:generic/gradle@8.14.3",
|
||||
"hashes": [
|
||||
{
|
||||
"alg": "SHA-256",
|
||||
"content": "bd71102213493060956ec229d946beee57158dbd89d0e62b91bca0fa2c5f3531"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"license": {
|
||||
"id": "Apache-2.0",
|
||||
"url": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
}
|
||||
}
|
||||
],
|
||||
"externalReferences": [
|
||||
{
|
||||
"type": "website",
|
||||
"url": "https://gradle.org/"
|
||||
}
|
||||
],
|
||||
"properties": [
|
||||
{
|
||||
"name": "axhub:dependencyPath",
|
||||
"value": "gradle/wrapper/gradle-wrapper.properties"
|
||||
},
|
||||
{
|
||||
"name": "axhub:note",
|
||||
"value": "SHA-256은 wrapper의 distributionSha256Sum 값"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"dependencies": [
|
||||
{
|
||||
"ref": "pkg:maven/io.shinhanlife.dap.biz.mcp/ax-hub-mcp-server@0.1.0",
|
||||
"dependsOn": [
|
||||
"pkg:maven/io.modelcontextprotocol.sdk/mcp-json-jackson2@2.0.0"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ref": "pkg:maven/io.modelcontextprotocol.sdk/mcp-json-jackson2@2.0.0",
|
||||
"dependsOn": [
|
||||
"pkg:maven/io.modelcontextprotocol.sdk/mcp-core@2.0.0",
|
||||
"pkg:maven/com.networknt/json-schema-validator@2.0.0",
|
||||
"pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.19.4"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ref": "pkg:maven/io.modelcontextprotocol.sdk/mcp-core@2.0.0",
|
||||
"dependsOn": [
|
||||
"pkg:maven/io.projectreactor/reactor-core@3.7.16",
|
||||
"pkg:maven/com.fasterxml.jackson.core/jackson-annotations@2.19.4",
|
||||
"pkg:maven/org.slf4j/slf4j-api@2.0.17"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ref": "pkg:maven/com.networknt/json-schema-validator@2.0.0",
|
||||
"dependsOn": [
|
||||
"pkg:maven/com.ethlo.time/itu@1.14.0",
|
||||
"pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.19.4",
|
||||
"pkg:maven/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml@2.19.4",
|
||||
"pkg:maven/org.slf4j/slf4j-api@2.0.17"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ref": "pkg:maven/com.ethlo.time/itu@1.14.0",
|
||||
"dependsOn": []
|
||||
},
|
||||
{
|
||||
"ref": "pkg:maven/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml@2.19.4",
|
||||
"dependsOn": [
|
||||
"pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.19.4",
|
||||
"pkg:maven/org.yaml/snakeyaml@2.4"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ref": "pkg:maven/io.projectreactor/reactor-core@3.7.16",
|
||||
"dependsOn": [
|
||||
"pkg:maven/org.reactivestreams/reactive-streams@1.0.4"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ref": "pkg:maven/org.reactivestreams/reactive-streams@1.0.4",
|
||||
"dependsOn": []
|
||||
},
|
||||
{
|
||||
"ref": "pkg:maven/com.fasterxml.jackson.core/jackson-databind@2.19.4",
|
||||
"dependsOn": [
|
||||
"pkg:maven/com.fasterxml.jackson.core/jackson-core@2.19.4",
|
||||
"pkg:maven/com.fasterxml.jackson.core/jackson-annotations@2.19.4"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ref": "pkg:maven/com.fasterxml.jackson.core/jackson-core@2.19.4",
|
||||
"dependsOn": []
|
||||
},
|
||||
{
|
||||
"ref": "pkg:maven/com.fasterxml.jackson.core/jackson-annotations@2.19.4",
|
||||
"dependsOn": []
|
||||
},
|
||||
{
|
||||
"ref": "pkg:maven/org.slf4j/slf4j-api@2.0.17",
|
||||
"dependsOn": []
|
||||
},
|
||||
{
|
||||
"ref": "pkg:maven/org.yaml/snakeyaml@2.4",
|
||||
"dependsOn": []
|
||||
},
|
||||
{
|
||||
"ref": "pkg:generic/jdk@21",
|
||||
"dependsOn": []
|
||||
},
|
||||
{
|
||||
"ref": "pkg:generic/gradle@8.14.3",
|
||||
"dependsOn": []
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
docs/sbom/AXHUB_MCP_Server_SBOM_CycloneDX1.5.xlsx
Normal file
BIN
docs/sbom/AXHUB_MCP_Server_SBOM_CycloneDX1.5.xlsx
Normal file
Binary file not shown.
88
docs/sbom/README.md
Normal file
88
docs/sbom/README.md
Normal file
@@ -0,0 +1,88 @@
|
||||
# SBOM — AX HUB MCP Server
|
||||
|
||||
- 산출물: `AXHUB_MCP_Server_SBOM_CycloneDX1.5.json` (CycloneDX 1.5 정본), `AXHUB_MCP_Server_SBOM_CycloneDX1.5.xlsx` (검토용)
|
||||
- 대상: `ax-hub-mcp-server@0.1.0` (Java 21 / Spring Boot 3.5.11)
|
||||
- 생성 기준일: 2026-08-18
|
||||
|
||||
## 대상 범위
|
||||
|
||||
`build.gradle`이 직접 선언한 오픈소스는 `io.modelcontextprotocol.sdk:mcp-json-jackson2:2.0.0`
|
||||
하나이며, 이 SBOM은 그 **런타임 전이 의존 전체**와 **빌드 환경**을 담는다. Spring Boot starter
|
||||
계열(web / validation / data-redis / actuator)은 glow f/w가 제공하는 플랫폼 구성이라 범위 밖이다.
|
||||
|
||||
| 구분 | 개수 | 내용 |
|
||||
|---|---|---|
|
||||
| 런타임 의존성 (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`만 고정하고 벤더를 지정하지 않으므로,
|
||||
실제 배포판이 정해지면 라이선스를 확정해 기재한다.
|
||||
|
||||
## 빌드 환경(scope: optional)과 제외 devDependencies의 차이
|
||||
|
||||
둘은 다르다. 혼동하지 않도록 구분해 둔다.
|
||||
|
||||
- **빌드 환경 (scope: optional)** — BOM에 **수록한다**. JDK 21, Gradle 8.14.3처럼 빌드에 필요하지만
|
||||
실행 산출물에는 들어가지 않는 것들이다.
|
||||
- **제외 devDependencies** — BOM에 **수록하지 않는다**. Java에서는 `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)
|
||||
|
||||
나머지 제외 항목과 사유는 엑셀 `Exclusions` 시트에 있다. 핵심은 세 가지다.
|
||||
|
||||
- `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](../mcp-java-sdk-adoption.md) 참고.
|
||||
|
||||
## 적용된 보안 통제
|
||||
|
||||
`com.networknt:json-schema-validator`는 schema의 `$ref`가 문서 밖을 가리키면 그 주소로 직접 조회를
|
||||
시도한다. `inputSchema`는 Tool Service 매니페스트에서 오므로, 통제가 없으면 매니페스트가 서버의
|
||||
outbound 호출 대상을 정하게 된다.
|
||||
|
||||
`ToolSchemaReferencePolicy`가 `ToolMetadata` 생성 시점에 문서 밖 `$ref`·`$dynamicRef`와 2020-12가 아닌
|
||||
`$schema`를 거부한다. 근거와 검토한 대안은
|
||||
[ADR-0011](../decisions/ADR-0011-tool-input-schema-stays-in-document.md)에 있다.
|
||||
|
||||
정규식도 같은 자리에서 막는다. optional인 `joni`·`graal-js`를 해석하지 않아 `pattern` 검증이 JDK 정규식
|
||||
엔진으로 처리되고 백트래킹 폭증이 가능하므로, `ToolSchemaPatternPolicy`가 반복 구조와 수량자 개수, 정규식
|
||||
길이를 제한하고 `pattern` 필드에 `maxLength`(≤256) 동반 선언을 요구한다. key 길이를 묶을 자리가 없는
|
||||
`patternProperties`는 사용을 금지한다. 규칙은 JDK 21 실측에 근거하며 근거와 한계는
|
||||
[ADR-0012](../decisions/ADR-0012-tool-input-schema-pattern-budget.md)에 있다.
|
||||
|
||||
남은 위험은 문자 집합이 겹치면서 무한 수량자가 3개 이하인 정규식이다. 이 조합은 통과하며 `maxLength`가
|
||||
256이면 수백 ms가 걸릴 수 있다. 두 통제는 위험을 없애지 않고 측정된 폭증 구간 밖으로 옮긴다.
|
||||
|
||||
## 산출 방법과 한계
|
||||
|
||||
버전과 해시는 `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 판독에 근거한 것이며, 빌드 환경에서 한 번 확인해야 한다.
|
||||
|
||||
```bash
|
||||
./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`에 등장하는지 구조 점검을 통과시켰다.
|
||||
Reference in New Issue
Block a user