Electron 렌더 프로세스에서 벗어나 Swift로 녹화 엔진을 재구축한 이유
Rebuilding our Electron meeting-recording engine in Swift

Circleback은 미팅 녹화 엔진을 Electron의 렌더 프로세스에서 Swift 기반 네이티브 코드로 전면 재작성했습니다. 렌더 프로세스는 GC 일시 중지, 스로틀링 등 실시간 오디오/비디오 캡처에 적합하지 않다고 판단했기 때문입니다. macOS에서는 ScreenCaptureKit, Windows에서는 libobs를 사용하고, Swift 레이어로 통합했습니다. 또한 Swift의 @Published 속성을 React의 Jotai atom으로 자동 변환하는 내부 도구 'Atomic'을 개발해 브리지 코드를 제거했습니다. 이 글은 클록 동기화, 드라이버 샘플 레이트 불일치, 충돌에도 안전한 fragmented MP4 등 녹화 엔진 구현의 까다로운 문제와 해결책을 다룹니다.
렌더 프로세스는 실시간 오디오 및 비디오 캡처에 적합한 곳이 아닙니다. 캡처 엔진은 GC 일시 중지, 스로틀링 또는 브라우저 런타임이 반응성을 유지하기 위해 수행하는 다른 어떤 것도 용납할 수 없습니다.