서버 리스 컴퓨팅을 통해 신규 솔루션 개발 시간을 앞당긴 Incentro라는 IT 솔루션 회사의 경험담입니다. Incentro는 언론사와 출판사 고객을 위해 태킹 작업 없이 대량의 이미지, 비디오, 오디오 자산을 분류, 검색, 관리할 수 있는 Segona Media라는 솔루션을 구글 클라우드 컴퓨팅(GCP) 환경에서 개발해 제공합니다. 솔루션 개발 과정을 보면 GCP가 제공하는 다양한 API와 함수를 비즈니스 로직에 잘 맞춰 연결했다는 느낌을 지울 수 없습니다. GCP 기반 서버 리스 컴퓨팅! IT 솔루션 기업의 사업 방식을 바꾸는 데에도 큰 역할을 하고 있군요!
“언론사와 출판사의 이미지, 비디오, 오디오 자산 관리”
Segona Media 솔루션은 대량의 미디어 파일을 중요 자산으로 관리하는 언론사와 출판사의 오랜 고민을 속 시원하게 풀어 줍니다. 매일 같이 쏟아져 들어오는 사진, 비디오, 오디오 파일을 자산으로 관리해 필요할 때 찾아 쓰려면! 많은 양의 수작업이 필요합니다. 미디어 파일을 분류하고, 구분하기 위해 일일이 태그를 달아줘야 하는데, 이를 제대로 하는 곳은 많지 않죠. Segona Media 솔루션은 이 문제를 자동화와 머신 러닝을 통해 해결합니다.
Segona Media 솔루션은 GCP 상에서 서버 리스 방식으로 개발 및 운영됩니다. 이 솔루션이 제공하는 주요 기능은 일일이 구현한 것이 아니라 구글이 제공하는 중요 API를 잘 골라 썼습니다. 요약하면 다음과 같습니다.
이미지 처리: 구글의 Cloud Vision API를 사용해 라벨, 랜드마크, 텍스트, 속성 등의 정보를 추출합니다.
오디오 처리: 구글의 Cloud Speech API를 통해 오디오에서 음성을 추출하여 텍스트로 변환하고, Cloud Natural Language API를 활용해 음성을 해당 내용에 담긴 문맥이나 분위기를 파악해 분류합니다.
비디오 처리: 구글의 Cloud Video Intelligence API로 라벨, 타임프레임 등을 추출합니다. 또한, 비디오에서 오디오 트랙을 분리해 따로 처리하여 해당 영상을 비디오와 오디오 모든 측면에서 찾아볼 수 있게 합니다.
“너무나 간단하고, 직관적인 서버 리스 컴퓨팅 아키텍처”
Segona Media의 아키텍처를 보시죠. 이 솔루션을 개발하면서 Incentro의 개발자들은 서버, 스토리지, 네트워크 장비를 구해 구성한 다음 운영체제, 애플리케이션 서버, 데이터베이스 등을 설치하고 설정하는 작업을 하지 않았습니다. GCP에서 서버 리스로 구현하다 보니 인프라와 플랫폼 관련해 손쓸 것이 없었습니다.
Incentro는 크게 세 가지 요소로 솔루션을 개발해 운영하고 있습니다. 그 요소는 Google Cloud Function, Cloud Pu/Sub, Elasticsearch API입니다. 구성도를 보면 얼마나 아키텍처가 간결하고 직관적인지 바로 알 수 있습니다. 설명도 간단하게 할 수 있습니다. 구글이 제공하는 서버 리스 환경인 Google Cloud Function을 통해 구글 클라우드 스토리지 버킷에 이미지, 비디오, 오디오 등의 미디어 자산이 저장되는 이벤트가 생성됩니다. 해당 이벤트는 Cloud Pub/Sub을 통해 실시간으로 데이터와 메시지가 처리되며 각 과정에서 필요한 함수가 호출되어 미디어 자산에서 필요한 메타 데이터를 추출하고, 해당 파일을 분류 기준에 맞춰 적절한 구글 클라우드 스토리지 버킷에 저장합니다. 이때 Elasticsearch 인덱스에도 해당 자산에 대한 정보가 기록됩니다. 이런 과정을 거쳐 미디어 자산이 분류, 저장, 관리, 검색되죠.
미디어 파일 처리 과정을 자세히 살펴보기에 앞서 Segona Media 소개 영상 잠시 보시죠. 이런 솔루션을 이렇게 간단하게 만들고 운영할 수 있다는 것이 놀라울 따름입니다.
“API 연계 기반 자동화와 머신 러닝 기반의 인공 지능 서비스”
이제 각 미디어 자산이 어떤 방식으로 GCP에서 처리되는지 소개하겠습니다.
먼저 이미지 파일입니다. 이미지에서 메타 데이터를 뽑기 위해 오픈 소스 소프트웨어인 ImageMagick이 사용됩니다. 이를 통해 XMP, EXIF 메타 데이터를 추출합니다. 이들 정보는 Elasticsearch 인덱스에 추가되어 검색할 수 있게 합니다. 어느 정도 수준으로 검색할 수 있을지 궁금하죠? 예를 들어 지적재산권이나 해상도 등 상세한 수준으로 검색할 수 있습니다.
다음으로 이미지 내에 있는 랜드마크나 텍스트 추출은 Cloud Vision API로 추출합니다. 이에 따라 전통적인 방식처럼 일일이 이미지 파일에 태그를 수작업으로 달지 않아도 됩니다. Segona Media는 고객의 필요에 따라 커스텀 라벨을 만들 수 있도록 합니다. 가령 TV가 포함된 이미지 중 특정 제조사의 모델이 들어간 이미지를 찾고자 하는 요구를 커스텀 라벨로 수용할 수 있도록 한 것입니다. 커스텀 라벨은 TensorFlow 모델을 통해 지원됩니다. 고객의 데이터 자산을 놓고 학습을 하고, 구글 Cloud ML Engine을 사용해 고객이 커스텀 라벨에 대한 검색할 때 적절한 결과를 추측해 제시합니다.
다음으로 오디오의 경우 Cloud Speech API를 통해 음성에서 텍스트를 추출합니다. 그리고 해당 내용을 Elasticsearch 인덱스에 추가해 오디오 파일에 포함된 개별 텍스트 수준에서 검색할 수 있게 합니다.
이제 비디오 파일 처리 과정을 살펴볼 차례입니다. 비디오 파일의 경우 원본과 별도로 낮은 해상도의 썸네일 이미지로 구성된 영상이 만들어집니다. 크기는 원본 대비 50% 정도인데요, 이를 위해 Cloud Function이 제공하는 FFmpeg와 FFprobe 함수가 사용됩니다. 예제 코드는 다음 링크를 참조하세요.
https://bitbucket.org/snippets/keesvanbemmel/keAkqe
같은 아키텍처를 적용해 비디오 파일에서 오디오를 뽑아냅니다. 이후 처리 과정은 앞서 소개한 일반적인 오디오 파일과 같습니다. 비디오 컨텐츠에 포함된 각종 라벨과 타임스탬프 정보는 Cloud Video Intelligence가 잡아냅니다. 이를 통해 영상 내에 포함된 특정 객체가 어느 위치에 포함되어 있는지 식별할 수 있죠.
Segona Media 솔루션은 GCP에서 서버 리스로 구현 및 운영되기 때문에 전통적인 패키지 소프트웨어와 달리 유지보수와 지원 이슈가 적습니다. 운영체제나 데이터베이스 업데이트 신경 쓸 필요 없죠, 하드웨어 문제를 걱정할 이유도 없습니다. 그저 비즈니스 로직 개선에만 집중하면 됩니다.
서버 리스 컴퓨팅 환경에서 구글이 제공하는 다양한 API로 개발 시간과 비용을 줄이고 유지보수 효율을 높이는 방법이 궁금하다면! 메가존으로 문의 바랍니다.