Situation
상황
대용량 영상 업로드와 장시간 GPU 처리를 하나의 요청 흐름에서 다루기 어려웠고, 초기 EC2 GPU worker 구조에서는 작업 수신과 visibility timeout 관리가 운영 부담으로 남았습니다.
Task
과제
업로드와 GPU 작업을 비동기로 분리하고, 작업이 있을 때 GPU 자원을 실행할 수 있도록 Lambda에서 AWS Batch EC2 GPU로 이어지는 구조를 설계하는 것이 과제였습니다.
Action
실행
- Django API가 S3 presigned URL을 발급하고 작업 메시지를 SQS로 전달하도록 업로드와 처리를 분리했습니다.
- 초기 EC2 GPU worker에 visibility manager를 두어 장시간 작업의 메시지 timeout을 갱신하도록 구성했습니다.
- SQS 이벤트를 받은 Lambda가 AWS Batch job을 제출하고 g5.xlarge 기반 EC2 GPU 환경에서 영상을 처리하도록 재설계했습니다.
- Terraform에 Batch compute environment, job queue, job definition과 재시도 및 DLQ 관련 구성을 관리했습니다.
Result
결과
GPU worker 구조 전환
상시 EC2 worker가 메시지를 직접 소비하는 구조를 Lambda가 Batch job을 제출하는 구조로 변경했습니다.
장시간 작업 경계 명확화
S3 업로드, SQS 전달, Batch GPU 처리 단계를 분리하고 timeout과 실패 처리를 코드와 Terraform으로 추적할 수 있게 했습니다.