2025. 10. 22. 21:29ㆍProject/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 수준이며,
구조가 복잡할수록 차단될 확률이 높습니다. - 가장 좋은 해결책은 요청을 나누고, 불필요한 데이터를 줄이는 것입니다.
'Project > Server & Infra' 카테고리의 다른 글
| Apache VirtualHost란? 포트 분기와의 차이 (실무 관점 정리) (0) | 2025.12.15 |
|---|