JSON은 당신을 속이고 있다
(news.hada.io)
JSON은 단순한 데이터 복제 도구가 아니라 특정 타입의 손실과 의도치 않은 코드 실행을 동반할 수 있는 변환 과정이므로, 개발자는 정밀도 손실이나 데이터 유실을 방지하기 위한 명시적인 데이터 계약과 검증 전략을 반드시 갖춰야 합니다.
이 글의 핵심 포인트
- 1JSON.parse(JSON.stringify())는 BigInt, undefined, Date 등의 타입을 유실하거나 변경할 수 있는 불완전한 복제 방식임
- 2IEEE 754 부동 소수점 한계로 인해 매우 큰 정수는 직렬화 및 파싱 과정에서 정밀도 손실이 발생할 수 있음
- 3JSON은 undefined, Symbol, 함수 등을 지원하지 않으며, 객체에서는 속성이 삭제되고 배열에서는 null로 변환됨
- 4JSON.stringify는 toJSON()이나 getter를 실행하는 '코드 실행' 과정을 포함하므로 부수 효과가 발생할 수 있음
- 5안전한 데이터 교환을 위해서는 큰 숫자를 문자열로 인코딩하고, 런타임 스키마 검증과 명시적인 데이터 계약이 필요함
이 글에 대한 공공지능 분석
왜 중요한가?
어떤 배경과 맥락이 있나?
업계에 어떤 영향을 주나?
한국 시장에 어떤 시사점이 있나?
이 글에 대한 큐레이터 의견
많은 개발자가 `JSON.parse(JSON.stringify(value))`를 객체 깊은 복사의 표준처럼 사용하지만, 이는 매우 위험한 관행입니다. 이 방식은 단순한 값의 복사가 아니라 데이터의 일부를 삭제하거나 변형하는 '변환' 과정이기 때문입니다. 특히 금융 데이터를 다루는 스타트업에게 큰 정수의 정밀도 손실은 치명적인 비즈니스 리스크로 직결됩니다.
물론 모든 데이터 교환에 엄격한 스키마 검증과 커스텀 인코딩을 적용하는 것은 개발 속도를 늦추고 시스템 복잡도를 높이는 트레이드오프를 발생시킵니다. Protobuf와 같은 더 무거운 프로토콜 도입은 오버헤드가 클 수 있습니다. 하지만 '편리함'과 '안전성' 사이의 균형을 잡기 위해서는, 최소한 데이터의 경계(Boundary)가 되는 API 계층에서만큼은 명시적인 타입 정의와 검증 로직을 구축하는 것이 장기적인 유지보수 비용을 줄이는 길입니다.
창업자 관점에서는 엔지니어링 팀이 '데이터 계약(Wire Contract)'에 대해 얼마나 엄격한 기준을 가지고 있는지 점검해야 합니다. 기술적 부채가 데이터 오염이라는 형태로 나타나 서비스 신뢰도를 무너뜨리기 전에, 직렬화와 파싱 과정에서의 예외 케이스를 설계 단계에서부터 고려하는 문화가 필요합니다.
관련 뉴스
댓글
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.