
Python 플러그인이나 AI Agent가 코드를 직접 실행하게 만들면 가장 먼저 보안 문제가 따라옵니다. 실행된 코드가 파일을 읽거나, 네트워크를 호출하거나, 무한 루프에 빠지면 어떻게 막을 수 있을까요?
알파 패키지인 micropython-wasm은 이 문제를 작게 풀어보는 실험입니다. MicroPython을 WebAssembly 샌드박스 안에서 실행하고, Python 애플리케이션에서는 Wasmtime을 통해 그 코드를 구동합니다.1 이 패키지는 Datasette Agent용 코드 실행 샌드박스 플러그인인 datasette-agent-micropython의 기반으로도 쓰입니다.1
목표는 “완전한 Python 실행”이 아니다
micropython-wasm을 이해할 때 가장 중요한 점은 이것이 CPython 전체를 격리 실행하는 방식이 아니라는 것입니다.
MicroPython은 다양한 시스템과 하드웨어 플랫폼에서 실행되는 Python 구현이며, 플랫폼별 구현은 ‘포트(port)’라고 불립니다.2 MicroPython 문서는 CPython과 다른 동작을 별도로 다루고, MicroPython 전용 언어 기능에 대한 레퍼런스도 제공합니다.2 또한 pyboard, ESP8266, ESP32, Raspberry Pi RP2xxx, UNIX, Windows 등 여러 대상 플랫폼 문서를 제공합니다.2
따라서 여기서의 핵심은 “Python 코드가 그대로 다 돈다”가 아닙니다. 더 정확히는 “제한된 Python 실행 환경을 작고 통제 가능한 단위로 제공한다”에 가깝습니다. 작은 스크립트, 데이터 변환, 제한된 플러그인 로직처럼 실행 범위를 명확히 정할 수 있는 작업에 잘 맞습니다.
WASM은 실행 경계를 설계 가능한 대상으로 만든다
micropython-wasm은 MicroPython을 WASI WebAssembly 모듈로 패키징해 Wasmtime에서 실행합니다.1 포함된 WebAssembly 바이너리 크기는 362KB로 작습니다.1
이 접근의 장점은 실행 경계를 비교적 분명하게 둘 수 있다는 데 있습니다. micropython-wasm은 기본적으로 새 Wasmtime 인스턴스에서 코드를 실행합니다. 파일 시스템 접근은 명시적으로 읽기 전용 디렉터리를 열어줄 때만 가능하고, 네트워크 권한은 없습니다.1
또한 WebAssembly 메모리, fuel, wall-clock timeout을 설정할 수 있습니다.1 여기서 fuel은 실행량 예산에 가깝습니다. 코드가 너무 오래 실행되거나 무한 루프에 빠질 때 중단할 수 있도록 돕는 장치입니다. Wasmtime Python 라이브러리가 메모리 제한을 직접 지원한다는 점도 이 구조와 잘 맞습니다.1
물론 WASM이 모든 보안 문제를 자동으로 해결해주는 것은 아닙니다. 하지만 권한, 메모리, 실행 시간 같은 위험 요소를 애플리케이션 설계자가 명시적으로 다룰 수 있게 만든다는 점이 중요합니다.
도입 전 확인할 기준
실제로 적용하려면 Wasmtime 실행 환경의 조건도 확인해야 합니다. Wasmtime Python 패키지는 pip install wasmtime으로 설치할 수 있으며, Python 3.9 이상 64비트 빌드를 지원합니다.3 지원 운영체제는 Windows, macOS, Linux이고, CPU 아키텍처는 x86_64와 arm64입니다.3
운영 측면에서는 버전 관리가 특히 중요합니다. wasmtime-py는 Wasmtime의 버전 체계를 따르며 매달 새 메이저 버전이 나옵니다.3 새 메이저 버전에는 이전 메이저 버전용 코드와 호환되지 않는 변경이 포함될 수 있습니다.3 따라서 의존성 버전을 고정하고, 업그레이드 시 테스트를 전제로 두는 편이 안전합니다.
어디에 쓸 수 있을까
micropython-wasm은 아직 알파 패키지입니다. 모든 프로덕션 플러그인 시스템의 즉시 적용 가능한 정답이라기보다는, 제한된 코드 실행이 필요한 영역에서 실험해볼 만한 선택지에 가깝습니다.
예를 들면 다음과 같은 작업이 어울립니다.
데이터 정리용 짧은 스크립트 실행
포맷 변환 로직 실행
내부 도구에서 제한된 사용자 코드 실행
AI Agent가 생성한 작은 코드 조각의 격리 실행
결론은 단순합니다. 앞으로 애플리케이션은 사용자 코드나 모델이 만든 코드를 더 자주 실행하게 됩니다. 이때 필요한 것은 실행 코드를 더 많이 믿는 일이 아니라, 더 작은 권한과 더 분명한 경계를 설계하는 일입니다. micropython-wasm은 그 방향을 보여주는 작고 실용적인 실험입니다.
1GitHub - simonw/micropython-wasm
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.
