얼마 전 회사 프론트직원분께서 staging admin에서 504에러가 뜬다고 찾으셨다.
그래서 바로 staging Swagger에서 관련 API를 날려보니 다음과 같이 나왔다.
확인해보니 504 Time-out 에러가 나왔다.
이제 차근차근 해결을 해보자 !
해결 1 - axios timeout 설정
해당 API 부분은 axios로 코드를 불러와서 파싱한 후 리턴하는 코드다.
axios 할 때 일정 시간을 초과하면 504에러가 뜰 수 있다는 얘기가 있어서,
우선 time-out 시간을 늘려주기로 했다.
갑자기 504에러가 뜬 이유는 axios로 받아오는 chatGpt 관련 처리시간이 늦어진듯 하다.
그래서 timeout 을 10분으로 넉넉히 변경하였다.
timeout : 600000
로컬에서 코드를 돌렸을때엔 100초정도 뒤에 504에러없이 잘 출력되었다.
그래서 바로 staging로 배포를 하고,
staging Swagger에서 동일하게 해당 API를 돌려보았다.
엥?
다시 이전과 같은 504 에러가 나왔다.
로컬에선 정상적으로 실행됬는데 staging에서 에러가 뜨는거 보면,
유추해볼만한 케이스는 두가지가 있다.
1. Nginx의 타임아웃 설정
2. AWS ELB의 타임아웃 설정
이제 1, 2번을 하나씩 해결해보자.
해결 2 - Nginx timeout 설정
AWS EC2에서 해당 인스턴스를 찾고 SSH 터미널을 사용해 접속하자.
이제 Nginx의 메인 설정 파일을 열어보자.
sudo vi /etc/nginx/sites-available/default
// 뒤에 default 자리엔 server_name을 써주면 된다.
Nginx 설정 파일로 이동했으면 사진처럼 location / 으로 이동해서 timeout 코드를 추가해 주자.
location / {
...
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
send_timeout 600s;
...
}
시간은 넉넉히 10분으로 변경했다.
이제 Nginx 설정파일을 저장 ":wq" 하고 나오자.
sudo nginx -s reload
그리고 해당 명령어로 Nginx를 재시작 시켜주면 설정 끝이다.
이제 다시 Staging Swagger로 가서 해당 API를 실행 시켜주자.
엥?
혹시나 Nginx 설정 코드가 반영이 안되는건가 싶어서 테스트 해보자.
location / {
...
proxy_connect_timeout 3s;
proxy_send_timeout 3s;
proxy_read_timeout 3s;
send_timeout 3s;
...
}
다시 설정 SSH 터미널로 가서 Nginx 설정을 다음과 같이 3초로 바꿔주었다.
그러고 Nginx를 재시작하고 Staging Swagger에서 API를 실행해보니
정확히 3초만에 504 Error가 나왔다..!
그러면 이제 Nginx time-out 설정은 잘 반영되는걸 확인했으니 다시 원래대로 600초로 변경해주자.
해결 3 - ELB timeout 설정
다른게 전부 이상없으니 이제 마지막으로 ELB time-out 설정을 바꿔보자.
EC2 -> 로드 밸런서 -> 해당 ELB
이렇게 이동해 ELB로 들어간다.
스크롤 내려서 속성에서 편집에 들어가서
"유휴 제한 시간" 을 사진처럼 600초로 맞춰주자.
이렇게 ELB timeout 설정은 간단하게 끝났다.
Staging Swagger로 이동해서 기도를 하며 API를 날려보자.
....!!!
이제 정상적으로 504 Error 없이 해결되었다.
웹에가서 한번 확인해보니, 80초 가량 걸려서 에러없이 잘 출력되는걸 확인했다 !
해결완료 ^___^
'Error' 카테고리의 다른 글
[Error] req.param / req.query / req.body 이리저리 헤매기 (0) | 2023.03.12 |
---|