{ "assetKey": "a14-f011-maxarrayelements", "kind": "terminal", "command": "set -e\nset -o pipefail\nW=adapter/inbound/web/src/main/java/dev/caskeleton/adapter/inbound/web\necho \"# 프로파일이 선언하는 세 상한\"\nsed -n '17,19p;26,29p;38,41p' $W/json/WebJsonProfile.java\necho -n \" maxArrayElements() 를 부르는 자리 : \"\n{ grep -rn '\\.maxArrayElements()' --include=*.java . || echo \"(0)\"; }\necho\necho \"# 같은 이름의 필드가 예산 타입에도 있다\"\ngrep -n 'maxArrayElements\\|ABSOLUTE_ARRAY_ELEMENTS_MAX' $W/budget/WebRequestBudget.java\necho \" 프로덕션이 등록하는 값과 그 필드 순서 :\"\nsed -n '24,34p;90,93p' $W/budget/WebRequestBudget.java\necho -n \" 절대 상한을 쓰는 술어를 프로덕션에서 부르는 자리 : \"\n{ grep -rn 'registerOverride\\|withinPlatformMaximum' --include=*.java . | grep -v 'WebRequestBudget.java\\|WebBudgetCatalog.java' \\\n | sed -E 's#^\\./[^:]*/src/([a-zA-Z]+)/[^:]*/([^:/]+):([0-9]+):#\\1 · \\2:\\3 #' | tr '\\n' ' ' || echo \"(0)\"; }\necho\necho \" 그 예산 목록은 프로덕션 자동설정이 만들고, 등록하는 예산은 하나다 :\"\ngrep -rn 'new WebBudgetCatalog()\\|catalog.register(' --include=*.java . \\\n | grep -v '/test/' | grep -v 'GraphQl' | sed -E 's#^\\./[^:]*/([^:/]+):([0-9]+):# \\1:\\2 #'\necho -n \" WebRequestBudget 의 공개 팩토리 : \"\n{ grep -c 'public static WebRequestBudget' $W/budget/WebRequestBudget.java; }\necho\necho \"# 그 예산을 강제하는 필터가 실제로 읽는 필드\"\ngrep -o 'budget\\.[a-zA-Z]*()' $W/mvc/budget/WebMvcBudgetFilter.java | sort -u | sed 's#^# #'\necho \" 반응형 필터가 자기 파일에서 읽는 필드 :\"\ngrep -o 'budget\\.[a-zA-Z]*()' $W/webflux/budget/WebFluxBudgetFilter.java | sort -u | sed 's#^# #'\necho \" 나머지 둘은 이 감싼 교환에 넘겨 잰다 :\"\ngrep -n 'BoundedServerWebExchange' $W/webflux/budget/WebFluxBudgetFilter.java\ngrep -o 'budget\\.[a-zA-Z]*()' $W/webflux/budget/BoundedServerWebExchange.java | sort -u | sed 's#^# #'\necho \" 두 필터를 등록하는 자리 :\"\n{ grep -rln 'new WebMvcBudgetFilter\\|new WebFluxBudgetFilter' --include=*.java . \\\n | sed -E 's#^\\./[^:]*/src/([a-zA-Z]+)/.*/([^/]+)$# \\1 · \\2#' || echo \" (0)\"; }\necho\necho \"# 유계 팩토리가 파서에 거는 것과 그 이유\"\nsed -n '9,15p' $W/json/BoundedJsonFactory.java\nsed -n '33,43p' $W/json/BoundedJsonFactory.java\necho\necho \"# 파서가 실제로 제공하는 상한 전부\"\nCACHE=/root/.gradle/caches/modules-2/files-2.1\nJ=$(find $CACHE/tools.jackson.core/jackson-core -name '*.jar' ! -name '*sources*' ! -name '*javadoc*' | head -1)\necho \" $(basename \"$J\")\"\nX=$(mktemp -d)\n( cd \"$X\" && jar xf \"$J\" 'tools/jackson/core/StreamReadConstraints$Builder.class' \\\n && javap -p 'tools/jackson/core/StreamReadConstraints$Builder.class' \\\n | grep 'Builder max' | sed -E 's#.*Builder (max[A-Za-z]+\\(.*\\));# \\1#' )\nrm -rf \"$X\"\necho \" 유계 팩토리를 부르는 자리와 그것을 부르는 자동설정 :\"\ngrep -rn 'BoundedJsonFactory.create\\|WebObjectMapperFactory.jsonMapper' --include=*.java . \\\n | grep -v '/test/' | sed -E 's#^\\./[^:]*/([^:/]+):([0-9]+):# \\1:\\2 #'\necho \" 그중 이 저장소가 이미 쓰는 것 :\"\ngrep -rn 'maxDocumentLength\\|maxTokenCount' --include=*.java . \\\n | sed -E 's#^\\./[^:]*/([^:/]+):([0-9]+):# \\1:\\2 #'\necho \" 같은 어댑터의 두 자리가 받는 예산 타입과 그 출하값 :\"\ngrep -n 'create(CodecBudget' $W/advanced/codec/WebCborMapperFactory.java $W/advanced/codec/WebXmlMapperFactory.java \\\n | sed -E 's#^[^:]*/([^:/]+):([0-9]+):# \\1:\\2 #'\ngrep -n 'int maxBodyBytes\\|conventional' $W/advanced/codec/CodecBudget.java | head -4\necho \" 여섯 자리를 실제로 만드는 곳 :\"\ngrep -rn 'WebCborMapperFactory\\.\\|WebXmlMapperFactory\\.\\|new StrictWebSocketJsonCodec\\|new WebSocketCborCodec\\|JacksonMessageCodec.of\\|new LocalJsonSchemaRegistry' --include=*.java . \\\n | sed -E 's#^\\./[^:]*/src/([a-zA-Z]+)/[^:]*/([^:/]+):([0-9]+):# \\1 · \\2:\\3#' | sort -u\necho \" 그 백엔드 잠금 항목이 실린 구성 :\"\ngrep -o 'tools.jackson.dataformat:jackson-dataformat-[a-z]*:[0-9.]*=[a-zA-Z,]*' \\\n adapter/inbound/web/gradle.lockfile | sed 's#^# #'\necho\necho \"# 표본 애플리케이션은 컬렉션 본문에 크기 제약을 건다\"\ngrep -n -B2 '@Size(max = MAX_BATCH_SIZE' \\\n sample-portfolio/src/main/java/dev/caskeleton/sample/portfolio/adapter/inbound/web/controller/WorkLogController.java\n", "cwd": "/shared/codebase/clean-architecture-backend-template/src", "exitCode": 0, "executedAt": "2026-09-03T01:52:44+00:00", "sourceRevision": "21234e38cdb9a926cbc92bb97a2aee2e4a7d2916", "raw": "evidence/raw/a14-f011-maxarrayelements.txt", "svg": "evidence/rendered/a14-f011-maxarrayelements.svg", "rawSha256": "8914f09c68c2e63b822d9436f497e40882c9b3e0a28be9db82be177b64d43ca8", "lines": 145, "redaction": "none — 값은 저장소와 이 프로브가 만든 것이다" }