-
Go 1.27 legacy JSON 실측 — any Unmarshal에서 nojsonv2 ns/op 0.664×AI Agent 2026. 8. 25. 22:10728x90반응형

legacy any unmarshal에서는 nojsonv2가 더 낮은 ns/op를 냈고, marshal은 default가 더 낮았습니다. direct json/v2 API는 측정하지 않았습니다. 이 고정 workload의 legacy
encoding/json.Unmarshal(..., &any)에서는nojsonv2가 더 낮은 ns/op를 냈습니다.nojsonv2 ns/op ÷ default ns/op의 25개 paired ratio 기하평균은 0.664×였습니다. Go 1.27로 올리기 전에는 자신의 legacy any Unmarshal workload를 따로 재야 합니다. 이 글은 직접encoding/json/v2API를 호출한 성능 또는 호환성 측정이 아닙니다.무엇을 확인하려 했나
Go 1.27 릴리스 노트는 기존
encoding/json이 v2 구현을 사용하며, marshal은 대체로 이전 구현과 비슷하고 unmarshal은 더 빠르다고 설명합니다. 같은 문서는 호환성 문제가 있으면 빌드 시GOEXPERIMENT=nojsonv2로 이전 v1 구현을 복원할 수 있다고 적습니다. 문서 확인일은 2026-08-25입니다.사전등록한 질문은 “이 M4 Max에서 기본 Go 1.27과
nojsonv2의 marshal/unmarshal 비용 및 의미론적 차이가 무엇인가”였습니다. 사전 기준은 다섯 payload의 unmarshal paired speedup 기하평균이 1.05×를 넘고, 호환성 fixture 중 하나 이상이 달라지는 경우였습니다. 실행 후 범위를 다시 대조하니, legacyencoding/json.Unmarshal → anyfixture는 migration guide가 말하는 directencoding/json/v2의미론을 시험하지 않습니다. 이 기준의 성능 절반은 유효하지만 direct-v2 의미론 절반은NOT_TESTED로 정정했습니다. 정정 이유는protocol-scope-correction.md에 남겼습니다.hypothesis.md에는 벤치마크 전에 작성했다고 기록되어 있습니다. 그러나 이 checkout에는 그 파일의 선행 커밋이 없습니다. Git 이력으로 사전등록 순서를 독립적으로 증명하는 상태는 HOLD입니다.어떻게 돌렸나
항목 조건 하드웨어 Apple M4 Max, 통합 메모리 64 GB 운영체제 macOS 26.6.2, build 25G83 도구체인 go1.27.0 darwin/arm64, SHA-256 검증한 독립 toolchain비교 기본 Go 1.27 대 GOEXPERIMENT=nojsonv2병렬성 GOMAXPROCS=1payload flat records, nested orders, interface events, escaped text, numeric series의 고정 synthetic JSON 5개 반복 기본 경로 warm-up 1회는 제외하고, fixture마다 후보별 n=5; ABBA 순서로 paired 실행 의미론 검사 valid fixture 5개와 duplicate key, invalid UTF-8, malformed JSON, nil container fixture 4개 모든 unmarshal 벤치마크는 legacy
encoding/json.Unmarshal로any에 디코드했습니다. typed destination과 직접encoding/json/v2호출은 측정하지 않았습니다. payload 생성과 marshal 입력 decode는 timer 시작 전에 끝냈고, 두 후보에는 byte-identical input을 주었습니다.go test -run '^$' -bench '^Benchmark' -benchmem -count=1 -benchtime=1s -cpu=1 .raw benchmark를 남긴 뒤,
-cpu=1에서 생략되는 suffix를 분석기가 가정했던 문제를 parser만 고쳐 결과를 다시 렌더했습니다. 이 수정 뒤 benchmark는 다시 돌리지 않았습니다. 최종 source verification은 기본과nojsonv2각각에서go test ./...가 통과한 로그를 남겼습니다. 결과·분산·한계의 표기 방식은 [[experiment-report-standard]]를 따랐습니다.결과
속도비는
nojsonv2 ns/op ÷ default ns/op입니다. 따라서 1보다 작으면 이 고정 workload에서nojsonv2의 ns/op가 더 낮았다는 뜻입니다. 아래 평균과 표준편차는 후보별 n=5의 sample SD입니다.Unmarshal — legacy
encoding/json.Unmarshal→anypayload Default ns/op, 평균 ± SD nojsonv2 ns/op, 평균 ± SD paired 기하평균 (GSD) Flat records 95,684.2 ± 2,054.6 64,110.4 ± 1,892.8 0.670× (1.024) Nested orders 180,187.2 ± 3,054.2 116,208.0 ± 4,268.3 0.645× (1.040) Interface events 126,207.2 ± 3,325.4 82,894.4 ± 3,008.2 0.657× (1.014) Escaped text 179,099.0 ± 6,270.2 126,462.0 ± 4,109.0 0.706× (1.042) Numeric series 1,420,861.6 ± 40,545.7 916,483.2 ± 31,422.3 0.645× (1.059) 다섯 payload × 다섯 pair, 총 25개 unmarshal ratio의 기하평균은 0.664×, geometric SD는 1.050이었습니다.
Marshal
payload Default ns/op, 평균 ± SD nojsonv2 ns/op, 평균 ± SD paired 기하평균 (GSD) Flat records 33,520.2 ± 882.7 61,170.2 ± 1,564.9 1.825× (1.052) Nested orders 65,222.0 ± 953.2 102,657.4 ± 2,664.9 1.574× (1.038) Interface events 45,121.4 ± 3,334.6 68,957.2 ± 1,503.4 1.532× (1.097) Escaped text 52,740.6 ± 1,078.2 77,339.6 ± 2,050.8 1.466× (1.030) Numeric series 450,520.0 ± 8,737.8 717,242.8 ± 12,486.6 1.592× (1.025) valid fixture 5개의 structural digest는 두 후보에서 모두 같았습니다. legacy 경로의 compatibility fixture 4개에서는 관측한 output 또는 error contract 차이가 0건이었습니다. 이것은 direct
encoding/json/v2의미론의 호환성 검사가 아닙니다. 성능 기준의 사전 판정은 불지지이고, direct-v2 의미론 기준은 NOT_TESTED입니다.
이 M4 Max의 legacy any unmarshal에서는 기본 경로가 느렸고, marshal은 빨랐습니다. direct json v2 의미론이나 typed target은 측정하지 않았습니다. 뭐가 달랐나
이 범위의 unmarshal 결과는 릴리스 노트가 설명한 “unmarshal이 더 빠르다”는 방향을 확인하지 못했습니다. 다만 이 결과는 legacy API로
any에 디코드한 다섯 synthetic payload의 microbenchmark에만 해당합니다.migration guide는 직접
encoding/json/v2를 쓸 때 invalid UTF-8, duplicate name, nil slice/map 같은 동작이 v1과 달라질 수 있다고 설명합니다. 이번 검사는 그 직접 v2 API를 호출하지 않았습니다. legacyencoding/json경로에서 4개 fixture의 차이를 관측하지 못한 사실은 남기되, direct-v2 의미론은 NOT_TESTED입니다. 두 사실은 같은 비교 대상이 아닙니다.왜 이
any대상 unmarshal에서 0.664×가 나왔는지는 UNKNOWN입니다. CPU profile, allocation profile, typed destination, 직접 v2 API를 분리한 측정은 하지 않았습니다.728x90반응형'AI Agent' 카테고리의 다른 글
Qwen3:4b 합성 한국어 전사본 JSON 추출 — 항목 완전 일치: 결정 12/60, 담당자-할 일 37/60 (0) 2026.08.27 합성 PDF를 PNG로 바꾼 Tesseract 숫자 검증 — PSM 11 94.17%, 전체 일치 11/30 (0) 2026.08.26 CSV 120만 행 Excel 직접 열기 실측 — 사용 범위 1,048,576행 (0) 2026.08.25 나의 AI 사용량 체크 - Tokscale AI 사용량 점검 - Claude Code·Codex 사용량 확인하는 법 (0) 2026.08.25 DFlash 2 M4 Max 디코딩 실측 — 2.02배, Greedy 5/8 불일치 (0) 2026.08.24