블로그
AWS Spot Instance를 활용하여 영상 병합 비용 최적화하기
- 등록일
- 2025-01-20 14:36:51
- 조회수
- 37
안녕하세요. 뭐든지 다 하는 소프티어 개발자 hhssung입니다.
이번 글에서는 영상 병합 작업을 고도화하면서 컴퓨팅 환경을 AWS Fargate에서 AWS Spot Instance로 전환한 이유와, 이를 통해 얻은 비용 최적화 경험을 공유하고자 합니다. 이 글을 읽고 특정 작업에 대해 AWS Spot Instance 도입을 고려해 보셨으면 합니다.
배경
소프티어에서는 현재 비대면 평가 시 화상 감독을 진행하고 있습니다. 화면 공유, 웹캠, 모바일 감독을 하고 있는데요, 평가 종료 후 응시자분들의 자동 녹화된 영상들을 일괄 병합한 후 확인하는 작업도 진행하고 있습니다. (녹화 및 병합된 영상은 한 달 후 일괄 삭제됩니다.)
영상들은 녹화될 때 5초 단위로 S3에 저장되며, 이 5초짜리 영상들을 병합하는 로직이 필요합니다. 처음에는 AWS Fargate(4 CPU, 온디맨드) 기반으로 배치 컴퓨팅 환경을 구성해 작업을 진행했습니다. AWS Fargate는 인프라 관리를 따로 할 필요 없이 Docker 컨테이너를 실행할 수 있어 편리했지만, 비용이 EC2보다 상대적으로 비싸고 병합 속도도 느렸습니다. 초기에는 빠르게 기능을 만드는 데 초점을 두었기 때문에 이 문제를 오랫동안 해결하지 않았습니다.
2024년 3월, 서울 리전에서 미디어 파이프라인 기능(녹화 및 병합)을 지원한다는 소식을 듣고 일부 다른 리전에 있던 인프라를 옮기는 작업을 진행하게 되었습니다.
해당 작업을 진행하면서 높은 영상 병합 비용 문제를 재인식하게 되었고, 여러 가지 방법을 검토해 보았습니다.
처음에는 AWS 자체 기능을 고려했습니다. AWS에서는 Media Capture Pipeline(녹화) 외에 Media Concatenation Pipeline(병합) 기능도 제공하고 있는데요, 다음과 같은 이유로 사용하지 않았습니다:
- 비용이 너무 비쌌습니다. 서울 리전 기준으로 녹화는 시간당 약 $\$$0.10인데 병합은 시간당 $\$$0.12였습니다. 배보다 배꼽이 더 큰 셈이죠.
- 인터넷 연결이 불안정하여 끊기는 응시자들이 많았는데, 자체 기능을 사용할 경우 이를 고려하지 않고 연속된 영상으로 병합하여 저희 요구사항과 맞지 않았습니다.
다른 방법을 찾던 중, Spot Instance를 알게 되어 해당 방법으로 전환하게 되었습니다.
AWS Spot Instance란?
AWS Spot Instance는 예비 EC2 용량을 일반적인 온디맨드 인스턴스보다 훨씬 저렴하게(최대 90% 할인) 사용할 수 있는 서비스입니다. 데이터 센터에 유휴 컴퓨팅 리소스가 존재할 때, AWS는 이를 할인된 가격에 제공합니다.
Spot Instance를 적용하기 전, 가장 적합한 EC2 타입을 테스트했습니다. 온디맨드 인스턴스에서 테스트한 결과, 8 CPU를 가진 C타입(컴퓨팅 성능에 특화) 인스턴스가 비용 대비 속도 및 효율이 가장 높았습니다. 16 CPU부터는 병합 속도가 크게 개선되지 않아 비용 대비 효율이 높은 8 CPU 인스턴스를 선택했습니다.
테스트를 마친 후 Spot Instance로 전환하여 개발 환경의 컴퓨팅 환경을 변경했습니다. 하지만 Spot Instance를 처음 활용하다 보니 예상하지 못했던 문제가 발생했습니다.
문제 1) Spot Instance 용량 부족
처음에는 단일 c7i.2xlarge 인스턴스로 컴퓨팅 환경을 구성했습니다. 그러나 아무리 기다려도 작업이 시작되지 않았습니다. 원인을 찾아보니 해당 인스턴스의 남은 EC2 용량이 매우 부족했습니다.
이를 확인하기 위해 AWS에서는 Spot Instance 어드바이저 기능을 제공합니다. 이 기능은 인스턴스 유형별 중단 빈도를 제공하며, 이를 통해 특정 인스턴스가 얼마나 자주 중단될 수 있는지 예측할 수 있습니다.
아래 사진과 같이 c7i.2xlarge 인스턴스의 중단 빈도가 20%를 넘는다는 것을 알게 되었고, 중단 빈도가 낮은 다른 C타입 인스턴스를 컴퓨팅 환경에 추가함으로써 문제를 해결할 수 있었습니다. (다른 C타입 인스턴스의 효율이 살짝 떨어지긴 했지만, 기존 대비 여전히 큰 비용 절감 효과가 있었습니다.)
문제 2) 잦은 작업 중단
Spot Instance는 저렴한 대신 데이터 센터의 유휴 컴퓨팅 리소스가 부족할 때 언제든지 중단될 수 있습니다. 기존 Fargate 환경에서는 중간에 작업이 멈출 일이 없어 단순히 영상들을 순차적으로 병합했지만, Spot Instance를 적용할 경우 작업 중단 상황을 고려해야 했습니다.
이를 해결하기 위해 병합 작업 시 체크포인트를 추가하여 중간 지점부터 다시 시작할 수 있도록 로직을 변경했습니다. 중간 진행 상황을 수시로 S3 storage에 저장하여, 중단되었을 때 다른 인스턴스에서 이어서 작업을 진행할 수 있도록 개선해 내결함성을 강화했습니다.
결론
Spot Instance로 전환한 결과, 기존보다 약 4배 이상의 비용 절감 효과를 얻을 수 있었습니다. 전환 전에는 화상 연결 + Media Pipeline 비용 대비 약 27~28%를 Fargate 비용으로 지불했지만, 전환 후에는 약 7%만 지불하게 되었습니다.
AWS Spot Instance는 적절하게 사용하면 온디맨드 인스턴스보다 매우 저렴하게 EC2를 사용할 수 있는 좋은 기능입니다. 데이터 분석 또는 대규모 반복 테스트와 같이 중단에도 유연하게 대응할 수 있는 작업에 적합합니다. 다만 언제든지 인스턴스가 중단될 수 있으므로, 해당 특성을 파악하여 내결함성이 좋은 작업을 구성하는 것이 중요합니다. AWS EventBridge 등을 활용해 중단 알림을 받아 대응하는 것도 좋은 방법입니다.
이번 작업을 통해 비용을 크게 절감하면서 효율적인 배치 컴퓨팅 환경을 구성할 수 있었습니다. AWS 비용 최적화 시 이 글이 많은 도움이 되길 바랍니다. 감사합니다.