개발자 도구7 분 읽기|MJ민재

쉼표 하나가 결제 서버를 47분간 멈췄다 — JSON 포맷팅·검증 완전 가이드 2026

trailing comma 하나가 프로덕션 결제 서비스를 47분 다운시킨 실화에서 시작하는 JSON 포맷팅 가이드. Beautify·Minify·Validate·Tree View 차이부터 도구 비교, 자주 나오는 에러 5가지, 배포 전 검증 루틴까지 한 번에.

금요일 오후 4시 43분이었어요. 배포 3분 만에 결제 서비스에 500 에러 알림이 쏟아지기 시작했어요. 원인 찾는 데 11분 걸렸어요. JSON 설정 파일 가장 마지막 프로퍼티 뒤에 쉼표 하나. 파서가 조용히 실패하고 빈 기본값으로 폴백했고, 결제 플로우 전체가 멈췄어요. 47분간 서비스 다운. 원인은 쉼표 하나. JSON은 JavaScript랑 비슷해 보여서 유연할 것 같지만, RFC로 정의된 엄격한 형식이에요. JavaScript가 무시하는 오류도 JSON은 그냥 뻗어요.

이 글에서 알 수 있는 것

  • Beautify·Minify·Validate·Tree View — 각 모드가 실제로 뭘 하는지, 언제 써야 하는지
  • 가장 자주 나오는 JSON 문법 에러 5가지 — trailing comma 트랩 포함해서 바로 알아보는 법
  • VS Code vs JSONLint vs QuickFigure 비교표 — 어떤 상황에서 뭘 써야 하는지

JSON 포맷팅이 실제로 하는 일

JSON 포맷팅은 하나가 아니에요. 목적이 다른 네 가지 작업이에요. 대부분 개발자가 한두 가지만 쓰는데, 나머지가 뭔지 알면 작업 속도가 달라져요.

모드하는 일쓰는 상황
Beautify들여쓰기와 줄바꿈을 추가해 가독성을 높임디버깅, 코드 리뷰, API 응답 읽기
Minify공백 전부 제거해 파일 크기를 줄임프로덕션 빌드, 설정 저장, API 페이로드
ValidateJSON 문법만 검사 — 데이터는 수정 안 함배포 전마다, API 호출 전마다
Tree View접기/펼치기 가능한 계층 구조로 표시깊은 중첩 구조 탐색, 수천 줄 스크롤 없이

가장 자주 나오는 JSON 문법 에러 5가지

JSON은 RFC 8259로 정의돼 있고, 의도적으로 JavaScript보다 엄격해요. 어떤 언어의 파서도 모호하지 않게 읽을 수 있게 하려고요. 프로덕션 사고에서 가장 많이 나오는 에러가 이 다섯 가지예요.

  • Trailing comma: JSON 파싱 실패의 1위 원인이에요. { "name": "Alice", } 이렇게 마지막 프로퍼티 뒤에 쉼표가 있으면 무조건 에러가 나요.
  • 작은따옴표: JSON은 키와 문자열 값 모두 큰따옴표가 필수예요. 'name'이나 'Alice'는 모든 JSON 파서에서 SyntaxError를 던져요.
  • 따옴표 없는 키: { name: "Alice" }는 JavaScript에서는 유효하지만 JSON에서는 무효예요. 키는 반드시 큰따옴표로 감싸야 해요.
  • 주석: JSON은 // 또는 /* */ 주석을 지원하지 않아요. 주석이 필요하면 JSONC를 쓰고 파싱 전에 제거하세요.
  • undefined, NaN, Infinity: 이 JavaScript 값들은 JSON에 존재하지 않아요. 없는 값은 null을 쓰고, 특수 숫자는 문자열로 표현하거나 제거하세요.
💡

배포 전에 검증기를 반드시 돌리세요

CI 파이프라인에 jq . config.json 명령어 하나만 넣으면 JSON 문법 에러를 전부 프로덕션 전에 잡을 수 있어요. 100ms도 안 걸려요. 제가 일했던 코드베이스에서 다른 어떤 체크보다 이게 사고를 많이 막았어요. JSON 검증 없이 배포하는 건 변명의 여지가 없어요.

도구 비교: VS Code vs JSONLint vs QuickFigure

도구BeautifyMinifyValidateTree View오프라인
VS Code (내장)가능 (Shift+Alt+F)불가인라인만불가가능
JSONLint.com불가불가가능불가불가
QuickFigure가능가능가능 (줄 하이라이트)가능가능 (브라우저 기반)

실용적인 기준으로 나누면: 파일이 이미 에디터에 열려 있으면 VS Code 내장 포맷터를 써요. 붙여넣기 한 걸 빠르게 문법 체크할 때는 JSONLint. 네 가지 모드를 한 곳에서 다 써야 할 때, 특히 API 응답을 디버깅하면서 컨텍스트 전환 없이 작업할 때는 QuickFigure가 제일 편해요.

큰 JSON 파일 다루기

VS Code는 5~10MB 정도에서 눈에 띄게 느려지기 시작해요. 50MB API 덤프를 열면 문법 강조가 꺼지고 '파일이 매우 큽니다' 경고가 뜨거든요. 큰 파일은 터미널로 이동하세요.

# 에디터 안 열고 pretty-print 보기
jq . large-file.json

# 중첩된 특정 필드 추출
jq '.data.users[0].email' large-file.json

# 배열 요소 수 세기
jq '.results | length' large-file.json

# 조건으로 배열 필터링
jq '.items[] | select(.status == "active")' large-file.json

# 압축 출력 (minify)
jq -c . large-file.json
⚠️

JSON에 바이너리 데이터를 직접 넣지 마세요

JSON은 텍스트 전용이에요. 이미지, PDF, 오디오 파일 같은 바이너리 데이터를 넣으려면 반드시 Base64로 인코딩해야 해요. 바이너리 바이트를 JSON 문자열에 직접 넣으면 데이터가 깨지거나 파서가 터져요. Base64 인코딩의 33% 용량 증가는 텍스트 형식으로 바이너리 콘텐츠를 다루는 비용이에요. 큰 바이너리 페이로드는 multipart form data나 직접 파일 업로드를 고려하세요.

JSON vs YAML vs TOML: 어떤 상황에서 뭘 쓸까

형식가장 적합한 용도사람이 쓰기주석JSON 대비 크기
JSONAPI, 데이터 교환, 설정 (범용)보통불가기준
YAMLKubernetes, CI/CD, 복잡한 중첩 설정쉬움가능 (#)비슷
TOML앱 설정 (Rust, Python 프로젝트)쉬움가능 (#)약간 작음
Protocol Buffers고처리량 마이크로서비스 통신불가 (바이너리).proto 파일에서3-10배 작음

자주 묻는 질문

민감한 JSON 데이터를 붙여넣어도 안전한가요?

네. QuickFigure JSON 포맷터는 모든 처리를 브라우저에서 해요. 서버로 데이터가 전혀 안 가요. API 키, 토큰, 민감한 페이로드도 안심하고 쓸 수 있어요. 탭을 닫으면 메모리에서도 바로 사라져요.

최대 JSON 크기가 얼마나 되나요?

브라우저에서 처리하니까 기기 메모리에 따라 달라요. 10MB까지는 부드럽게 돌아가요. 50MB 이상이면 터미널에서 jq를 쓰는 게 나아요. jq는 스트리밍 방식이라 파일 크기에 상관없이 처리할 수 있거든요.

주석이 있는 JSON도 포맷할 수 있나요?

표준 JSON은 주석을 지원하지 않아요. VS Code 설정 파일에 쓰이는 JSONC 형식에 // 또는 /* */ 주석이 있다면 먼저 제거해야 해요. 검증기가 RFC 8259 위반으로 문법 에러를 표시해요.

들여쓰기 스타일을 뭘 써야 하나요?

JavaScript/TypeScript 프로젝트에서는 2칸이 가장 일반적이에요. Python, Java는 4칸이 흔하고요. 탭은 일부 팀이 접근성 때문에 선호해요. 어떤 걸 고르든 하나로 통일하고 린터로 강제하세요. 코드베이스 안에서 들여쓰기가 섞이는 게 어떤 선택보다 나쁜 거예요.

JSON 포맷터 & 검증기

JSON을 붙여넣으면 즉시 정리, 압축, 검증, 트리 뷰로 탐색할 수 있어요. 구문 강조, 줄 단위 에러 감지, 파일 업로드까지 브라우저에서 모두 처리해요.

JSON 포맷터 열기

이 글에서 다룬 도구 바로 사용하기

MJ

민재

개발자 겸 테크 라이터. 개발 도구와 파일 변환 기술을 깊이 있게 다룹니다.

이 글이 도움이 되셨나요? 새 가이드 알림 받기

스팸 없이, 새 소식만 보내드립니다. 언제든 취소 가능. · 구독 시 개인정보처리방침에 동의합니다.

이런 글도 좋아하실 수 있어요

84+

제공 도구

100+

블로그 글

English & 한국어

지원 언어

이 페이지를 즐겨찾기하세요! 매주 새로운 무료 도구가 추가됩니다.