Go(고) 언어가 웹에서 가장 널리 사용되는 데이터 형식인 JSON(JavaScript Object Notation) 처리를 위한 새로운 API를 Go 1.27 버전부터 정식 출시했습니다. 기존 표준 라이브러리인 `encoding/json` 패키지가 15년 넘게 사용되며 다양한 문제점이 드러남에 따라, `encoding/json/v2`와 `encoding/json/jsontext` 패키지를 통해 보안, 정확성, 성능 등 전반적인 개선을 이뤘습니다.
새로운 JSON API는 기존 패키지의 여러 행동적 결함과 API적 한계를 해결합니다. 예를 들어, 기존 `encoding/json`은 유효하지 않은 UTF-8을 허용하거나 중복된 객체 멤버 이름을 묵인하여 데이터 손상이나 보안 취약점(CVE-2017-12635 등)에 노출될 위험이 있었습니다. 또한, `nil` 슬라이스나 맵을 JSON `null`로 마샬링하여 다른 시스템과의 호환성 문제를 일으키거나, 대소문자 구분 없이 필드 이름을 매칭하는 등 예상치 못한 동작을 보였습니다. API 측면에서는 `io.Reader`로부터 데이터를 읽을 때 불필요한 데이터를 걸러내기 어렵고, `Encoder`나 `Decoder`의 옵션을 `Marshal` 및 `Unmarshal` 함수에 적용하기 어렵다는 단점이 있었습니다. 성능 면에서도 `MarshalJSON` 및 `UnmarshalJSON` 인터페이스가 불필요한 메모리 할당을 유발하고 스트리밍 처리가 비효율적이라는 지적이 많았습니다.
이번 업데이트는 Go 개발자들이 더욱 안전하고 효율적으로 JSON 데이터를 다룰 수 있는 기반을 마련했다는 점에서 의미가 큽니다. 특히, 엄격해진 JSON 구문 처리와 보안 강화는 애플리케이션의 안정성을 높이고 잠재적인 공격 벡터를 줄이는 데 기여할 것입니다. 또한, 개선된 API 디자인과 성능 최적화는 대규모 데이터를 처리하는 웹 서비스나 분산 시스템 개발에 긍정적인 영향을 미칠 것으로 예상됩니다. Go 언어의 핵심 가치인 간결함과 효율성을 유지하면서도 현대적인 웹 서비스 요구사항에 부합하는 데이터 교환 표준을 제공하게 된 것입니다.
