현대 웹 개발과 API 통신 환경에서 가장 널리 쓰이는 데이터 교환 포맷은 단연 **JSON(JavaScript Object Notation)**입니다. 가볍고 인간이 읽기 쉬운 구조 덕분에 REST API, 설정 파일(config), 데이터베이스(NoSQL) 등 거의 모든 영역에서 표준으로 사용되고 있습니다.
그러나 네트워크 패킷이나 데이터베이스에 저장된 원본 JSON 데이터는 용량을 아끼기 위해 공백과 줄바꿈이 모두 제거된 **한 줄짜리 압축 형태(Minified)**로 되어 있는 경우가 많습니다. 이를 개발자가 그대로 읽고 디버깅하기는 불가능에 가깝습니다. 또한, 콤마 하나나 따옴표 오류만으로도 전체 데이터 파싱(Parsing)이 실패하며 전체 시스템 오류를 일으킵니다. 본 가이드에서는 JSON 데이터의 구문 규칙 표준인 RFC 8259를 해부하고, 안전하게 문법을 검증하고 포매팅하는 요령을 분석합니다.
1. JSON의 핵심 문법 규칙과 RFC 8259 표준
JSON은 단순해 보이지만, 아주 엄격한 문법 규칙(Syntax Rules)을 따르고 있습니다. 국제 표준 규격인 RFC 8259 및 ECMA-404 표준 명세에 따른 핵심 구문 규칙을 숙지해야 디버깅 시간을 획기적으로 줄일 수 있습니다.
① 쌍따옴표(Double Quotes) 사용 필수
자바스크립트 등 일반 프로그래밍 언어에서는 문자열을 감쌀 때 홑따옴표(')와 쌍따옴표(")를 혼용해도 무방하지만, JSON에서는 무조건 쌍따옴표(")만 허용됩니다. 객체의 Key(속성 이름)와 Value(문자열 유형일 경우) 모두 반드시 쌍따옴표로 감싸야 합니다. 홑따옴표를 사용하면 즉시 구문 에러(JSON_ERROR_SYNTAX)가 발생합니다.
② 후행 콤마(Trailing Comma) 금지
배열([])이나 객체({})의 마지막 요소 뒤에 불필요한 콤마(, , 일명 후행 콤마)를 남겨두는 것은 일반 프로그래밍 언어에서는 허용되거나 권장되기도 하지만, JSON 표준에서는 절대 금지됩니다. 마지막 데이터 항목 뒤에 콤마가 존재하면 파서가 다음 데이터가 올 것으로 기대했다가 빈 값을 마주하므로 에러를 뿜게 됩니다.
③ 주석(Comments) 사용 불가
JSON은 오직 **'데이터 교환'**을 목적으로 고안된 포맷이므로, 주석 코드(// 또는 /* ... */)를 스펙상 아예 지원하지 않습니다. 설정 파일에 설명을 적기 위해 주석을 임의로 적어 넣는 경우가 많은데, 이는 JSON 파서가 파싱에 실패하는 가장 대표적인 원인입니다.
다음 표는 자바스크립트 객체 리터럴과 비교하여 RFC 8259 JSON 표준이 강제하는 규격을 명확히 요약한 비교표입니다.
| 문법 항목 | 일반 자바스크립트 객체 (JS Object) | RFC 8259 JSON 표준 규격 | 위반 시 결과 |
|---|---|---|---|
| 문자열 따옴표 | 홑따옴표(') 및 쌍따옴표(") 모두 지원 |
쌍따옴표(")만 허용 |
구문 파싱 에러 발생 |
| 객체의 Key(키) | 따옴표 없이 입력 가능 (예: name: "A") |
반드시 쌍따옴표 포함 (예: \"name\": \"A\") |
구문 파싱 에러 발생 |
| 후행 콤마(,) | 허용 및 권장 (자동 문법 가독성용) | 마지막 요소 뒤 콤마 절대 금지 | 구문 파싱 에러 발생 |
| 주석(Comments) | 지원 (//, /* */) |
일절 지원 안 함 | 구문 파싱 에러 발생 |
| 허용 데이터 타입 | 함수, undefined, NaN, Infinity 등 포함 |
String, Number, Boolean, Null, Object, Array만 | 파싱 에러 또는 변환 누출 |
2. 자주 발생하는 JSON 파싱 에러 유형 및 트러블슈팅
코딩이나 시스템 연동 중 자주 마주치는 JSON 에러 로그를 식별하고 해결하는 팁입니다.
Unexpected token ' in JSON at position ...
이 에러는 문자열이나 객체 키를 감쌀 때 홑따옴표(')를 사용했음을 가리킵니다. 해당 줄의 홑따옴표를 전부 쌍따옴표로 교체해 주어야 합니다.
Unexpected token } in JSON at position ...
주로 객체의 마지막 원소 뒤에 후행 콤마(, )를 남겨두었을 때 발생합니다. 마지막 쉼표를 삭제해 주면 해결됩니다.
이스케이프 문자(Escape Characters) 유실
JSON 문자열 내부에 쌍따옴표나 역슬래시(\) 기호 자체를 값으로 넣고 싶을 때는 반드시 백슬래시를 사용해 이스케이프(\", \\) 처리를 해주어야 합니다. 만약 이스케이프 처리 없이 문자열 한가운데 쌍따옴표를 입력하면 파서는 그 지점에서 문자열 데이터가 끝난 것으로 오인하여 에러를 냅니다.
3. 효율적인 JSON 포매팅 및 검증 실무 팁
가독성을 높이고 문법오류를 완벽히 예방하며 대용량 데이터를 처리하는 표준 워크플로우입니다.
① 적정 들여쓰기(Indent) 설정
JSON 포매팅 시 들여쓰기는 주로 공백(Space) 2칸 또는 4칸을 사용합니다.
- 공백 2칸: 데이터 구조가 매우 깊고(Nested) 복잡한 경우 화면 가로 영역을 아낄 수 있어 널리 선호됩니다.
- 공백 4칸: 일반 소스 코드와 일치하는 가독성을 주어 중소형 크기의 JSON에 적합합니다.
② 대용량 JSON 처리는 스트리밍(Streaming) 방식 고려
웹 브라우저나 일반 메모리에 기가바이트(GB) 단위의 거대한 JSON 파일을 한 번에 통째로 JSON.parse하면 브라우저 메모리가 부족하여 다운(Crash)될 수 있습니다. 이럴 때는 파일을 잘게 조각내어 읽어들이는 스트림 파서(Stream Parser) 라이브러리를 활용해 점진적으로 처리해야 서버 및 브라우저 성능을 지킬 수 있습니다.
4. JSON 포매팅에 관한 자주 묻는 질문 (FAQ)
Q1. JSON에 주석을 꼭 넣어야 하는 설정 파일의 경우는 어떻게 하나요?
A1. 표준 JSON 파서는 주석이 포함되면 오작동합니다. 주석이 꼭 필요한 설정 파일의 경우에는 주석을 허용하도록 표준을 확장한 JSONC(JSON with Comments) 포맷이나 JSON5, 혹은 YAML 포맷을 채택하여 사용하는 것이 정신 건강에 좋습니다. (VS Code의 settings.json 등이 대표적인 JSONC 형식입니다.)
Q2. JSON 데이터 순서가 포매팅을 거치면 멋대로 바뀌는데 제어할 수 있나요?
A2. RFC 8259 표준 규격상 JSON 객체는 **"정렬되지 않은 키-값 쌍의 집합"**입니다. 즉, 키의 순서는 스펙상 보장되지 않는 것이 원칙입니다. 순서가 반드시 중요하다면 객체({}) 형태가 아닌 순서가 보장되는 배열([]) 형태로 데이터를 정렬해 감싸주어야 합니다.
Q3. JSON 숫자에 소수점을 그냥 입력해도 안전한가요?
A3. 네, 0.15나 -12.5 같은 소수점과 정수 표기는 완벽히 지원됩니다. 단, 앞자리에 불필요한 0을 채워 넣은 형태(예: 050 또는 00.15)는 표준 규격상 문법 오류로 간주되므로 피해야 합니다.
5. 브라우저에서 안전하게 1초 만에 JSON 검증하기
무거운 전용 편집기를 켜지 않고도, 웹 브라우저에서 즉시 잘못된 JSON 구문을 검사하고 가독성 좋게 정렬할 수 있습니다.
저희가 제공하는 JSON 포매터는 데이터를 외부 웹서버로 전송하지 않고 브라우저 로컬 환경 내에서 독립형 자바스크립트로 파싱을 실행합니다. 따라서 민감한 고객 데이터나 API 패킷 내용을 넣더라도 정보 유출 우려 없이 안전하게 문법을 검증하고, 예쁘게 포매팅(Pretty Print) 및 축소(Minified)할 수 있습니다. 텍스트 변경 내역을 대조해 보려면 텍스트 비교기나 문법 필터링에 필요한 정규표현식 테스터 가이드를 함께 참고해 개발 효율을 극대화해 보세요.
함께 읽어보면 좋은 유용한 가이드
- 텍스트 비교기 활용 및 코드 디프 확인법: 두 텍스트 간 차이점을 빠르게 추적하는 방법
- 정규표현식 기초 문법 및 치트시트 가이드: 텍스트 검색 및 유효성 검사를 위한 만능 문법



