AWS EC2 502 Bad gateway 및 API Timeout 에 관련된 문제 해결
현재 필자가 운영하고 있는 거의 모든 서비스는 AWS를 통해 구축되었다.
어플리케이션의 특성상 대용량 파일을 처리할 일이 많다. ( 대부분 비디오 파일 )
초기에 시스템을 구축할때 영상의 용량이 길어봤자 30초 정도로 테스트 해보고 문제없다고 판단해 시스템을 모두 구축한뒤 배포하고 나서 유저가 사용할때 쯤 아니나 다를까 큰 문제가 터졌다.
사용하고 있었던 서비스는 Elastic Beanstalk 환경으로 배포한 AWS의 EC2 , Load Balancer , Nginx 이었다.
timeout에 대한 이해와 nginx ec2 등 모든 시스템에 대한 이해도가 거의 없었기 때문에 이걸 내가 해결 할수 있을지도 의문이었고
유저는 현재 사용하고 있는데 빨리 문제를 해결해야 하는 입장에서 정말 너무나 많은 스트레스를 받았던것 같다.
AWS 는 API 를 호출하고 대략 30~40초가 지난 후 response 를 주지 않으면
timeout 에러가 난다. 필자의 BadGateway 는 이 timeout 이 원인이 었다.
502 BadGateway = Proxy 문제가 거의 대부분 ( 지배적임 )
아마 EC2를 사용하고 있다면 기본적인 Reverse Proxy 는 nginx 일것이다.
첫번째 근본적인 문제는 내가 테스트 서버 환경으로 사용하던 컴퓨터 성능을 리얼서버에 그대로 사용했다는 거다.
1기가 짜리 메모리를 쓰니까 서버가 터져버릴수 밖에 없었다.
EC2 Storage 부분에 메모리를 추가해줬다.
EC2 Windows 인스턴스의 EBS 루트 볼륨 확장
Internet Explorer에 대한 AWS 지원이 07/31/2022에 종료됩니다. 지원되는 브라우저는 Chrome, Firefox, Edge 및 Safari입니다. 자세히 알아보기
aws.amazon.com
두번째 문제는 Load Balancer 의 기본 idle timeout 은 30초였다.
영상을 올려봤으면 알겠지만 영상을 올리기에 30초는 너무 적은 시간이다.
세번째 문제는 Nginx 의 기본설정도 바꿔주지 않으면 기본 설정 용량 이상은 핸들링 하지 못한다.
디폴트의 한계 용량이 몇이었는지는 자세하게 기억이 나지않는다 ㅜ..
아래는 내가 참고한 사이트다.
Elastic Beanstalk Linux 플랫폼 확장 - AWS Elastic Beanstalk
Elastic Beanstalk Linux 플랫폼 확장 AWS Elastic Beanstalk Linux 플랫폼은 애플리케이션 개발 및 실행을 지원하기 위해 다양한 기능을 기본적으로 제공합니다. 필요한 경우 여러 가지 방법으로 플랫폼을 확
docs.aws.amazon.com
위의 AWS 설정만으로는 영상 핸들링에 대한 기본적인 해결책이라고 할 수 없다.
사실 이 글은 비동기 큐 스택 구현을 위한 기본 설정 밖에 되지 않는다.
예를 들어 폰에서 고용량 영상을 올리는데 timeout 을 1시간으로 잡아줬다고 한들 1시간동안 올라가는 걸 기다릴 수는 없다.
그래서 우리는 비동기 큐를 이용한 업로드가 필요하다.
고(golang)를 이용한 비동기 큐 구현
myungsworld.tistory.com