[NestJS] 413 payload too large 에러 해결기
/ 3 min read
Table of Contents
발생한 일
현재 프로젝트 중 Chrome Extension에서 스크랩 버튼을 누르면 현재 탭의 페이지를 마크다운으로 변환 후 백엔드로 전달해서 스크랩 저장을 하는 로직이 있다.
나는 이 구조가 잘못되었다고 생각한 적 없이 그냥 잘되겠지 하면서 있었는데, 팀원이 위키피디아 글 스크랩 시 413 Payload too large
에러가 발생한다고 했다!
프론트는 같이 하고 있지만 백엔드는 나 혼자 하기에…
운영 서버에서도 지금 이슈가 있다는 거기에… ASAP하게 해결했다.
문제 원인
원인은 알아보니 NestJS의 기본 request limit 때문이었다. 기본 사이즈가 100kb인데 스크랩한 위키피디아는 104kb여서 에러가 발생했다.
해결 방법
결국 NestJS에서 JSON, URL-Encoded 바디의 허용 크기를 늘려준다! 보통 5-10MB로 맞추던데, 10MB 정도면 영어로 1,000만, 한국어로 500만이니 10MB로 해두면 큰 문제 없이 대부분 스크랩될 것 같아서 10MB로 설정했다.
코드
import { NestFactory } from "@nestjs/core";import { AppModule } from "./app.module";import * as bodyParser from "body-parser";
async function bootstrap() { const app = await NestFactory.create(AppModule);
// 요청 본문 용량 상향 조정 app.use(bodyParser.json({ limit: "10mb" })); app.use(bodyParser.urlencoded({ limit: "10mb", extended: true }));
await app.listen(3000);}bootstrap();
결론
일단 이렇게 해결했는데 맞는가 싶기도 하다. 현재 payload를 볼 때 오히려 이미지 링크가 너무 긴 경우가 많은데, 이걸 분리해서 S3 같은 곳에 저장해야 할지, 그렇다면 또 파싱하고 그런 과정으로 인해 스크랩을 하기 힘들 것 같다.
일단 위와 같이 해결했지만 더 좋은 방안을 찾으면 업데이트해야겠다.