웹방화벽에서 페이로드 개수 초과 오류 발생 원인과 해결 방법

2025. 10. 22. 21:29Project/Server & Infra

API 요청을 보내다 보면,
정상적으로 동작하던 요청이 갑자기 웹방화벽(WAF) 에 의해 차단되면서
다음과 같은 메시지를 본 적이 있을 겁니다.

🚫 “Payload exceeds limit”
🚫 “Too many parameters in request”
🚫 “Request blocked by Web Application Firewall”

이 글에서는 웹방화벽에서 페이로드 개수 초과가 발생하는 원인과,
API 요청 크기와의 관계, 그리고 해결 방법까지 정리해보겠습니다.


🧩 1. 페이로드(Payload)란 무엇인가?

HTTP 요청(Request)에는 헤더와 바디(body)가 있습니다.
이 중 body에 담긴 실제 데이터 부분을 바로 페이로드(Payload) 라고 부릅니다.

예를 들어 이런 JSON 요청을 보낸다면,

{
  "userId": "abc123",
  "items": [
    { "id": 1, "name": "apple" },
    { "id": 2, "name": "banana" }
  ]
}

위 JSON 전체가 바로 페이로드입니다.
즉, 서버로 전달되는 실제 데이터 덩어리라고 보면 됩니다.


⚠️ 2. “페이로드 개수 초과” 오류의 의미

웹방화벽에서 말하는 “페이로드 개수”는 바이트(byte) 가 아니라
요청 본문에 포함된 데이터 항목(파라미터, 배열 요소 등)개수를 의미합니다.

예를 들어 이런 요청이라면 👇

{
  "item1": "value1",
  "item2": "value2",
  ...
  "itemN": "valueN"
}

이 데이터 안의 key-value 쌍이 수천 개 이상이 되면,
웹방화벽은 이를 비정상적 대량 요청으로 판단해 차단할 수 있습니다.

즉, “페이로드 개수 초과”는 단순히 용량이 크다기보다,
데이터 구조가 지나치게 크거나 복잡하다는 의미에 가깝습니다.


📏 3. 실제 요청 크기(body size)와의 관계

페이로드의 크기는 데이터의 양과 구조에 따라 달라지지만,
보통 아래와 같이 계산할 수 있습니다.

  • key 평균 길이: 10자
  • value 평균 길이: 20자
  • JSON 문법 기호 포함: 약 35바이트 × 개수

따라서 1,000개 항목이면 약 35KB,
5,000개 항목이면 약 175KB 정도가 됩니다.

즉, “페이로드가 많다”는 건 보통 수십~수백 KB 단위의 요청 body라는 뜻입니다.


🧱 4. 웹방화벽(WAF)마다 다른 제한 기준

WAF는 보안 정책에 따라 허용되는 요청의 크기나 파라미터 개수를 제한합니다.

WAF 종류 기본 제한 기준 초과 시 동작

F5 ASM / BIG-IP 파라미터 2000개 전후 Request Block
ModSecurity (Apache/Nginx) 기본 1000개 403 Forbidden
Cloudflare WAF Body 100MB 제한 413 Request Entity Too Large
AWS / Naver Cloud WAF 정책에 따라 다름 Custom Rule Block

⚙️ 대부분의 WAF는 “파라미터 개수” 또는 “body 크기” 중 하나라도 초과되면 요청을 차단합니다.


🧠 5. 왜 이런 제한이 필요한가?

웹방화벽이 이런 제한을 두는 이유는 보안상 공격 탐지 때문입니다.

  • 공격자가 수천 개의 파라미터를 보내면
    SQL Injection, XSS, DoS 공격 패턴을 탐지하기 어려워지기 때문이죠.
  • 너무 큰 요청은 서버 리소스를 과도하게 점유하기 때문에
    서비스 안정성을 위해 제한이 필요합니다.

🛠️ 6. 해결 방법 4가지

요청 데이터 분할 전송

대량 데이터를 한 번에 보내지 말고 여러 번에 나눠 전송하세요.

const chunkSize = 500;
for (let i = 0; i < data.length; i += chunkSize) {
  const chunk = data.slice(i, i + chunkSize);
  await axios.post('/api/items', chunk);
}

불필요한 필드 제거

서버에서 필요하지 않은 데이터는 미리 필터링하세요.
예: UI용 값, 중복 데이터 등은 제외.

WAF 정책 조정 요청

WAF 관리자에게 다음 항목 조정을 요청할 수 있습니다.

  • maxParameterCount (허용 파라미터 수)
  • maxPostSize, client_max_body_size (요청 body 크기)

데이터 압축 전송

요청 헤더에 Content-Encoding: gzip 을 추가하면 전송량을 줄일 수 있습니다.


🧾 7. 서버별 기본 제한 설정 참고

구성 요소 설정 키 기본값

Spring Boot (Tomcat) server.tomcat.max-http-post-size 2MB
Nginx client_max_body_size 1MB
Apache LimitRequestBody 0 (무제한, 단 모듈별 차이)

WAF 이전 단계에서 이미 서버 설정이 작게 잡혀 있다면
WAF보다 먼저 요청이 차단될 수도 있습니다.


🚀 8. 결론

“페이로드 개수 초과”는 단순히 용량이 크다는 의미가 아니라,
서버에 비정상적으로 많은 데이터를 한 번에 보내고 있다는 신호입니다.

  • 웹방화벽은 파라미터 수, JSON 배열 길이, body 크기 등을 기준으로 요청을 차단합니다.
  • 실제 body 크기는 보통 수십~수백 KB 수준이며,
    구조가 복잡할수록 차단될 확률이 높습니다.
  • 가장 좋은 해결책은 요청을 나누고, 불필요한 데이터를 줄이는 것입니다.