JSON 후행 쉼표, 왜 없을까? 개발자들의 뜨거운 논쟁

by DD
2일 전
조회수 8

JSON 표준에서 후행 쉼표(Trailing Comma)를 허용하지 않는 것이 데이터 구조 변경 시 불편함을 초래한다는 주장이 제기됨

후행 쉼표 부재는 JSON이 ECMAScript 3의 부분집합으로 설계되었기 때문이며, 당시 브라우저 호환성을 위한 선택이었다는 반론이 있음

Haskell, TLA+, Prolog 등 다른 언어에서도 유사한 구분자(Separator) 문제가 존재하며, 언어별 해결 방식이 논의됨

Zig, Python, Go 등 후행 쉼표를 허용하는 언어들의 사례와 데이터 격리 아키텍처(Data Isolation Architecture)에서의 장점이 언급됨

JSON 후행 쉼표 부재의 역사적 배경

초기 JSON 설계는 ECMAScript 3의 부분집합(Subset of ECMAScript 3)으로 시작되었으며, 당시 브라우저에서의 즉각적인 `eval()` 호환성을 위해 후행 쉼표가 제외되었다는 분석이 있습니다. 이는 JSON이 데이터 교환 형식(Data Interchange Format)으로서의 성공에 결정적인 역할을 했지만, 이후 데이터 구조 변경 시 개발자 경험 측면에서 불편함을 야기하는 원인이 되었다는 지적입니다.

다양한 언어에서의 구분자(Separator) 문제

논의에서는 JSON 외에도 Haskell의 레코드 타입, TLA+, Prolog 등에서 선행 또는 후행 구분자(Leading/Trailing Separator) 부재로 인한 코드 변경의 어려움이 지적되었습니다. 특히 Prolog의 경우, 멤버 구분자인 쉼표(,)와 문장 종료 기호인 마침표(.)가 혼합되어 있어 코드 수정 시 더욱 복잡한 주의가 요구된다는 의견이 있었습니다.

후행 쉼표 허용 언어들의 장점

Python, Go, Zig 등 후행 쉼표를 허용하는 언어들은 코드 변경 용이성(Ease of Modification) 측면에서 높은 평가를 받습니다. 특히 Zig의 경우, 후행 쉼표를 통해 자동 코드 포매팅(Auto-formatting)을 유도하는 기능은 개발 생산성을 크게 향상시킨다는 평가입니다. 이는 데이터 격리 아키텍처(Data Isolation Architecture)를 적용한 복잡한 설정 파일 관리에도 유용하게 작용할 수 있습니다.

구분자 위치에 따른 파싱(Parsing) 복잡성

일부에서는 후행 쉼표가 파싱의 모호성(Parsing Ambiguity)을 야기할 수 있다는 우려를 제기합니다. 예를 들어, Prolog에서 후행 쉼표를 허용하면 코드 블록의 경계가 불분명해져 의도치 않은 동작을 유발할 수 있다는 것입니다. 이는 제어 흐름(Control Flow)데이터 구조(Data Structure) 구분 시 특히 중요한 고려 사항으로 언급되었습니다.

Lisp 계열 언어의 근본적인 해결책

Lisp 계열 언어(Clojure 등)는 괄호로 모든 것을 감싸는 S-expression 방식을 사용하여 구분자 문제 자체를 회피합니다. 쉼표는 관례적으로 사용되지만 필수는 아니며, 이는 구문 분석(Syntax Parsing)의 복잡성을 줄이고 코드의 일관성(Code Consistency)을 높이는 데 기여한다는 분석입니다. 이러한 접근 방식은 복잡한 데이터 구조를 다룰 때 특히 유용합니다.

Nontrailing separators do not spark joy