이 글은 이런 분께
- 내가 만든 게 “정상적으로 쓸 때”만 확인해봤지, “이상하게 쓰면 어떻게 되는지”는 안 궁금했던 분
- Astro·마크다운 기반 사이트를 만들고 있는데, 글 하나가 잘못되면 사이트가 어떻게 되는지 궁금한 분
- 에러 화면을 무서워하지 않고 직접 눈으로 확인해보고 싶은 분
Before — GPT는 괴롭혀봤는데, 사이트는 안 해봤다
3주차에 GPT를 일부러 괴롭혀본 적이 있다. 빈 값, 중간 취소, 엉뚱한 값 세 가지로 커스텀 GPT를 스트레스 테스트했었다. 그런데 정작 내가 매일 글을 쓰고 있는 이 사이트는 한 번도 그렇게 테스트해본 적이 없었다. “위키 글 frontmatter(글 맨 위 정보 칸)에 이상한 걸 넣으면 사이트가 어떻게 되지?”가 궁금해졌다.
어떻게 — 진짜 위키 폴더에 이상한 파일 3개를 하나씩 넣어봤다
가짜 위키 글을 하나 만들어서 npm run build(사이트 전체를 검사하는 명령)로 하나씩 돌려보고, 확인하자마자 바로 지웠다. 커밋 전이라 실제 사이트엔 전혀 안 올라갔다.
테스트 1. 빈 값 — 제목·날짜를 비워둠
title:
date:
종류: 사례
주차: 4
공개: true
결과: 사이트 전체 빌드가 멈췄다. 에러 메시지는 title: Expected type "string", received "null" — 어떤 필드가 문제인지는 알려줬다.
테스트 2. 중간에 취소 — frontmatter를 닫는 ---를 안 쓰고 멈춤
결과: 이것도 빌드가 멈췄는데, 에러 메시지가 제일 불친절했다. 어느 필드인지도 안 알려주고 can not read a block mapping entry라는 내부 용어만 나왔다. 셋 중 제일 원인 찾기 어려운 케이스였다.
테스트 3. 엉뚱한 값 — 있을 수 없는 값들을 넣음
date: 어제
종류: 저녁밥
주차: 많이
공개: 아마도
결과: 빌드가 멈춘 건 같은데, 에러 메시지는 셋 중 제일 친절했다. 틀린 필드 4개를 전부 하나씩 짚어주고, 뭘 기대했는데 뭐가 왔는지까지 알려줬다.
InvalidContentEntryFrontmatterError 종류: Invalid enum value. Expected ‘로드맵’ | ‘개념’ | ‘사례’ | ‘회고’, received ‘저녁밥’ 주차: Expected type “number”, received “string” 공개: Expected type “boolean”, received “string”
막힘 → 해결: 화면 캡처가 또 안 됐다
에러 화면을 캡처해서 보여달라고 했는데, 이번에도 캡처 도구가 실패했다(3주차에 이어 두 번째). 대신 학습메이트가 화면 안의 에러 텍스트만 코드로 뽑아서 먼저 보여줬고, 그다음 내가 직접 http://localhost:4321을 열어서 빨간 에러 화면을 눈으로 확인했다. 학습메이트가 파일을 다시 넣자 화면이 자동으로 새로고침되면서 실시간으로 바뀌는 게 보였다.
After — 세 가지 다 안전망이 있었다
셋 다 “일부 페이지만 이상해지는” 게 아니라 사이트 전체 빌드가 통째로 멈췄다. 처음엔 무섭게 들렸는데, 사실 이게 안전장치였다. 잘못된 글이 실수로 사이트에 올라가는 일 자체가 원천 차단되는 거니까(Vercel도 빌드가 실패하면 배포를 안 한다). 다만 “중간에 쓰다 만 파일”만 에러 메시지가 유독 불친절해서, 이런 실수를 하면 원인 찾는 데 시간이 걸릴 수 있다는 걸 알아뒀다.
배운 것 / 재사용 자산
“안 무너지네”보다 중요한 건 “무너질 때 어떻게 무너지는지”를 아는 것이다. 세 가지 다 빌드가 멈췄다는 결과는 같았지만, 에러 메시지의 친절함은 하늘과 땅 차이였다. 제일 흔하게 할 실수(파일 쓰다가 중간에 멈추는 것)가 하필 제일 안 친절한 에러라는 걸 미리 알아두면, 나중에 실제로 그 에러를 만났을 때 당황하지 않고 “아, 이거 닫는 표시 빠뜨렸나?”부터 의심해볼 수 있다.
재사용 프롬프트 — 내가 만든 것 스트레스 테스트
내가 만든 걸 일부러 이상하게 써보면서 문제를 찾아줘.
빈 값으로 넘기기, 중간에 취소하기, 엉뚱한 걸 넣기 —
그럴 때 어떻게 되는지 확인해줘.