skip to content
Q
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로 설정했다.

코드

main.ts
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 같은 곳에 저장해야 할지, 그렇다면 또 파싱하고 그런 과정으로 인해 스크랩을 하기 힘들 것 같다.

일단 위와 같이 해결했지만 더 좋은 방안을 찾으면 업데이트해야겠다.