API gateway, 웹방화벽, 웹서버(feat. 502 error)

kihongsi·2025년 11월 16일

web

목록 보기
4/4

회사 웹서비스를 운영하며 일부 고객이 특정 API 호출시 502 Bad Gateway 오류가 발생하는 케이스가 인입되었다.
최근 ajax 요청 관련 공통 모듈 관련 작업이 있었어서, 이와 관련된 문제가 아닐까 싶었지만, 동일 환경에서 간헐적으로만 문제가 발생하여 원인 파악에 어려움이 있었다.

502 에러는 서버 간 통신 문제로 발생하며, 주요 원인은 네트워크 불안정, 서버 과부하, 프록시 서버 설정 문제 등이 있다.
우선 클라우드팀에 API G/W 로그 확인을 요청했지만, 요청 로그 자체가 존재하지 않았고, 웹 서버 등 게이트웨이 이전 구간에서 요청이 차단되었음을 알 수 있었다.

확인 결과 웹 로그에 다음과 같은 오류가 찍혀있었다.

The file does not exist. {realpath=/app/lib/jquery/[특정js파일].map}

문제의 원인인가 싶었지만, 해당 404 오류는 단순한 정적 파일 요청 실패이기 때문에 502 오류의 직접적인 원인은 아니었다.

결론은 웹 방화벽(WAF)에서 해당 요청을 차단한 것으로 확인되었다.
WAF 룰이 변경되며 특정 패턴의 요청이 들어온 경우 해당 요청을 차단시키고 있었다.

웹 서비스 구조 이해하기

보통 서버 역할을 분리하여 안정성과 보안을 높이기 위해 웹 서버, WAS, Load Balancer 등의 구조를 사용한다.

[브라우저]
      ↓
[Load Balancer]
      ↓
[웹방화벽(WAF)]
      ↓
[웹서버(WebtoB)]
      ↓
[API Gateway]
      ↓
[WAS(Spring Boot 등)]

우리 서비스의 경우, 위의 구조로 운영되고 있었고, WAF 에서 요청이 Drop되었기 때문에 API G/W까지 전달되지 않았음을 알 수 있다.

1. 웹서버

정적 파일에 대한 요청을 직접 처리해서 제공
API 요청은 다음 계층(WAF 또는 API G/W)으로 전달

2. 웹방화벽(WAF)

웹 공격 탐지 및 차단
설정에 따라 SQL Injection, XSS 등의 공격패턴을 탐지한다.
직접 응답하는 Deny 방식이나, 응답없이 요청을 버리는 Drop 방식이 있고, 대부분은 공격자가 차단 이유를 모르게 하기 위해 Drop 방식을 사용한다.

3. API Gateway

백엔드 API 서비스의 출입문 역할
인증/인가, 트래픽 제어, 로깅 및 모니터링 등의 역할을 수행함
MSA 서비스의 경우, 해당 URL을 어느 서비스로 보낼지 라우팅한다. 따라서 여러 서비스가 있어도 브라우저는 하나의 Gateway 주소만 사용하면 된다!


생각보다 간단한 개념이지만, 공통 모듈 반영 등 여러 일정과 겹치며 원인을 잘못된 방향으로 생각해서 시간이 오래걸렸다.. 다음에 비슷한 문제가 발생하면 한 단계씩 짚으면서 빠르게 파악할 수 있을 것 같다~!

그리고 방화벽이나 서버 설정에 변경이 있으면 관련 팀에게 공지는 필수❗️❗️

0개의 댓글