
도커 컨테이너가 무겁게 느껴질 때: Toro 유니커널로 마이크로VM 시작하기
도커 컨테이너의 리소스 낭비를 줄이기 위한 대안으로 주목받는 Toro 유니커널과 MicroVM 배포 경험을 공유합니다. 유니커널의 장단점과 효율성을 직접 확인해 보세요.
김영태
테크리드

안녕하세요. 풀링포레스트 테크리드 김영태입니다.
개발자라면 누구나 한 번쯤 "고작 이 작은 애플리케이션 하나 띄우는데 리눅스 OS 전체가 꼭 필요할까?"라는 의문을 품어봤을 겁니다. 저 또한 얼마 전 사내 해커톤에서 초경량 마이크로서비스 아키텍처를 구상하다가 비슷한 고민에 빠졌습니다. 도커(Docker)가 혁신적인 건 맞지만, 수백 개의 컨테이너가 각각 OS 사용자 영역(Userland)을 짊어지고 가는 구조는 리소스 측면에서 여전히 '세금'을 내는 기분이 들거든요. 그러다 문득 AWS Firecracker나 gVisor 같은 격리 기술을 찾아보게 되었고, 그 과정에서 흥미로운 프로젝트 하나를 발견했습니다. 바로 Toro(Toro Kernel)입니다.
솔직히 처음엔 반신반의했습니다. "유니커널(Unikernel)이라니, 학계에서나 쓰는 거 아니야?"라는 편견이 있었죠. 하지만 Toro의 GitHub 저장소를 뜯어보고 직접 로컬에서 돌려보며 생각이 조금 바뀌었습니다. 오늘은 이 Toro를 통해 애플리케이션을 MicroVM으로 배포해 본 경험과, 그 과정에서 느낀 점을 공유하려 합니다.
먼저 유니커널이 생소한 분들을 위해 간단히 설명하자면, 쉽게 말해 '애플리케이션과 커널을 하나로 합친 단일 이미지'입니다. 불필요한 OS 기능은 다 빼버리고, 오직 내 앱이 실행되는 데 필요한 기능만 남긴 것이죠. Toro는 여기에 와 을 적극 활용해 최소주의 아키텍처를 구현했습니다.
가장 인상 깊었던 건 '접근성'이었습니다. 보통 커널 레벨을 건드린다고 하면 복잡한 크로스 컴파일러 설정부터 떠올리며 겁을 먹기 마련입니다. 그런데 Toro는 개발 환경 자체를 도커 이미지로 제공하더군요. KVM이 활성화된 리눅스 머신만 있다면 바로 테스트해볼 수 있었습니다.
실제로 제가 로컬 환경에서 예제를 실행할 때의 과정은 꽤나 신선했습니다.
# 개발용 도커 이미지 빌드
sudo docker build -t torokernel-dev .
# 컨테이너 실행 (KVM 접근을 위해 privileged 모드 필요)
sudo docker run --privileged --rm -it torokernel-dev도커 안에서 또 다른 가상머신(MicroVM)을 띄우는 구조라 옵션이 필수적인데, 보안에 민감한 분들이라면 이 지점에서 눈살을 찌푸릴 수도 있겠습니다. 하지만 개발 환경이니 일단 넘어갑시다. 컨테이너 내부로 진입해서 파이썬 스크립트인 를 실행하면 QEMU-KVM 기반으로 아주 작은 VM이 순식간에 뜨고 "Hello World"를 뱉어냅니다. 부팅 속도가 정말 '눈 깜짝할 새'였습니다.
하지만 마냥 좋기만 했을까요? 뼈저리게 느낀 현실적인 장벽도 있었습니다. 바로 디버깅과 생태계의 부재입니다. 일반적인 리눅스 환경이라면 을 날리거나 로그 파일에 를 걸어 쉽게 문제를 찾았겠지만, Toro는 을 통해 내장 디버거를 붙여야 합니다. 익숙하지 않은 개발자에겐 꽤나 높은 진입장벽이죠.
또한 예제를 돌릴 때, 호스트와 게스트 간의 통신을 위해 과 을 엮는 과정은 꽤 번거로웠습니다. 일반적인 도커 네트워크 설정() 한 줄이면 끝날 일이, 여기선 하위 레벨의 소켓 통신을 이해해야만 가능했습니다. 실제로 바이너리 경로를 잘못 설정해서 한참을 헤매기도 했고요.

그럼에도 불구하고 제가 이 기술에 주목하는 이유는 명확합니다. '극한의 효율'입니다. 서버리스 컴퓨팅이나 엣지 컴퓨팅 환경처럼, 수 밀리초(ms) 단위의 콜드 스타트(Cold Start)가 중요하고 메모리 1MB가 아쉬운 상황이라면 Toro 같은 접근 방식은 강력한 무기가 될 수 있습니다. 512GB 램까지 지원하고 x86-64 아키텍처를 커버하니, 규모 있는 워크로드도 이론상으론 소화 가능합니다.
당장 우리 회사의 메인 프로덕션에 Toro를 도입하겠냐고 묻는다면, 제 대답은 "아직은 시기상조"입니다. 운영 도구와 모니터링 시스템이 기존 리눅스 생태계만큼 받쳐주지 않기 때문입니다. 하지만 사이드 프로젝트나 특정 목적의 경량화된 마이크로서비스라면 충분히 시도해 볼 가치가 있습니다.
기술 트렌드는 돌고 돕니다. 한때는 모든 걸 OS 위에 올렸다가, 가상화(VM)로 격리했고, 컨테이너로 경량화했습니다. 이제는 그 컨테이너조차 무겁다며 다시 MicroVM과 유니커널로 회귀하려는 움직임이 보입니다. 개발자로서 이런 흐름을 놓치지 않고 "도커 다음은 무엇일까?"를 고민해보는 것만으로도 큰 의미가 있다고 생각합니다.
이번 주말에는 무거운 리눅스 배포판 대신, 다이어트가 아주 잘 된 유니커널 하나 띄워보시는 건 어떨까요? 물론, 삽질할 각오는 조금 하셔야겠지만요.


