Error - 장시간 요청 Cloudfront timeout
| topics | 400-인프라 & 아키텍처 402 클라우드 403 시스템 설계 |
| types | 에러해결 최적화 |
| contexts | 프로젝트 |
| tags |
현 서비스 상황
서비스 구조가 이렇게 되어있다.
발생한 문제
client : pending으로 요청이 가다가 504 에러
server > nginx : 499에러
499 에러는 client가 요청을 닫앗다 즉 취소했다는 에러코드입니다
504 에러는 gateway timeout에러를 의미합니다
해결
사용중인 client와 spring에서의 timeout시간을 최대로 늘려놓았음에도 불구하고 같은 에러가 중복되었다.
따라서 중간에 프록시되는 cloudfront를 의심하게 되었다.
cloudfront공식 문서에서 cloudfront에 504문제가 나타는 경우를 2가지로 정의했다.
- 오리진이 CloudFront에 HTTP 504 상태 코드를 반환했습니다.
- 요청이 만료되기 전에 오리진이 응답하지 않았습니다.
우리는 이 2번째인 요청이 만료되기 전 origin이 응답하지 않는 문제가 발생햇던것이다.
aws 공식 문서에서 cloudfront의 originReadTimeout이 디폴트로 얼마나 있는지 확인해 볼 수 있엇다
OriginReadTimeout
Specifies how long, in seconds, CloudFront waits for a response from the origin. This is also known as the origin response timeout. The minimum timeout is 1 second, the maximum is 120 seconds, and the default (if you don't specify otherwise) is 30 seconds.
그렇다 디폴트로 30초이고 최대 2분까지 가능하다.
당시 api는 ai모델을 이용하는 요청이였으므로 평균 2.5분이 걸렸다 즉 기존 http를 이용한 api로는 불가능하다고 판단하였다.
따라서 ai서비스 진행상황도 유저가 트래킹할 수 있도록 웹소켓으로 데이터를 받는 것으로 수정하였다.