JSON
JavaScript Object Notation
JSON이란?
- 프로그램 간 데이터 교환 형식
- 사람도 읽기 쉬운 텍스트
- '이름:값' 쌍으로 표현
데이터를 넘길 때 가장 자주 깨지는 지점은 '몇 번째 칸에 무슨 값이 있느냐'입니다. 엑셀이나 CSV로 주고받으면 컬럼 하나가 밀리는 순간 수취인 이름 자리에 전화번호가 들어갑니다. JSON은 값마다 이름표를 붙여 두기 때문에 항목 순서가 뒤바뀌어도, 중간에 새 항목이 하나 늘어도 나머지는 그대로 읽힙니다. 데이터 안에 설명서가 함께 들어 있는 셈이라 받는 쪽이 별도 안내 없이도 무엇이 무엇인지 알아봅니다. 연동 협의에서 줄어드는 시간의 대부분이 순서와 칸 위치를 맞추는 실랑이에서 나옵니다.
담을 수 있는 값은 여섯 가지뿐입니다. 문자열, 숫자, 참/거짓, 빈 값(null), 여러 개를 나열하는 배열([ ]), 이름-값 묶음인 객체({ })입니다. 핵심은 배열과 객체를 겹쳐 쓰는 것으로, '주문 한 건 안에 상품 세 개, 상품마다 수량과 단가'처럼 접히는 구조를 그대로 표현합니다. 엑셀이라면 주문번호를 세 줄 반복해야 할 내용이 JSON에서는 한 덩어리로 끝납니다. 표 한 장으로는 못 담는 계층을 담는다는 점이 기존 양식과의 실질적인 차이입니다.
그렇다고 모든 데이터를 JSON으로 바꿀 이유는 없습니다. 행이 수십만 개인 단순한 표는 CSV가 용량도 작고 엑셀에서 바로 열려 더 실용적입니다. 같은 내용을 XML로 적을 때보다 태그 반복이 없어 글자 수가 줄어드는 것이 JSON의 이점이고, 로그처럼 계속 쌓이는 데이터는 한 줄에 한 건씩 적는 JSONL 형식으로 다룹니다. 주고받을 항목의 이름과 타입을 강제하고 싶다면 JSON Schema를 규격서에 붙입니다. API 문서에 적힌 '응답 예시'가 대개 이 덩어리입니다.
실무에서 사고는 대부분 문법에서 납니다. 쉼표 하나가 더 붙거나 큰따옴표가 작은따옴표로 바뀌면 파일 전체가 통째로 읽히지 않습니다. 엑셀처럼 '한 칸만 이상하고 나머지는 멀쩡'이 없어서, 500건짜리 응답이 한 글자 때문에 0건이 됩니다. 주석을 달 수 없다는 것도 자주 잊어, AI가 준 설정 파일에 설명을 덧붙였다가 서비스가 뜨지 않는 일이 흔합니다. 날짜와 앞자리 0도 단골입니다. JSON에는 날짜 타입이 없어 '2026-03-01' 같은 문자열로 쓰기로 미리 정해야 하고, 우편번호 06234를 숫자로 넣으면 6234가 됩니다. 한글은 UTF-8로 저장하지 않으면 깨집니다.
더글러스 크록포드(Douglas Crockford)가 2000년대 초 자바스크립트의 데이터 표기법을 정리·명세화하며 대중화했습니다. 이후 언어를 가리지 않는 데이터 교환 표준이 됐습니다.
가상의 사례로 살펴보겠습니다. 임직원 140명, 연매출 300억 원대 생활용품 유통사 A사는 자사몰 주문 월 4,200건을 엑셀로 정리해 물류사에 넘기고 있었습니다. 담당자 두 명이 하루 2시간씩 컬럼을 맞췄는데도 수취인과 연락처가 뒤바뀐 오배송이 월 6~7건씩 났습니다. 물류사가 API 연동을 제안하며 JSON 규격서를 보냈지만, 읽을 사람이 없어 3주를 그냥 흘려보냈습니다.
- 온라인사업팀 김 팀장이 규격서를 열어 '주문번호, 수취인, 상품목록' 세 이름을 짚으며 '엑셀 헤더가 그대로 들어가 있는 거네요'라고 정리했습니다.
- 물류사 연동 담당자는 '상품목록은 대괄호 안에 들어가는 배열이라, 한 주문에 상품이 세 개면 그 안에 세 덩어리가 들어갑니다'라며 주문 한 건이 한 덩어리로 묶이는 구조를 설명했습니다.
- A사 IT 담당 박 대리가 샘플 5건을 무료 JSON 검사기에 붙여넣자 쉼표 누락 두 곳이 빨갛게 잡혔고, 고치는 데 걸린 시간은 10분이었습니다.
- 테스트 3일 차에 우편번호 06234가 6234로 출력되자, 김 팀장이 '우편번호와 사번은 숫자 말고 문자열로' 보내달라고 요청해 규격을 수정했습니다.
- 8주 뒤 연동이 끝나 월 4,200건 이관에 들던 하루 2시간이 10분으로 줄었고, 순서 밀림 오배송은 월 6~7건에서 2개월 연속 0건이 됐습니다.