AWS 기술 블로그
Amazon IVS를 활용한 볼라의 라이브 커머스 구축 사례
볼라(Volla)는 대한민국 대표 컬렉터 플랫폼으로 스포츠카드, 트레이딩카드, 아트토이 등 다양한 분야의 컬렉터들이 라이브 방송을 통해 거래 플랫폼인 와이스(WYYYES) 서비스를 운영하고 있습니다. 서비스 오픈 후 와이스를 통해 1년 반 동안 약 40만 건의 거래가 이루어졌으며, 월간 1,500여 회 이상의 라이브 방송을 통해 일 2천 건 이상의 경매가 진행되고 있습니다. 전 세계 컬렉팅 시장은 코로나19 이후로 크게 성장했으며, 개인의 취향이 세분화되면서 와이스 또한 지속적으로 성장하고 있습니다.
배경
볼라에서는 실시간 라이브 스트리밍 서비스 기술을 활용한 실시간 경매 애플리케이션 와이스를 개발하여 빠르게 비즈니스에 대한 실험을 수행하고자 했고, 실시간 스트리밍 기술을 빠르게 구축하기 위한 솔루션을 찾고 있었습니다.
다양한 동영상 스트리밍 서비스 솔루션과 구축 비즈니스 모델들이 존재하지만, 초기 스타트업인 볼라의 기업 규모와 가용한 자원 내에서 실시간 스트리밍 서비스를 위한 인프라를 직접 구축하기에는 어려운 상황이었고, 적은 인원으로 개발과 운영을 병행할 경우 많은 업무 부하가 예상되었습니다.
당면 과제
라이브 스트리밍 서비스를 위해서는 아래와 같은 요소들이 필요합니다.
- 송출자: OBS와 같은 송출 툴을 사용하여 촬영한 동영상, 소리를 Amazon Interactive Video Service(Amazon IVS) broadcast SDK를 이용하여 RTMPS(RTMP Secure) / WebRTC 등의 프로토콜을 통해 스트리밍 인프라에 전달해 줘야 합니다.
- 스트리밍 인프라 관리 서비스: 송출자에게서 받은 신호를 디코딩/인코딩 처리를 하여 수신자가 받을 수 있도록 준비를 해주고, 수신자가 요청을 하면 준비된 콘텐츠를 전달합니다. 위 작업을 하기 위한 파이프라인-채널을 항상 유지할 수 있어야 합니다.
- 수신자: 스트리밍 인프라 서비스가 전달해 준 동영상을 HLS 등의 전달 프로토콜에 따라 Amazon IVS Player SDK를 활용하여 플레이어로 재생합니다.
위 요소들은 기존의 클라우드 서비스들을 이용해서 구현이 가능하지만, 각 요소들을 구현하고 직접 운영하는데 아래와 같은 어려운 점들이 있었습니다.
- 송출단과 수신단 클라이언트들을 만들기 위해서는 각 플랫폼마다 플레이어, 송출 프로그램을 담당할 인력과 개발 공수를 필요로 합니다. 또한 모든 송수신 상황에서의 오류를 직접 해결해야 하고, 스트리밍 인프라를 모니터링해야 하는 등의 관리 포인트가 증가하게 됩니다. 이러한 클라이언트의 개발 및 관리는 초기 스타트업인 볼라의 적은 인원과 자원으로는 큰 부담이 되었고, 볼라의 핵심 비즈니스 로직 구현을 늦출 수 있었습니다.
- 송출 시스템 자체를 구현하게 되면 지속적인 개발과 유지보수가 필요합니다. 게다가 언제 들어올지 모르는 라이브 스트리밍을 위해 스탠바이 상태로 시스템을 유지하게 되면서 인프라 비용 낭비가 예상되었습니다.
볼라는 실시간 스트리밍으로 경매를 진행하는 요구사항을 적은 인원으로 빠르게 실험해야 하는 비즈니스 요구사항이 있었기 때문에, 아래와 같은 이유로 와이스의 실시간 스트리밍 관리 서비스로 Amazon IVS를 선택하고 이를 스트리밍의 중심축으로 하여 개발을 진행하게 되었습니다.
라이브 스트리밍 인프라 서비스를 위해 Amazon IVS를 선택했던 이유
- 간편한 설정 및 개발 편의성: Amazon IVS는 사용자가 라이브 스트리밍 채널을 손쉽게 생성하고 관리할 수 있는 직관적인 API를 제공합니다. 높은 수준의 추상화로 복잡한 작업을 간소화하며, 빠르게 환경을 설정할 수 있었습니다. 그리고 송출과 수신에 사용되는 각 플랫폼을 위한 SDK를 제공하여, 개발자가 빠르게 라이브 스트리밍 서비스를 만들 수 있었습니다.
RTMP / HLS를 송출하고 수신하기 위해서는 각 플랫폼에 맞는 프로토콜 구현과 이를 활용한 비디오 플레이어 구현이 필요합니다. 와이스는 안드로이드, iOS의 모바일 환경과 웹에서 시청하는 환경을 모두 구현을 해야 했습니다. AWS SDK에는 와이스 클라이언트를 개발하면서 Amazon IVS를 연동하기 위한 모든 기능이 포함되어 있어서 큰 도움이 되었습니다. - 확장성 및 비용 효율성: Amazon IVS는 높은 확장성을 제공하며, 수요에 따라 쉽고, 유연하게 채널을 쉽게 확장할 수 있습니다. 또한 실제 사용하는 만큼만 과금되어 비용 효율적으로 운영할 수 있습니다. 또한 Amazon IVS의 실시간 스트리밍 모니터링이 제공되어 참가자의 상태나 오류 등의 이벤트를 쉽게 파악할 수 있었습니다. 이렇게 볼라는 Amazon IVS를 사용하면서 인프라 구축에 소요되는 시간과 비용을 줄이고, API를 사용한 자동화로 관리 포인트까지 줄일 수 있었습니다.
- 기존 AWS 인프라와의 통합: Amazon IVS는 다른 AWS 서비스와 강력한 통합을 제공합니다. Amazon EventBridge, Amazon SNS, Amazon S3 등과의 연동을 통해 라이브 스트리밍 이벤트 및 데이터를 쉽게 처리하고 활용할 수 있습니다. 또한 AWS의 네트워크 백본을 사용하기 때문에, 중간에 영상이나 음성이 크게 끊길 염려 없이, 핵심 비즈니스 로직 개발에만 집중을 더 할 수 있게 되어 전반적인 개발 공수를 줄이는 효과를 얻게 되었습니다.
라이브 스트리밍 인프라 서비스 아키텍처
볼라에서 활용한 Amazon IVS를 활용한 스트리밍 인프라 관리 서비스는 아래와 같은 아키텍처로 구현하였습니다.
위 아키텍처는 다음과 같은 부분들로 되어 있습니다.
- Amazon IVS에 생성된 라이브 채널의 상태를 Amazon EventBridge를 통해 Amazon SNS로 전달해 주고, 들어오는 비디오를 Amazon S3에 기록하는 송출 및 레코딩 서비스
- 인증된 송출자의 API 요청에 따라 Amazon IVS를 설정하고 API를 활용해 Amazon IVS 라이브 채널의 생성과 수정, 현재 상태를 관리하는 라이브 채널 관리 시스템
- 외부에 연결된 클라이언트들에게 채널 상태 또는 별도의 라이브 이벤트를 브로드캐스팅 해주는 Amazon API Gateway Websocket을 활용한 실시간 이벤트 전달 서비스
각 부분에 대한 설명을 간략히 드리겠습니다.
송출 및 레코딩 구성
송출 시스템에서 채널에서 사용할 레코딩 구성을 미리 만들어주면, Amazon IVS에서 라이브 스트리밍을 하면서 Amazon S3 에 HLS로 송출한 라이브를 담을 수 있습니다. 레코딩 구성은 AWS 콘솔 또는 명령줄을 통해 만들 수 있습니다.
만들어진 레코딩 구성은 후에 송출 시스템에서 채널을 만들 때 사용됩니다.
Amazon IVS는 스트림의 상태에 대한 변경 이벤트를 Amazon EventBridge로 전송합니다. 이 이벤트를 SNS 등의 다른 AWS 서비스에 전달하여 이벤트를 추적하고 이에 대응할 수 있습니다.
Amazon EventBridge에서 Amazon IVS의 이벤트 패턴을 따로 필터링하여 아래와 같이 규칙으로 만들 수 있습니다. 와이스에서는 Amazon EventBridge의 사용자 지정 패턴(JSON)을 활용하여 아래와 같이 채널에 송출자가 송출을 시작하거나 송출을 중지했을 때, 또는 송출이 불안정한 이벤트가 발생했을 때 채널의 상태를 받는 이벤트 패턴을 생성할 수 있었습니다.
대상 선택에서는 Amazon SNS주제를 선택하여 AWS Lambda와 같은 서비스에서 구독할 수 있도록 설정했습니다.
라이브 채널 관리 서비스
송출 관리 시스템은 높은 품질의 영상 송출 및 관리를 위해 필수적입니다. 이 아키텍처에서는 Amazon IVS를 설정하고 효과적으로 활용함으로써 채널과 해상도 크기를 조절하여 송신 및 수신 단의 퀄리티를 결정하고 네트워크 상황에 따른 트레이드오프를 고려해야 합니다.
우선, 채널과 해상도 크기의 조절은 송출의 핵심 부분입니다. 이는 송신 및 수신 단의 퀄리티를 결정하며, 네트워크 상황에 맞춰 최적의 조건을 찾는 것이 중요합니다. AWS SDK를 통해 이전에 구성된 레코딩 구성과 함께 Amazon IVS 채널을 쉽게 설정할 수 있습니다.
이전에 구성된 레코딩 구성과 채널을 설정하여 javascript 코드로 nodejs 환경에서 다음과 같이 Amazon IVS 채널을 손쉽게 만들 수 있습니다.
import IVS from ‘aws-sdk/clients/ivs’
async function createNewIvsChannel(){
const ivs = new IVS({ region: ‘YOUR_REGION’ })
const newChannel = await ivs.createChannel({
latencyMode: ‘LOW’, //default
name: ‘YOUR_IVS_CHANNEL_IDENTIFIER’,
recordingConfigurationARN: ‘arn:YOUR_RECORD_CONFIGURATION’
type: ‘BASIC’, //default: STANDARD
})
}
이 시스템은 Amazon API Gateway를 통한 인증 및 AWS Lambda를 활용하여 Amazon IVS API를 설정하는 프로세스를 포함합니다. AWS Lambda 함수는 설정 값과 송출 정보를 사용자의 서비스 컨텍스트와 함께 Amazon DynamoDB에 업데이트합니다. 이를 통해 송출 관리 시스템은 효과적으로 운영되며 필요한 정보를 동기화합니다.
또한, 송출 및 녹화 서비스에서 발생하는 업데이트는 이전에 설정된 Amazon EventBridge에서 Amazon SNS로 이어지는 체인을 통해 AWS Lambda를 트리거하여 Amazon DynamoDB에 상태 값을 지속적으로 업데이트합니다. 이는 시스템의 실시간 상태를 유지하며, 클라이언트를 사용하는 이용자에게 현재 라이브 세션의 상태를 확인할 수 있도록 도움을 줍니다.
이벤트 패턴의 대상은 Amazon SNS 주제를 선택하여 Amazon IVS 라이브 채널 스트림의 상태와 송출 환경이 변경될 때마다 해당 주제로 Publish 되도록 설정했습니다.
실시간 이벤트 전달 서비스
Amazon IVS 기반의 송출 관리 시스템에는 클라이언트 실시간 이벤트 전달 서비스가 필요합니다. 이 서비스는 송출 및 녹화 서비스 및 송출 관리 시스템에서 발생한 이벤트들을 실시간으로 송출 및 시청 중인 클라이언트에게 전달해야 합니다.
이 요구사항을 만족하기 위해 와이스의 서버 측 서비스에는 Amazon API Gateway Websocket을 활용하여 송출자와 수신자 간에 클라이언트에 연결할 수 있도록 구현을 했습니다. WebSocket은 양방향 통신을 지원하므로 송출자와 시청자 간의 실시간 이벤트 전달에 적합한 메커니즘입니다.
Amazon DynamoDB Streams를 활용하여 사용하여 라이브 채널 변경 이벤트가 발생할 때 이를 웹소켓 세션에 브로드캐스팅하는 구조를 구현할 수 있었습니다. 이를 위해 Amazon DynamoDB의 업데이트 이벤트를 Amazon DynamoDB Streams로 구성하고, 이벤트가 발생하면 AWS Lambda 함수가 트리거되어 변경 사항을 Amazon API Gateway WebSocket에 연결된 모든 세션에 전달하도록 구현했습니다.
이러한 아키텍처는 라이브 채널의 동적 변경에 효과적으로 대응할 수 있습니다. 라이브 채널이 변경될 때마다 해당 변경 사항이 WebSocket을 통해 모든 클라이언트에 실시간으로 전달되므로, 사용자들은 최신 정보를 즉시 반영받을 수 있습니다.
클라이언트 실시간 이벤트 전달 서비스를 구축함으로써 송출 및 녹화 서비스에 참여하는 사용자들은 더욱 효과적으로 송출 환경을 모니터링하고 변경 사항을 실시간으로 파악할 수 있습니다. 이를 통해 높은 품질의 사용자 경험을 제공하는 동시에 시스템의 유연성을 강화할 수 있습니다.
Amazon IVS사용 시 비용을 절감하는 팁
- 채널 선택 전략: 채널 선택을 비즈니스 요구사항에 맞춰 선택하면, 비용을 절감할 수 있습니다. 초창기 와이스 서비스에서는 모든 채널 생성에 STANDARD 채널을 선택하여 비용을 감당하는데 큰 어려움이 있었으나, 후에는 기본적으로 BASIC 채널을 선택하고, 라이브의 중요도나 송출 환경에 따라 필요시 다른 채널들을 유연하게 사용하도록 변경되었습니다.
이를 통해 송출자와 수신자가 안정적으로 송출하고 시청할 수 있으면서도 비용 부담을 최소화할 수 있었습니다. 또한 2023년 8월 9일 Amazon IVS 송출 비용 인하를 발표하면서 모든 채널에서 크게 할인되어 위의 전략과 같이 사용되었을 때 초기에 STANDARD 채널만 사용하던 시기보다 최소 30%의 비용 절감을 달성할 수 있었습니다. - 레코딩 세션 구성 전략: Amazon IVS의 Amazon S3에 자동 레코딩 기능을 사용하면, HLS 송출이 Amazon S3에 저장되고, 시간이 지날수록 저장되는 데이터의 크기가 점점 증가하게 됩니다. 이를 위해 레코딩된 HLS 파일들을 하나의 비디오 파일로 통합하고 이를 Amazon S3 Glacier에 저장하는 방법을 고려할 수 있습니다. Amazon S3 Glacier는 데이터를 저렴하게 저장하는 데에 적합한 서비스로, 자주 액세스하지 않는 데이터의 경우 저렴한 비용으로 장기 보관이 가능합니다. 이를 통해 Amazon S3에 저장된 비용을 최적화하면서도 필요한 경우 데이터에 빠르게 액세스할 수 있도록 개선할 수 있습니다.
마무리
볼라는 Amazon IVS를 이용해 다른 솔루션들처럼 채널을 위한 라이브 자원을 대기시키지 않아도 빠르게 라이브 서비스를 위한 송출 채널을 구성할 수 있게 되었습니다. 이 과정에서 볼라는 웹/모바일 환경에 맞는 AWS SDK를 활용해 핵심 비즈니스 로직을 짧은 기간을 내에 구축할 수 있었습니다.
또한 운영 관점에서는 Amazon IVS가 제공하는 실시간 모니터링과 Amazon EventBridge 등을 활용한 채널 관리를 통해 운영에 대한 자체 개발을 줄이고 시스템을 안정적으로 운영하게 되었습니다. 마지막으로 Amazon IVS의 적절한 채널 유형의 선택과 AWS의 비용 인하, Amazon S3의 적절한 스토리지 클래스 선택을 통해 비용을 크게 절감하는데 도움을 주었습니다.