본문 바로가기
Programming/Node.js

[Node.js] PayloadTooLargeError: request entity too large

by SpiralMoon 2019. 8. 11.
반응형

PayloadTooLargeError: request entity too large.

Node.js에서 PayloadTooLargeError가 발생하는 경우와 해결법에 대하여 알아보자.


 

발생 원인

보통 express를 이용하여 Node.js에서 웹 서버를 구축할 때

 

const app = express();

...

app.use(express.json()); // 혹은 bodyParser.json()
app.use(express.urlencoded()); // 혹은 bodyParser.urlencoded()

...

 

request의 내용을 파싱하여 라우터가 이용할 수 있도록 위와 같이 두 가지 파서(body-parser 패키지에 있음)를 등록하게 된다. PayloadTooLargeError가 발생하는 원인은 파서가 읽을 수 있는 데이터 허용치보다 request가 보낸 데이터의 크기가 커서 정상적으로 파싱을 할 수 없을 때 발생하는 에러이다.

 

기본값으로는 .json()과 .urlencoded()가 100kb 까지만 파싱할 수 있도록 설정되어 있다.


해결 방법

1. parser limit 조절

 

app.use(express.json({
    limit : "50mb"
}));
app.use(express.urlencoded({
    limit:"50mb",
    extended: false
}));

위와 같은 방법으로 limit 옵션을 추가로 주어 파싱 허용치를 증가 시킬 수 있다.

 

2. 통신 데이터 포맷 변경 (1번 방법으로 해결이 안되는 경우)

1번 방법으로 파싱의 허용치를 크게(MB 단위) 늘렸음에도 동일한 오류가 발생한다면 request의 body가 엄청나게 큰 상황이므로(문자열로만 MB 단위를 만들어냈다는 얘기므로 정상적인 상황은 아님) 통신 데이터 포맷을 변경해서 물리적으로 용량을 줄이는 방향을 선택해야한다.

 

예를 들어 통신 포맷을 json 문자열 대신 protobuf로 변환된 binary로 통신한다던지, 압축을 한다던지...


참고 자료

 

GitHub - expressjs/body-parser: Node.js body parsing middleware

Node.js body parsing middleware. Contribute to expressjs/body-parser development by creating an account on GitHub.

github.com

반응형

댓글