🎬 미디어 서버는 컨테이너로 — 못 하는 일은 호스트가 대신 해줍니다
GPU는 AI가 독점하고 있어서 영상 트랜스코딩은 내장 그래픽에 맡겼습니다. 가상머신 대신 컨테이너를 고른 이유와, 컨테이너가 못 하는 일을 우회한 방법을 정리했습니다.
2026년 8월 13일서버에 미디어 서버를 하나 올리려 했습니다. 영상을 재생할 때 형식이 안 맞으면 실시간으로 변환해야 하는데, 이걸 CPU로 하면 버거워요. 그래픽 장치에 맡겨야 합니다. 그런데 GPU는 이미 AI 쪽이 통째로 가져간 상태였습니다. 남은 건 CPU에 붙어 있는 내장 그래픽뿐이었어요. 결과적으로는 그게 더 나은 선택이었습니다.
독점해야 하는가, 나눠 써도 되는가
게스트에 장치를 주는 방법은 크게 두 갈래입니다.
가상머신 + 패스스루 장치를 통째로 넘김. 한 게스트가 독점하고 호스트도 못 씀
컨테이너 + 장치 공유 호스트의 장치 파일을 빌려 씀. 여러 컨테이너가 동시에 가능
이 차이가 선택을 결정했습니다. AI 작업은 GPU를 온전히 써야 하니 가상머신에 통째로 넘겼고, 영상 변환은 그럴 필요가 없으니 컨테이너로 갔어요. 장치를 독점해야 하는 일인지 아닌지가 기준입니다. GPU를 넘기는 쪽에서 부딪힌 문제들은 패스스루는 무엇을 넘길지가 아니라, 무엇이 남아야 하는지의 문제였습니다에 따로 적어뒀습니다.
내장 그래픽을 쓴 덕에 덤도 생겼습니다. AI가 GPU를 온종일 붙들고 있어도 영상은 그대로 재생됩니다. 만약 둘 다 GPU에 몰아넣었다면 AI 작업 중엔 영상을 못 봤을 거예요. 전력 효율도 이쪽이 낫고요.
컨테이너에 장치를 넘기는 건 한 줄입니다.
pct set 101 --dev0 /dev/dri/renderD128,mode=0666
드라이버가 저장소에 없다고 나올 때
컨테이너 안에서 그래픽 드라이버를 깔려는데 패키지를 찾을 수 없다고 나왔습니다.
E: Package 'intel-media-va-driver-non-free' has no installation candidate
이름이 없어서가 아니라 저장소에서 그 부분이 꺼져 있어서였어요. 리눅스 배포판은 라이선스 성격에 따라 패키지를 몇 갈래로 나눠 관리하는데, 자유 소프트웨어가 아닌 쪽은 기본으로 빠져 있는 경우가 있습니다. 최근 버전에서 저장소 설정 파일 형식이 바뀌면서 이 부분을 다시 켜야 했습니다.
sed -i 's/^Components:.*/Components: main contrib non-free non-free-firmware/' \
/etc/apt/sources.list.d/debian.sources
apt update
설치 후에는 장치가 실제로 잡혔는지 확인합니다.
vainfo
여기서 지원하는 코덱 목록이 나오면 준비된 겁니다. 설정 화면에서 하드웨어 가속을 켜도 이 단계가 안 돼 있으면 조용히 CPU로 처리되니, 눈으로 한 번 보고 넘어가는 편이 낫습니다.
컨테이너가 못 하는 일은 호스트가 대신합니다
영상 파일은 나스에 있고 미디어 서버는 컨테이너에 있으니 네트워크로 연결해야 했습니다. 그런데 안 됐어요. 보안을 위해 권한을 제한한 컨테이너는 네트워크 저장소를 직접 붙일 수 없습니다. 필요한 권한이 없거든요.
여기서 방향을 바꿨습니다. 컨테이너가 못 한다면 호스트가 대신 하면 됩니다. 호스트에서 나스를 연결해두고, 그 폴더를 컨테이너에 빌려주는 방식이에요.
이 발상은 다른 데서도 통합니다. 권한을 제한한 컨테이너가 막히는 일은 대개 이런 식으로 우회할 수 있어요. 컨테이너의 제약을 뚫으려 하는 대신, 그 일을 할 수 있는 쪽에 맡기고 결과만 넘겨받는 겁니다.
시작 순서는 의존성이 아니라 재시도로
여기서 새 문제가 생겼습니다. 서버를 재부팅하면 나스도 가상머신이라 뜨는 데 시간이 걸립니다. 그런데 미디어 서버가 먼저 시작해버리면 폴더가 텅 빈 상태로 연결돼요. 영상이 하나도 없는 화면이 뜹니다.
시작 순서를 지정하는 방법도 있지만, 그건 “먼저 시작한다”만 보장하지 “준비가 끝났다”를 보장하진 않습니다. 나스가 부팅을 마치는 데 걸리는 시간은 매번 다르고요.
그래서 성공할 때까지 재시도하는 방식으로 갔습니다. 연결을 시도해보고 안 되면 잠시 기다렸다 다시 하고, 성공하면 그때 미디어 서버를 시작하는 스크립트를 만들어 부팅 시 자동 실행되게 걸었어요.
집 서버에서는 이쪽이 현실적입니다. 순서를 아무리 정교하게 짜도 예외는 생기는데, 재시도는 예외를 그냥 흡수하거든요.
경로에 한글을 쓰지 마세요
마지막은 허무한 함정이었습니다. 컨테이너가 시작을 안 하는데 오류 메시지가 이랬어요.
Wide character in print
설정 파일에 들어간 한글 경로가 원인이었습니다. 나스 쪽 폴더 이름을 한글로 쓰고 있었는데, 그게 그대로 설정에 들어가면서 처리가 안 된 거예요.
오류 메시지가 원인을 전혀 알려주지 않아서 시간을 꽤 썼습니다. 마운트 지점은 영문으로 만드는 게 안전합니다. 나스 안에서는 한글 폴더를 써도 되지만, 서버 설정에 들어가는 경로만큼은 영문으로 두세요.
정리
정리하면 네 가지입니다.
장치를 독점해야 하는 일인지 아닌지로 가상머신과 컨테이너를 나눕니다. 권한이 제한된 컨테이너가 못 하는 일은 호스트가 대신 해주고 결과만 넘깁니다. 자동 시작 순서는 의존성 지정보다 재시도가 현실적입니다. 그리고 설정에 들어가는 경로에는 한글을 쓰지 않습니다.
가장 크게 남은 건 두 번째예요. 막혔을 때 그 제약을 뚫으려 애쓰는 대신, 할 수 있는 쪽이 누구인지 찾는 것. 이 관점 하나로 풀린 문제가 여럿이었습니다.