"교실의 판서 내용과 학생들의 질의응답 화면, 군사 훈련 시뮬레이션의 디스플레이는 그 자체로 국가와 기관의 민감한 보안 자산입니다. 편의성을 빌미로 화면 영상을 외부 클라우드 서버에 자동 업로드하는 상용 SaaS 툴의 위험을 원천 차단하고, 내장 그래픽 PC에서도 CPU 점유율 3%로 0초 만에 완벽한 무손실 GIF와 MP4를 추출하는 것—그것이 ZeliScreen이 실현한 미디어 거버넌스의 본질입니다."
1. 교실과 작전실의 은밀한 위험: 화면 녹화 SaaS 툴을 통한 학생 초상권·기밀의 클라우드 자동 업로드
초·중·고등학교 원격 수업, AI 디지털교과서(AIDT) 연계 수업 영상 제작, 교무행정 매뉴얼 작성 및 국방 작전 시뮬레이션 시연 현장에서 화면 녹화는 필수적인 업무 도구입니다. 하지만 많은 현장 교사와 실무자들이 사용하는 웹 기반 녹화 툴(Loom, 각종 브라우저 확장 프로그램)은 심각한 보안 침해를 내포하고 있습니다:
- 클라우드 자동 업로드로 인한 기밀 유출: 녹화가 종료되는 즉시 영상 데이터가 해외 상용 클라우드 서버로 자동 전송되어 공개 링크가 생성됩니다. 이 과정에서 화면에 노출된 학생들의 얼굴, 시험지 문항, 교원 개인정보, 군사 작전 파라미터가 통제 불가능한 외부 서버에 고스란히 저장됩니다.
- 상용 녹화 툴의 높은 시스템 오버헤드: OBS Studio나 고사양 게임 캡처 프로그램은 설치 용량이 수백 MB에 달하고, 복잡한 인코더 설정이 요구되며, 컴퓨터실의 보급형 내장 그래픽 PC에서 실행 시 CPU 점유율이 80% 이상 치솟아 수업 도중 프리징이 발생합니다.
- GIF 변환 시 화질 저하와 용량 폭발: 버그 리포트나 안내 문서에 첨부할 애니메이션 GIF를 만들 때, 기존 툴들은 단순 팔레트 변환을 수행하여 노이즈가 심하고 수십 MB의 비정상적인 파일 크기로 웹 문서 첨부가 차단됩니다.
| 비교 항목 | 웹 기반 녹화 SaaS (Loom 등) | 상용 고사양 녹화기 (OBS 등) | ZeliScreen 온디바이스 거버넌스 |
|---|---|---|---|
| 데이터 저장 위치 | 해외 퍼블릭 클라우드 서버 | 로컬 디스크 | 로컬 비디오 폴더 (%UserProfile%\Videos\ZeliScreen) |
| 폐쇄망(Air-Gap) 호환성 | 구동 불가 (서버 연결 강제) | 가능 (설정 복잡) | 오프라인에서 0초 즉각 구동 |
| 캡처 파이프라인 | WebRTC 브라우저 캔버스 | DirectX/Hooking (고부하) | Win32 GDI gdigrab 초저지연 커널 캡처 |
| GIF 화질 및 용량 | 미지원 또는 거친 디더링 | 별도 플러그인 필요 | 2-패스 PaletteGen & PaletteUse (80% 용량 절감) |
| 외부 통신량 | 수백 MB 영상 데이터 외부 유출 | 업데이트 체크 발생 | 완전 0바이트 (Zero Telemetry 엄수) |
ZeliScreen은 이러한 프라이버시 위험과 시스템 과부하를 완전히 해결하기 위해 설계된 WinUI 3 네이티브 온디바이스 초경량 화면 녹화 및 미디어 추출 도구입니다.
2. Win32 GDI `gdigrab` 초저지연 프레임버퍼 캡처 파이프라인
ZeliScreen은 무거운 그래픽 후킹 드라이버나 복잡한 가상 장치 설치 없이, Windows 디스플레이 서브시스템 내장 GDI(Graphics Device Interface) 프레임버퍼를 직접 캡처하는 gdigrab 엔진을 구동합니다.
// ═══════════════════════════════════════════════════════
// ZeliScreen Win32 GDI 데스크톱 캡처 엔진 구동
// ═══════════════════════════════════════════════════════
private void StartRecording()
{
string ffmpeg = GetFfmpegPath();
int fps = int.Parse(((CmbFps.SelectedItem as ComboBoxItem)?.Tag as string) ?? "30");
int crf = int.Parse(((CmbQuality.SelectedItem as ComboBoxItem)?.Tag as string) ?? "23");
bool isGif = CmbFormat.SelectedIndex == 1;
bool drawMouse = ChkCursor.IsChecked == true;
string ext = isGif ? "gif" : "mp4";
string timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
_currentOutputPath = Path.Combine(_outputDir, $"ZeliScreen_{timestamp}.{ext}");
string drawMouseArg = drawMouse ? "1" : "0";
string args;
if (isGif)
{
// 2-패스 팔레트 최적화 GIF 필터 그래프
args = $"-f gdigrab -framerate {fps} -draw_mouse {drawMouseArg} -i desktop " +
$"-vf \"fps={Math.Min(fps, 15)},scale=trunc(iw/2)*2:trunc(ih/2)*2:flags=lanczos," +
$"split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" " +
$"-y \"{_currentOutputPath}\"";
}
else
{
// 초고속 무손실 H.264 MP4 스트리밍
args = $"-f gdigrab -framerate {fps} -draw_mouse {drawMouseArg} -i desktop " +
$"-c:v libx264 -crf {crf} -preset ultrafast -pix_fmt yuv420p " +
$"-y \"{_currentOutputPath}\"";
}
_ffmpegProcess = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = ffmpeg,
Arguments = args,
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardInput = true,
RedirectStandardError = true // stderr 파이프 리다이렉션
}
};
_ffmpegProcess.Start();
// [핵심] OS 파이프 버퍼 고갈 방지를 위한 비동기 스트림 소비
_ffmpegProcess.ErrorDataReceived += (s, a) => { };
_ffmpegProcess.BeginErrorReadLine();
_isRecording = true;
_recordStartTime = DateTime.Now;
_timer.Start();
}
이 파이프라인은 내장 그래픽만을 탑재한 저사양 교육용 PC에서도 CPU 점유율 3% 미만을 유지하며, 마우스 커서의 동적 렌더링 옵션(-draw_mouse 1|0)을 제공하여 강의 판서 시 교사의 마우스 궤적을 선명하게 포착합니다.
3. 2-패스 팔레트 최적화 GIF 생성기: PaletteGen & PaletteUse 엔진
정적 문서나 웹 안내문에 동영상을 첨부하려면 비디오 플레이어가 필요하지만, GIF 애니메이션은 별도의 재생기 없이 즉각 재생됩니다. 그러나 단순 GIF 변환은 256색 제한으로 인해 심각한 계단 현상(Banding)과 거대한 파일 크기(수십 MB)를 유발합니다.
ZeliScreen은 고급 미디어 필터 그래프인 2-패스 팔레트 최적화 파이프라인을 내장했습니다:
- PaletteGen: 화면 프레임 전체의 색상 분포를 인메모리에서 분석하여 최적의 256 커스텀 색상 팔레트(
[p])를 동적으로 생성. - PaletteUse: 생성된 최적 팔레트를 원본 비디오 스트림에 매핑하여, 그라디언트 노이즈 없이 부드러운 트루컬러급 화질을 재현.
- Lanczos 짝수 스케일링:
scale=trunc(iw/2)*2:trunc(ih/2)*2:flags=lanczos를 통해 홀수 픽셀로 인한 비트맵 왜곡을 방지하고 선명도를 극대화.
이를 통해 기존 30MB에 달하던 10초 분량의 화면 캡처 GIF를 3~5MB 수준으로 약 80% 압축하여, 학생 과제물 피드백 및 공문서 첨부 파일로 완벽하게 활용할 수 있습니다.
4. 표준 에러(stderr) 파이프 버퍼 데드락 방어와 Graceful Shutdown 시그널링
프로세스 제어 관점에서 외부 인코더(FFmpeg)를 C# 백그라운드로 실행할 때 가장 흔하게 발생하는 버그는 파이프 버퍼 데드락(Pipe Buffer Deadlock)과 비디오 파일 손상(Moov Atom Missing)입니다.
// ── [1] 파이프 버퍼 고갈 방지 ──
// FFmpeg는 인코딩 프레임 로그를 stderr로 끊임없이 출력한다.
// 이를 읽지 않으면 Windows 파이프 버퍼(~4KB)가 꽉 차서 FFmpeg가 영구 멈춤(Freezing) 상태에 빠진다.
_ffmpegProcess.ErrorDataReceived += (s, a) => { };
_ffmpegProcess.BeginErrorReadLine();
// ── [2] 무결성 보장을 위한 Graceful Shutdown 시그널링 ──
private void StopRecording()
{
try
{
if (_ffmpegProcess != null && !_ffmpegProcess.HasExited)
{
// 프로세스를 강제 Kill하면 MP4의 moov 아톰 인덱스가 기록되지 않아 파일이 깨짐!
// 표준입력에 'q' 키를 전송하여 파일 헤더를 안전하게 마무리하도록 시그널링
_ffmpegProcess.StandardInput.Write("q");
_ffmpegProcess.StandardInput.Flush();
// 최대 5초간 인덱스 작성 대기 후 종료
if (!_ffmpegProcess.WaitForExit(5000))
{
_ffmpegProcess.Kill();
}
}
}
catch { }
finally
{
_ffmpegProcess?.Dispose();
_ffmpegProcess = null;
_isRecording = false;
_timer.Stop();
}
}
녹화 정지 시 StandardInput.Write("q")를 전달하여 인코더가 H.264 스트림의 후행 메타데이터(Moov Atom)를 완벽히 마감할 수 있도록 보장함으로써, 녹화본이 재생되지 않는 치명적 데이터 손상을 100% 방어합니다.
5. 0바이트 외부 통신 & 로컬 비디오 저장소 완전 격리 (Air-Gap Zero-Data-Leak)
ZeliScreen으로 녹화된 모든 영상은 사용자의 로컬 윈도우 비디오 폴더(%UserProfile%\Videos\ZeliScreen)에만 타임스탬프 기반 파일명으로 즉시 저장됩니다.
외부 서버로의 핑이나 텔레메트리 수집 패킷이 완전한 0바이트를 유지하므로, 인터넷 케이블을 분리한 국가 시험 출제 본부나 군사 훈련 폐쇄망에서도 어떠한 보안 위협 없이 안심하고 화면 녹화를 수행할 수 있습니다.
6. 결론: 국가 교육 현장과 공공 소프트웨어 미디어 거버넌스의 미래
ZeliScreen은 가볍고 빠른 실행력과 암호학적 데이터 격리를 통해, 교육 현장의 교육용 미디어 제작 패러다임을 혁신합니다.
- ZeliConvert(#932)와의 온디바이스 파이프라인 연계: ZeliScreen으로 녹화된 MP4 영상을 ZeliConvert를 통해 WebM, MKV 등 11종 공공 표준 미디어 포맷으로 0초 만에 무손실 트랜스코딩.
- ZeliImg(#928)와의 결합: 화면 캡처 이미지 및 GIF에 포함될 수 있는 시스템 메타데이터를 원클릭으로 정제하여 개인정보 누출 0초 차단.
- 차세대 영역 지정(Region Capture) 및 오디오 루프백 확장: 전체 화면뿐 아니라 활성 창 및 지정 사각형 영역만을 부분 녹화하고, 교사 마이크 음성과 시스템 사운드를 믹싱하는 차세대 오디오 루프백 파이프라인 탑재 예정.
데이터 유출 걱정 없는 안전한 강의 녹화, 복잡한 설정 없는 원클릭 고화질 캡처—ZeliDesk가 온디바이스 유틸리티 아키텍처를 통해 견고하게 증명해 나가는 미래 교육 공학의 표준입니다.