Segona Media 아키텍처
이와 같은 솔루션을 개발하는 기존 방식에는 하드웨어를 구동히키고 애플리케이션 서버, 데이터베이스 저장소 노드 등을 설치하는 작업이 포함됩니다. 솔루션을 개발하고 프로덕션화 하고 나면 운영체제를 업데이트 또는 업그레이드해야 하거나 데이터베이스가 예상치 못한 프로덕션 데이터를 처리하도록 확장되지 않는 등 다양한 익숙한 문제에 봉착할 수 있습니다. 이런 건 우리가 원한 바가 아니므로, 신중히 숙고한 끝에 완벽히 관리되는 솔루션이고 서버리스 아키텍처로 구축하기로 결정했습니다. 이렇게 하면 따로 서버를 유지 관리할 필요가 없고 Google에서 지속적으로 향상되는 API를 활용할 수 있으며 우리가 개발한 솔루션이 우리가 발견할 수 있는 최대 규모의 아카이브를 처리할 정도로 확장 가능할 것이기 때문이었습니다.
우리는 Segona Media가 미디어 및 출판 업계에서 일반적으로 사용되는 도구에 손쉽게 연결 가능하도록 하고도 싶었습니다. Adobe InDesign, Premiere, Photoshop 및 Digital Asset Management 솔루션이 모두 Segona Media에서 자산을 손쉽게 저장하고 검색할 수 있어야 합니다. 우리는
Google Cloud Storage에서 자산을 저장하기 위해 이미 사용하고 있는 GCP API를 사용하여 이 문제를 해결했습니다. 우리는 GCP에서 작동하고 관리되는 Elasticsearch API를 사용하여 자산을 검색합니다.
Segona Media가 수행하는 각각의 작업은 보통 주로
Cloud Pub/Sub 큐로 트리거되는 별개의
Google Cloud Function입니다. Pub/Sub 큐를 사용하여 Cloud Function을 트리거하면 쉽고 확장 가능한 방식으로 새 작업을 게시할 수 있습니다.
다음은 Segona Media의 아키텍처를 대략적으로 보여주는 그림입니다.
대략적인 아키텍처
그리고 다음은 Segona Media를 통해 자산이 흐르는 방식입니다.
- 자산이 Cloud Storage 버킷에 업로드/저장됩니다.
- 이 이벤트는 고유 ID를 생성하고 파일 객체에서 메타데이터를 추출하여 적절한 버킷으로 이동(수명 주기 관리 활용)한 후 Elasticsearch 색인(GCP에 호스팅된 Elastic Cloud를 실행함)에서 자산을 생성하는 Cloud Function을 트리거합니다.
- 이는 자산 유형별로 여러 자산 프로세서를 Google Cloud Pub/Sub에 큐잉하며 Google API를 사용하여 자산에서 관련 있는 콘텐츠를 추출합니다.
미디어 자산 관리
이제, Segona Media가 다양한 유형의 미디어 자산을 처리하는 방식을 살펴봅시다.
이미지
이미지에는 검색할 수 있는 특징이 많은데, 전용 마이크로 서비스 프로세서를 통해 특징을 검색합니다.
- 우리는 ImageMagick을 사용하여 이미지 객체 자체에서 메타데이터를 추출합니다. 파일 자체에 포함되어 있는 XMP 및 EXIF 메타데이터를 전부 추출합니다. 그러면 이 정보가 Elastic 색인에 추가되어 저작권 정보나 해상도 같은 정보를 기준으로 이미지를 검색할 수 있게 됩니다.
- Cloud Vision API는 이미지의 레이블, 랜드마크, 텍스트 및 이미지 속성을 추출합니다. 따라서 이미지의 객체에 태그를 수동으로 지정해야 할 필요가 없으며 사진에서 해당 콘텐츠를 검색할 수 있습니다.
- Segona Media는 고객에게 맞춤형 레이블을 생성하도록 권합니다. 예를 들어, 텔레비전 제조업체는 사진에서 텔레비전 세트의 특정 모델을 파악하고자 할 수 있습니다. 우리는 맞춤형 데이터에 대해 훈련되는 고유한 Tensorflow 모델을 빌드하여 맞춤형 예측을 구현했으며 Cloud ML Engine에서 예측을 훈련하고 실행합니다.
- 모든 자산을 더욱 손쉽게 처리하기 위해 우리는 모든 이미지에 대한 낮은 해상도의 썸네일 이미지도 생성합니다.
오디오
오디오 처리는 꽤 간단합니다. 우리는 오디오 파일에서 음성 텍스트를 검색할 수 있기를 원하므로
Cloud Speech API를 사용하여 오디오에서 텍스트를 추출합니다. 그런 다음 기록을 Elasticsearch 색인으로 피드하여 각 단어를 기준으로 오디오 파일을 검색할 수 있게 합니다.
동영상
- 동영상은 기본적으로 우리가 이미지 및 오디오 파일로 다루는 모든 것의 조합입니다. 사소한 차이가 몇 가지 있지만 이러한 자산에 대해 우리가 어떤 마이크로 서비스를 호출하는지 알아봅시다.
- 먼저, 우리는 낮은 해상도의 동영상 이미지를 처리할 수 있도록 썸네일 이미지를 생성합니다. 동영상의 50% 지점에서 썸네일 이미지를 생성합니다. Cloud Functions에서 FFmpeg와 FFprobe를 결합하여 이 작업을 수행하며 동영상 자산과 함께 이 썸네일 이미지를 저장합니다. Cloud Functions 및 FFmpeg를 사용하면 썸네일 이미지를 간단히 생성할 수 있습니다! 다음 코드 스니펫을 확인하시기 바랍니다. https://bitbucket.org/snippets/keesvanbemmel/keAkqe
- 우리는 똑같은 FFmpeg 아키텍처를 사용하여 동영상에서 오디오 스트림을 추출합니다. 그러면 이 오디오 스트림이 다음과 같이 다른 오디오 파일처럼 처리됩니다. 오디오 스트림의 음성 텍스트에서 문자 텍스트를 추출하고 이를 Elastic 색인에 추가합니다. 그러면 음성 단어를 검색하여 동영상을 검색할 수도 있게 됩니다. 단일 채널 FLAC 형식으로 동영상에서 오디오 스트림을 추출합니다. 이 방법이 최상의 결과를 제공하기 때문입니다.
- 또한, Cloud Video Intelligence를 사용하여 동영상 콘텐츠에서 관련 정보도 추출합니다. 동영상에 포함된 레이블과 이러한 레이블이 생성된 타임스탬프를 추출합니다. 이런 식으로, 우리는 동영상에서 어떤 지점에 어떤 객체가 있는지를 아는 것이죠. 지정된 레이블에 대한 타임스탬프를 파악하면 사용자에게 현재 찾고 있는 객체가 포함된 동영상뿐만 아니라 그 동영상에서 해당 객체가 포함된 정확한 시점까지도 알 수 있습니다.
지금까지 수평적 또는 수직적 확장 시 OS 업데이트가 필요 없고 인프라 유지 관리 및 지원도 일체 필요 없이 완벽한 서버리스 방식으로 스마트 미디어 태그 지정 작업을 수행하는 방법에 대해 간략히 살펴보았습니다. 이런 식으로 우리는 현재 관심이 있는 사항인 혁신적이며 확장 가능한 솔루션을 최종 고객에게 제공하는 데 집중할 수 있습니다. 궁금한 사항이 있으신가요? 저희에게 알려주세요! 저희는 이런 주제로 대화하는 걸 좋아합니다. ;) 아래에 댓글을 남기시거나 kees.vanbemmel@incentro.com
kees.vanbemmel@incentro.com으로 이메일을 보내시거나 Twitter
@incentro_에서 저희를 찾아보시기 바랍니다.