블로그 목록
시리즈: 실시간 통화, 어떻게 녹화하는가2/6
  1. 1.실시간 통화, 왜 녹화해야 하는가
  2. 2.내 서버에서 직접 녹화한다면 ← 현재 글
  3. 3.녹화 모드 해부
  4. 4.M3U8과 TS 파일의 모든 것
  5. 5.FFmpeg, 미디어의 스위스 아미 나이프
  6. 6.FFmpeg 실전 파이프라인
Backend시리즈8분 읽기

내 서버에서 직접 녹화한다면 — On-Premise vs Cloud Recording

데이터 주권, 실시간 AI 처리가 필요할 때. On-Premise Recording SDK 아키텍처와 Cloud vs Local 의사결정 프레임워크.

On-Premise RecordingCloud RecordingYUVRaw Data의사결정

"데이터가 반드시 우리 서버에 있어야 합니다." — 이 한 마디가 나오는 순간, Cloud Recording은 선택지에서 빠집니다.

Agora Cloud Recording은 편리하지만 구조적 한계가 있습니다. 녹화 파일이 Agora 인프라를 거쳐 외부 클라우드 스토리지(S3, GCS 등)로 올라갑니다. 규제 산업이나 실시간 AI 처리가 필요한 경우, 이 구조 자체가 문제가 됩니다. On-Premise Recording은 그 대안입니다.


On-Premise Recording이 필요한 순간

1. 데이터 주권 (Data Sovereignty)

GDPR, 의료 규제(HIPAA), 금융 규제(PCI-DSS), 국내 개인정보보호법 — 공통점은 하나입니다. 녹화 데이터가 특정 지역 또는 특정 주체가 통제하는 서버에만 있어야 한다는 것.

Cloud Recording 흐름 (데이터 주권 문제):

  RTC Channel
      │
      ▼
  Agora 인프라 (위치 불명확)
      │
      ▼
  외부 스토리지 (S3 us-east-1, GCS asia-northeast3...)
                                ↑
                          규제 위반 가능성

헬스케어, 법률, 공공기관 프로젝트에서 자주 마주칩니다. "S3에 올라간다고요? 그럼 안 됩니다."

2. 실시간 Raw 프레임 AI 처리

STT(Speech-to-Text)라면 Cloud Recording으로도 충분합니다. 그런데 비디오 프레임 단위 분석이 필요하다면 얘기가 달라집니다.

  • 학습자 집중도 분석 (눈 추적, 시선 방향)
  • 실시간 감정 인식
  • 이상 행동 탐지 (온라인 시험 감독)
  • 얼굴 인식 기반 출결 처리

이런 요구사항은 인코딩된 MP4를 나중에 분석하는 것으로는 해결이 안 됩니다. YUV420 raw 프레임을 실시간으로 꺼내서 모델에 넣어야 합니다.

3. 커스텀 미디어 처리

  • 특수 워터마크 (사용자별 고유 마크, 재유통 추적)
  • 실시간 자막 합성 (번역 자막을 영상에 직접 burn-in)
  • 독자적인 코덱/포맷 요구 (표준 MP4 외)

On-Premise Recording SDK 아키텍처

Cloud Recording이 REST API로 동작하는 것과 달리, On-Premise Recording은 자체 서버에 직접 설치하는 Native SDK입니다.

┌─────────────────────────────────────────────────────┐
│            Your Linux Server (자체 관리)              │
│                                                      │
│  ┌──────────────────────────────────────────────┐    │
│  │        On-Premise Recording SDK               │    │
│  │  ┌─────────────┐  ┌──────────────────────┐   │    │
│  │  │ Recording   │  │  Media Processing    │   │    │
│  │  │ Engine      │  │  (믹싱/레이아웃/워터마크) │   │    │
│  │  └──────┬──────┘  └──────────┬───────────┘   │    │
│  │         │                    │                │    │
│  │         └────────┬───────────┘                │    │
│  └─────────────────┼────────────────────────────┘    │
│                    │                                  │
│              로컬 디스크에 MP4 저장                     │
└────────────────────┼─────────────────────────────────┘
                     │ Agora SD-RTN
                     ▼
┌─────────────────────────────────────────────────────┐
│                 RTC Channel                           │
│        (참가자들이 실시간 통화 중)                       │
└─────────────────────────────────────────────────────┘

핵심 차이점 세 가지:

1. 자체 Linux 서버 필수 Ubuntu 20.04+ 또는 CentOS 7.0+. 서버는 직접 운영합니다. (최신 지원 OS는 Agora 문서를 확인하세요.) Agora가 관리하지 않습니다.

2. Native SDK 설치 REST API 호출이 아닙니다. C++ 기반 SDK를 서버에 직접 설치하고, 애플리케이션 코드에서 SDK를 호출합니다.

3. 파일이 로컬 디스크에 저장 MP4가 외부 스토리지로 나가지 않습니다. 서버 디스크에 직접 씁니다. 이후 내부 스토리지로의 이동은 자체 파이프라인으로 처리.


Recording Engine 내부: 두 가지 모드

모드출력설명
Single-stream유저별 별도 MP4참가자 A.mp4, 참가자 B.mp4 분리 저장
Converged합쳐진 단일 MP4모든 스트림이 믹싱된 하나의 파일

Cloud Recording의 Individual / Mix와 개념은 같습니다. 차이는 파일이 내 서버에 떨어진다는 것.

Converged 모드에서는 레이아웃 설정이 가능합니다. 누가 어느 위치에 표시될지, 화면 크기 비율을 어떻게 할지 SDK 설정으로 제어합니다.


Raw 데이터 접근 — Cloud에 없는 On-Premise만의 강점

On-Premise SDK가 Cloud Recording과 본질적으로 다른 이유가 여기에 있습니다.

접근 가능한 Raw 데이터:

  • YUV420 프레임 — 디코딩된 비디오 원본 (프레임 단위)
  • PCM 샘플 — 디코딩된 오디오 원본 (샘플 단위)
  • JPG 스크린샷 — 지정 간격으로 정지 이미지 추출
  • 인코딩된 원본 비트스트림 — H.264/H.265 raw stream

YUV420 프레임에 직접 접근한다는 것의 의미:

RTC Channel → On-Premise SDK → YUV Frame Callback → AI Pipeline
                                       │
                                       ├─ 감정 인식 모델
                                       │   (OpenCV + DeepFace)
                                       │
                                       ├─ 물체 감지
                                       │   (YOLO 계열)
                                       │
                                       └─ 이상 행동 탐지
                                           (시험 감독 솔루션)

콜백 함수 형태로 구현합니다. SDK가 프레임을 디코딩할 때마다 등록된 콜백을 호출하고, 거기서 AI 모델 추론을 실행합니다. 레이턴시는 프레임 레이트 수준 — 즉 실시간입니다.

PCM 접근도 마찬가지입니다. 서드파티 STT가 아닌 자체 음성 분석 모델을 실시간으로 돌릴 수 있습니다.


추가 기능

워터마크

세 종류를 지원합니다.

┌────────────────────────────────────┐
│  [타임스탬프: 2025-03-26 14:32:01]  │  ← 텍스트 워터마크
│                                    │
│     [상담 ID: TXN-89234]           │  ← 커스텀 텍스트
│                                    │
│                       [logo.png]   │  ← 이미지 워터마크
└────────────────────────────────────┘

사용자별로 고유한 워터마크를 심는 것도 가능합니다. 녹화 파일이 외부로 유출됐을 때 출처 추적 용도.

스크린샷

라이브 스트림에서 JPG를 지정 간격으로 뽑습니다. 썸네일 생성, 콘텐츠 모더레이션 용도.

암호화 채널 지원

암호화가 걸린 채널도 On-Premise SDK로 녹화 가능합니다. 암호화 키를 SDK에 전달하면 복호화해서 처리합니다. Cloud Recording도 Agora 내장 암호화(encryptionMode/secret 필드)는 지원하지만, 클라이언트만 키를 보유하는 진정한 E2E 암호화(End-to-End Encryption)의 경우 Cloud Recording에서는 복호화가 불가능하므로 On-Premise가 필요합니다.

선택적 녹화

채널에 20명이 있어도 특정 UID만 골라서 녹화할 수 있습니다. 강의 플랫폼에서 강사 화면만 녹화하거나, 주요 참가자만 선택하는 식.


Cloud vs On-Premise 의사결정 프레임워크

7가지 축 비교

항목Cloud RecordingOn-Premise Recording
인프라Agora 관리 (서버리스)자체 Linux 서버 운영
인터페이스REST APINative SDK (C++)
저장 위치3rd-party 클라우드 스토리지로컬 디스크
모드individual / mix / websingle-stream / converged
Raw 데이터 접근XO (YUV, JPG, PCM)
운영 부담낮음높음 (서버 관리 필요)
비용 구조녹화 분당 과금서버 비용 + RTC 과금

Decision Tree

                    녹화가 필요한가?
                         │
                    ┌────┴────┐
                   Yes        No → 끝
                    │
           데이터가 반드시
           자체 서버에 있어야?
           (규제/데이터 주권)
                    │
              ┌─────┴─────┐
             Yes           No
              │             │
         On-Premise    실시간 Raw 프레임
                       AI 처리 필요?
                            │
                      ┌─────┴─────┐
                     Yes           No
                      │             │
                 On-Premise    Cloud Recording ✅

대부분의 경우 Cloud Recording으로 충분합니다. On-Premise는 명확한 요구사항이 있을 때만 선택합니다 — 운영 부담이 크기 때문입니다.

서버 관리, SDK 버전 업데이트, 디스크 용량 관리, 장애 대응 — 이 모든 것이 자체 책임입니다. "쉬운 것을 어렵게 하지 않는다"는 원칙 하에, Cloud로 충분한 요구사항에는 Cloud를 씁니다.


핵심 요약

  • On-Premise Recording은 Native SDK를 자체 Linux 서버에 설치하는 방식. REST API 기반의 Cloud Recording과 구조적으로 다름
  • 파일은 로컬 디스크에 직접 저장 — 외부 스토리지 불필요, 데이터 주권 요구 충족 가능
  • YUV420 프레임, PCM 샘플에 직접 접근 가능 — 실시간 AI 추론 파이프라인 구성 가능
  • E2E 암호화 채널, 선택적 UID 녹화, 커스텀 워터마크 등 Cloud에 없는 기능 제공
  • 운영 부담이 크므로 데이터 주권 또는 실시간 Raw 처리가 명확히 필요할 때만 선택

시리즈 네비게이션

실시간 통화, 어떻게 녹화하는가 시리즈

  1. 실시간 통화, 왜 녹화해야 하는가 — Cloud Recording Architecture
  2. 내 서버에서 직접 녹화한다면 ← 현재 글
  3. 녹화 모드 해부 — Individual, Mix, Web의 내부 파이프라인
  4. M3U8과 TS 파일의 모든 것 — HLS Deep Dive
  5. FFmpeg, 미디어의 스위스 아미 나이프
  6. FFmpeg 실전 파이프라인 — 녹화에서 VOD까지

© 2026 Frank Kim. All rights reserved.