모든 프로젝트

Completed project

Unmanned Store Cloud Native

대용량 영상 업로드와 장시간 GPU 처리를 S3, SQS, Lambda, AWS Batch로 분리한 Django 기반 처리 시스템입니다.
GitHub 저장소
Lambda가 AWS Batch EC2 GPU 작업을 제출하는 개선 구조
대표 근거SQS 이벤트를 Lambda와 AWS Batch EC2 GPU 처리로 연결한 개선 구조고정 원본

Situation

상황

대용량 영상 업로드와 장시간 GPU 처리를 하나의 요청 흐름에서 다루기 어려웠고, 초기 EC2 GPU worker 구조에서는 작업 수신과 visibility timeout 관리가 운영 부담으로 남았습니다.

Task

과제

업로드와 GPU 작업을 비동기로 분리하고, 작업이 있을 때 GPU 자원을 실행할 수 있도록 Lambda에서 AWS Batch EC2 GPU로 이어지는 구조를 설계하는 것이 과제였습니다.

Action

실행

  1. Django API가 S3 presigned URL을 발급하고 작업 메시지를 SQS로 전달하도록 업로드와 처리를 분리했습니다.
  2. 초기 EC2 GPU worker에 visibility manager를 두어 장시간 작업의 메시지 timeout을 갱신하도록 구성했습니다.
  3. SQS 이벤트를 받은 Lambda가 AWS Batch job을 제출하고 g5.xlarge 기반 EC2 GPU 환경에서 영상을 처리하도록 재설계했습니다.
  4. Terraform에 Batch compute environment, job queue, job definition과 재시도 및 DLQ 관련 구성을 관리했습니다.

Result

결과

장시간 작업 경계 명확화

S3 업로드, SQS 전달, Batch GPU 처리 단계를 분리하고 timeout과 실패 처리를 코드와 Terraform으로 추적할 수 있게 했습니다.

Evidence story

근거 갤러리

각 자료를 설계 판단, 실행, 확인 결과의 흐름으로 연결했습니다.

상시 worker에서 작업 단위 실행으로

상시 EC2 worker가 메시지를 직접 소비하는 구조를 Lambda가 Batch job을 제출하는 구조로 변경했습니다.

초기 구조EC2 GPU worker가 SQS를 직접 소비하던 초기 구조고정 원본
개선 구조 핵심 근거SQS 이벤트를 Lambda와 AWS Batch EC2 GPU 처리로 연결한 개선 구조고정 원본

관련 근거와 소스