홈 › 5장 MAM 시스템 설계

5.2 MAM 전체 아키텍처

클라이언트, API, 워크플로우 엔진, 작업 워커, 메타데이터 DB와 검색 엔진, 스토리지 계층, 외부 연동으로 구성되는 MAM의 논리 구조와 설계 원칙을 설명합니다.

최종 수정 2026-10-28 · 읽는 시간 약 3분 · 운영 프리즘(Prism) · 편집 원칙

#논리 구조

MAM은 제품마다 다르지만 논리적으로는 비슷한 층으로 나눌 수 있습니다.

클라이언트 웹 UI · 검색/상세 · 프록시 플레이어 · 구간 지정 · 관리 화면 API 서버 (인증 · 권한 · 비즈니스 로직) REST/JSON · 외부 시스템 연동 게이트웨이(MOS, 편집, 송출) 워크플로우 엔진 + 작업 큐 작업 정의 · 상태 관리 · 재시도 · 우선순위 인제스트 → 분석 → QC → 프록시 → 등록 → 배포 → 아카이브 작업 워커 (수평 확장) FFmpeg 변환 · MediaInfo/FFprobe 분석 QC · 체크섬 · STT/OCR/얼굴 인식 등 AI 분석 아카이브 전송 · 구간 복원 메타데이터 DB (관계형) 소재 · 파일 · 구간 · 메타데이터 · 작업 이력 검색 엔진 (인덱스) 전문 검색 · 필터 · 자동완성 (DB와 비동기 동기화) 스토리지 계층 온라인(고성능 공유 스토리지: 원본·편집) · 프록시 스토리지(웹 서비스) 니어라인(대용량 디스크/오브젝트) · 오프라인(LTO 테이프 라이브러리, 클라우드 아카이브)

각 층의 책임은 다음과 같습니다.

층 책임 설계 포인트
클라이언트 검색, 미리보기, 구간 지정, 요청 프록시 재생 성능, 프레임 단위 UI
API 서버 인증·권한, 업무 로직, 외부 연동 창구 모든 기능을 API로 노출해 연동을 쉽게
워크플로우 엔진 어떤 작업을 어떤 순서로 실행할지 상태 머신, 재시도, 실패 처리
작업 워커 실제 무거운 처리(변환, 분석, 전송) 수평 확장, 작업 유형별 분리
메타데이터 DB 소재·파일·구간·이력의 원본 데이터 정합성, 이력 관리
검색 엔진 빠른 검색을 위한 별도 인덱스 DB와의 동기화 지연 허용
스토리지 파일 저장, 성능과 비용의 균형 계층 구성, 접근 경로 분리

#핵심 설계 원칙

#1) 파일과 메타데이터를 분리한다

영상 파일은 스토리지에, 파일에 대한 정보는 DB에 둡니다. DB 안에 파일 자체를 넣지 않습니다. 그리고 두 정보가 어긋나지 않도록 규칙을 정합니다.

  • DB에는 파일 경로 대신 논리 위치(스토리지 ID + 상대 경로) 를 저장해 스토리지 이전이 쉽게 합니다.
  • 파일의 체크섬과 크기를 DB에 함께 저장해 정합성 검사에 사용합니다.
  • 삭제는 DB 상태를 먼저 바꾸고 파일 삭제는 나중에 비동기로 처리해, 중간에 실패해도 정리할 수 있게 합니다.

#2) 무거운 일은 큐로 뺀다

변환, 분석, 전송은 몇 분에서 몇 시간이 걸립니다. API 서버가 이 일을 직접 하면 요청이 막히고 장애에 취약해집니다. API는 작업을 큐에 등록하고 즉시 응답하고, 실제 처리는 별도의 워커가 맡습니다.

사용자 요청 → API(작업 등록, 작업 ID 반환) → 큐 → 워커(처리) → 상태 갱신 → 화면에서 진행률 조회

#3) 작업은 멱등하게 만든다

네트워크 오류나 서버 재시작 때문에 같은 작업이 두 번 실행될 수 있습니다. 그래도 결과가 망가지지 않도록 작업을 설계합니다(4장 배치 변환의 임시 파일 후 교체, 결과가 있으면 건너뛰기).

#4) 상태를 명시적으로 관리한다

소재와 작업에는 상태(예: INGESTING → ANALYZED → PROXY_READY → REGISTERED → ARCHIVED)가 있고, 상태 전이 규칙을 코드와 DB에 명확히 둡니다. "대충 어디까지 처리됐는지" 알 수 없는 시스템은 운영이 불가능합니다.

#5) 검색 엔진은 사본이다

검색 엔진의 데이터는 DB에서 만든 사본입니다. 장애가 나도 DB에서 다시 만들 수 있어야 합니다. 검색 결과에서 상세 정보를 보여줄 때는 DB를 기준으로 확인합니다.

#6) 스토리지 접근 경로를 분리한다

  • 원본(고비트레이트): 편집·송출용 고성능 경로
  • 프록시(저비트레이트): 웹 서비스용 경로

프록시 재생 트래픽이 원본 편집 성능에 영향을 주지 않도록 분리합니다(스토리지 편에서 설명).

#단일 시스템 vs 서비스 분리

초기에는 하나의 애플리케이션(모놀리식)으로 시작해도 충분합니다. 다만 아래 경계는 처음부터 코드 수준에서 분리해 두면 나중에 서비스로 쪼개기 쉽습니다.

경계 이유
워커(변환·분석)와 API 부하 특성이 완전히 다름
스토리지 접근 계층 스토리지 종류가 바뀌어도 업무 코드는 그대로
외부 시스템 어댑터 연동 대상마다 프로토콜이 다름
검색 색인 색인 방식 교체 가능

#정리

  • MAM은 클라이언트, API, 워크플로우, 워커, DB, 검색, 스토리지의 층으로 구성됩니다.
  • 핵심 원칙은 파일과 메타데이터 분리, 무거운 작업의 큐 처리, 멱등한 작업, 명시적 상태 관리입니다.
  • 처음에는 단순하게 시작하고, 경계만 코드로 분리해 두세요.