200ms 미만 부팅! 가상 머신, 컨테이너를 대체할 수 있을까?
Smol machines는 200ms 미만의 빠른 부팅 시간과 휴대성을 강조하며, 격리된 환경에서 소프트웨어를 실행하는 CLI 도구임.
Docker 컨테이너(Docker Container)와 유사한 사용성을 제공하며, Firecracker와 같은 기술을 기반으로 VM을 생성하여 보안성을 강화함.
JVM 앱(JVM Apps)을 위한 자체 포함 바이너리 생성 기능은 GraalVM Native보다 간편한 패키징 솔루션으로 주목받음.
Docker 미지원(Docker Unsupported) 및 중첩 VM(Nested VM) 미지원은 Vagrant와 같은 도구 사용에 제약으로 작용하며, 개선이 필요하다는 의견이 존재함.
Smol machines의 핵심 기술: 빠른 부팅
Smol machines는 libkrun VMM을 사용하여 가상 머신을 생성하며, Hypervisor.framework(macOS) 또는 KVM(Linux)을 통해 하드웨어 격리를 제공한다. 특히, 200ms 미만의 부팅 시간을 달성하기 위해, .smolmachine이라는 단일 파일에 VM 상태를 저장하고, 호스트 아키텍처와 일치하는 환경에서 즉시 실행할 수 있도록 설계되었다. 이는 기존 컨테이너 기술의 단점을 보완하는 핵심적인 특징으로 평가받는다. 또한, virtio balloon을 통해 메모리 사용량을 탄력적으로 관리하여, 오버 프로비저닝(Over-provisioning)에 따른 비용을 최소화한다.
컨테이너 vs Smol machines: 아키텍처 비교
Smol machines는 컨테이너 기술과 비교하여, VM당 워크로드(VM per workload)를 제공하여 격리 수준을 높였다. 반면, 컨테이너는 네임스페이스(Namespace)를 사용하여 자원을 공유한다. 부팅 시간 측면에서 Smol machines는 200ms 미만으로, 컨테이너의 100ms, QEMU의 수 초, Firecracker의 125ms보다 빠르다. 이러한 성능 차이는 아키텍처(Architecture)의 근본적인 차이에서 기인하며, Smol machines는 libkrun을, 컨테이너는 Daemon을, Firecracker는 Process를 사용한다.
보안 및 격리: 신뢰할 수 없는 코드 실행
Smol machines는 기본적으로 네트워크 접근을 차단하여, 데이터 격리 아키텍처(Data Isolation Architecture)를 구현한다. 사용자는 `--allow-host` 옵션을 통해 특정 호스트에 대한 접근을 허용할 수 있다. 또한, SSH 에이전트(SSH Agent)를 VM 내부로 전달하여, 호스트의 SSH 키를 안전하게 사용할 수 있도록 지원한다. 이러한 기능은 신뢰할 수 없는 코드(Untrusted Code)를 안전하게 실행하기 위한 핵심적인 요소로 작용하며, 멀티모달 분석(Multimodal Analysis)과 같은 보안 관련 작업에 유용하게 활용될 수 있다.
커뮤니티의 주요 논쟁: Docker 및 중첩 VM 지원
커뮤니티에서는 Smol machines가 Docker를 지원하지 않는 점과 중첩 VM(Nested VM)을 지원하지 않는 점에 대한 아쉬움을 표명했다. 특히, Docker Compose를 사용하는 프로젝트나 Vagrant와 같은 도구를 사용하는 경우, Smol machines의 활용에 제약이 발생할 수 있다. 이러한 단점은 Smol machines의 확장성(Extensibility)을 제한하는 요소로 작용하며, 향후 개선이 필요한 부분으로 지적된다. 하지만, JVM 앱(JVM Apps)을 위한 자체 포함 바이너리 생성 기능은 GraalVM Native보다 간편한 패키징 솔루션으로 주목받고 있다.