본문 바로가기
C.W.K.
Stream
Lesson 08 of 08 · published

흔한 버그와 디버깅 도구

~12 min · json, debugging, validation, tooling

Level 0평문
0 XP0/64 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

흔한 다섯 버그, 그리고 빠르게 고치는 법

1. Trailing comma

제일 자주 나는 JSON 파스 에러야. {"a": 1,} 는 'expected property name, got }' 를 뱉고 죽어. 고치는 법은 콤마를 지우는 것뿐이고, 다시 안 겪으려면 JSON 규칙을 아는 도구로 저장할 때마다 포맷하게 해둬.

2. Single quote

JS 나 Python 소스에서 그대로 복붙했을 때 나와. {'name': 'Pippa'} 같은 거지. 기계적으로 고치려면 sed "s/'/\"/g" 를 돌리거나, 양이 적으면 그냥 다시 쳐. 이걸 고치겠다고 eval 을 부르지는 마. 아래 경고가 그 이야기야.

3. 주석

JSON 안의 // 주석 이나 /* ... */ 는 그대로 파스 에러야. 떼어내든지, JSONC (VS Code config) 나 JSON5 (파서가 명시적으로 켜줘야 해) 로 갈아타. spec 이랑 싸우지 마.

4. 문자열 안 escape 안 된 특수 문자

날것 그대로의 줄바꿈, 탭, 혼자 남은 백슬래시가 범인이야. \n, \t, \\ 로 써. 에러는 보통 진짜 실수한 줄보다 한 줄 뒤를 가리켜.

5. 인코딩 불일치

파일 맨 앞에 BOM (byte order mark) 이 붙은 UTF-8 은 엄격한 파서를 깨뜨려. Windows 쪽 에디터 상당수가 BOM 을 말없이 붙여놔. 'UTF-8 without BOM' 으로 저장하면 끝이야. 이때 나오는 에러 메시지는 보통 'unexpected token at position 0' 이고.

30 초 디버그 루프: JSON 파일이 안 읽히면 일단 jq . file.json 부터 돌려. 대부분의 언어 표준 라이브러리가 안 해주는 걸 jq 는 해줘. 문법 오류의 줄과 컬럼을 콕 집어주거든. 깊이 중첩된 파일이면 jq -e 를 써. 파스가 실패하면 0 이 아닌 코드로 끝나서 CI 에 그대로 물릴 수 있어.

Code

Shell 에서 검증·bash
# 빠른 yes/no:
jq -e . config.json > /dev/null && echo OK || echo BROKEN

# Python 등가:
python -m json.tool config.json > /dev/null && echo OK || echo BROKEN

# Node 등가:
node -e 'JSON.parse(require("fs").readFileSync("config.json"))' && echo OK || echo BROKEN
Python 의 예쁜 에러 리포트·python
import json

try:
    with open('config.json') as f:
        data = json.load(f)
except json.JSONDecodeError as e:
    print(f'JSON error at line {e.lineno}, column {e.colno}: {e.msg}')
    # 파일 한 번 읽고 문제의 줄 표시:
    with open('config.json') as f:
        lines = f.readlines()
    print(f'  >>> {lines[e.lineno - 1].rstrip()}')
    print(f'      {" " * (e.colno - 1)}^')
검사용 jq (몇 가지 동작)·bash
# 최상위 키 다 보기
jq 'keys' data.json

# 한 키의 모든 값, 배열 가로질러
jq '.[].name' users.json

# 객체로 필터
jq '.[] | select(.age > 18)' users.json

# 모든 최상위 값의 타입
jq 'to_entries | map({key, type: (.value | type)})' data.json

External links

Exercise

내가 안 쓴 JSON 파일을 하나 골라. 벤더 config 든, 내보낸 데이터셋이든, 받아둔 API 응답이든. jq . file.jsonpython -m json.tool file.json 을 둘 다 돌려봐. 그 다음 위 다섯 버그를 하나씩 일부러 넣고 각 도구가 뭐라고 하는지 읽어. 에러 메시지마다 나는 냄새를 외워두면, 다음 번엔 10 분이 아니라 30 초 만에 잡게 돼.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.