본문으로 바로가기
검색 (Ctrl+K)

블로그 터진거 어떻게 해결했는지 짧게 적어보자

# 블로그 터진거 어떻게 해결했는지 짧게 적어보자

글 36개 중 17개가 404였다. 노션엔 멀쩡히 있는데 배포된 데서만 안 열렸다.

원인을 한 줄로 줄이면 이거다.

typescript
} catch (error) {
  notFound();
}

notFound()가 예외를 던지는 것처럼 생겼는데 Next 입장에선 아니다. "이 경로의 정답은 404"라는 정상적인 렌더링 결과다. 그래서 노션이 429를 뱉으면 코드가 그걸 잡아서 404 HTML을 만들어 저장하고, 빌드는 성공으로 끝난다.

빌드 산출물을 직접 열어보니 확실했다. 파일이 없어서 404가 난 게 아니라 404라는 내용의 파일이 만들어져 있었다.

고친 건 두 갈래다.

예방은 에러를 구분한 것. 노션이 object_not_found로 답했을 때랑 주소 형식이 틀렸을 때만 404를 내고, 나머지는 다시 던진다. 던지면 빌드 중엔 빌드가 깨져서 바로 눈에 띄고, 런타임에선 기존 페이지가 그대로 남는다. 404로 덮어쓰는 경로 자체가 없어진다.

치료는 호출량을 줄인 것. 에러 처리만 고치면 앞으로 안 생기게 막을 뿐이지 이미 저장된 404는 그대로다. 새로 배포하면 36개를 처음부터 다시 만드는데, 그때 한도에 안 걸려야 살아난다. 그래서 썸네일을 빌드할 때 미리 계산하고, 목록 조회를 프로세스 단위로 공유하고, 재시도를 늘렸다. 배포해보니 경고 0번에 36개 전부 정상이었다.

둘 중 하나만 했으면 반쪽이었다. 에러만 고치면 빌드가 계속 깨지고, 호출량만 줄이면 언젠가 또 몰릴 때 다시 굳는다.