---
title: "Self Media Decoder: 미디어 파일이 자체 디코더 로직(WASM)을 품고 다니는 포맷"
published: 2025-12-22T23:22:11.000Z
canonical: https://jeff.news/article/1121
---
# Self Media Decoder: 미디어 파일이 자체 디코더 로직(WASM)을 품고 다니는 포맷

미디어 파일 자체에 WebAssembly 디코더를 내장하거나 참조해서, OS나 플레이어에 코덱을 설치하지 않아도 재생할 수 있게 하는 SMD 스펙임. 암호학적 버전 체인, 샌드박스 실행, 상태 마이그레이션 등 보안과 연속성까지 설계에 포함됨.

## 핵심 아이디어

- 기존에는 OS나 플레이어에 코덱이 설치돼 있어야 미디어를 재생할 수 있었음. SMD는 이 모델을 뒤집어서, 미디어 파일 자체가 디코딩 로직을 WebAssembly 모듈로 내장하거나 참조하는 구조임
- 미디어를 "수동적인 인코딩 데이터"가 아니라 "능동적이고 자기 서술적인 시스템"으로 취급함
- 코덱 업그레이드가 플레이어 업데이트 없이 가능해짐 — 디코더가 미디어 쪽에 있으니까

## Atom 구조

- SMD 스트림은 시간순으로 정렬된 **Atom** 시퀀스로 구성됨. 각 Atom은 미디어 데이터 + 디코딩 로직 메타데이터를 포함함
- 각 Atom에는 Sequence Header가 필수이며, AtomUUID·SourceUUID·OriginUUID·시작 시간·재생 길이 등이 들어감
- Media Descriptor는 순수 선언형이어야 하고 실행 가능한 로직은 포함 불가. CBOR 정규 인코딩(CBOR-C14N) 사용
- 지원 미디어 타입: 이미지, 비디오, 볼류메트릭/3D, 멀티뷰/스테레오, 미래 미디어 타입까지 확장 가능

## 디코더 로직 관리

- 디코딩 로직은 `LogicVersion`(단조 증가 정수)과 `LogicFingerprint`(정규화된 WASM 바이너리의 해시)로 식별됨
- **embedded** 모드: Atom에 WASM 모듈 직접 내장
- **id-only** 모드: fingerprint와 버전 정보만 포함하고 실제 로직은 캐시나 외부에서 가져옴
- Logic Interface Manifest(LIM)로 플레이어-디코더 간 계약을 정의함. ABI 버전, 내보내기 함수, 필수/선택 WASM 피처 등 포함

## 보안 모델

- WebAssembly 실행은 샌드박스 필수. 네트워크 접근은 기본적으로 차단됨
- 디코더 업그레이드 시 **Version Lineage Chain(VLC)** 으로 암호학적으로 연결함. Ed25519 서명 사용
- 부모-자식 연속성, LogicVersion 단조성, fingerprint 무결성 검증 실패 시 업그레이드 자체가 거부됨
- 안티롤백 보호: 플레이어가 수락한 최고 LogicVersion을 기록해 이전 버전으로 되돌리는 공격을 방지함
- 신뢰 앵커는 두 가지 모델 지원 — 초기 Atom에 루트 공개키 내장하거나, 외부 신뢰 저장소 사용

## Capability Introspection

- 디코딩 전에 디코더가 어떤 기능을 지원하는지 사전 검사 가능함
- 정적 능력 선언: 디코더 로직 실행 없이 확인 가능하고, 서명 검증 가능해야 함
- 동적 검사도 선택적으로 지원하되, 네트워크·파일시스템·클럭·난수 전부 차단된 상태에서만 실행됨
- 픽셀 포맷, HDR, 프레임레이트, 3D 레이아웃, 벤더 확장까지 폭넓게 커버함

## 상태 관리와 마이그레이션

- 디코더는 Atom 간에 상태를 유지할 수 있음. 상태는 직렬화 가능해야 하고 CBOR 포맷 권장
- 디코더 업그레이드 시 Logic Change Marker(LCM)와 StateSchemaHash가 같으면 상태 직접 재사용 가능
- 다르면 디코더가 명시적으로 마이그레이션을 선언해야 하고, 실패 시 안전하게 상태 초기화됨

## "웅덩이와 타이어 자국" 비유

- 디코더 업그레이드를 도로 위 웅덩이에 비유함. 차가 웅덩이를 지나가면 타이어 자국이 남고, 이후 Atom들은 새 웅덩이가 나타날 때까지 그 디코더를 계속 상속받음

---

[GitHub](https://github.com/jesusluque/SMD)

## 핵심 포인트

- 기존 codecs-in-OS 모델 대신 codecs-in-media 모델로 전환하는 미디어 포맷 스펙
- Atom 단위로 미디어 데이터와 WASM 디코더 로직을 함께 묶어서 전달함
- Ed25519 서명 기반 Version Lineage Chain으로 디코더 업그레이드를 암호학적으로 검증
- WASM 샌드박스 실행 필수, 네트워크 기본 차단 등 보안이 정확성 요구사항으로 포함됨
- 디코더 간 상태 마이그레이션과 capability introspection으로 실용적 배포 지원

## 인사이트

코덱 파편화 문제를 미디어 파일 레벨에서 해결하려는 흥미로운 접근이지만, 실제 채택까지는 브라우저·플레이어 생태계의 지원이 관건이 될 것으로 보임.
