iBetter Books
수정

marimo 생태계 한눈에 보기

marimo는 단일 명령어가 아니라 여러 기능이 조합된 생태계입니다. 이 챕터는 전체 구성을 조망하는 지도 역할을 합니다. 각 기능의 상세 사용법은 해당 PART에서 다룹니다.

CLI 명령 체계

marimo의 모든 주요 기능은 CLI로 제어합니다.

명령 역할 주요 사용 시점
marimo edit notebook.py 브라우저 에디터에서 노트북 편집 개발, 분석
marimo run notebook.py 앱 모드로 실행 (편집 불가) 배포, 시연
marimo convert source -o out.py .ipynb 또는 기타 형식을 marimo .py로 변환 Jupyter 마이그레이션
marimo export html notebook.py -o out.html 출력 포함 정적 HTML로 내보내기 리포트 공유
marimo export html-wasm notebook.py -o out.wasm.html WASM 자체 포함 HTML (서버 불필요) 브라우저 단독 배포
marimo export ipynb notebook.py -o out.ipynb Jupyter 형식으로 내보내기 기존 Jupyter 환경 공유
marimo export md notebook.py -o out.md 마크다운 내보내기 Quarto, MyST 연동
marimo export script notebook.py -o out.py 위상정렬된 실행 가능 스크립트 CI/CD 자동화

--sandbox 옵션을 붙이면 노트북별 격리 가상환경을 자동 생성하고 패키지 의존성을 PEP 723 인라인 메타데이터로 노트북 파일에 기록합니다.

marimo edit --sandbox analysis.py

mo.ui 위젯

mo.ui 네임스페이스 아래 인터랙티브 입력 위젯이 내장되어 있습니다. 별도 라이브러리 없이 사용 가능합니다.

카테고리 주요 위젯
수치 입력 mo.ui.slider, mo.ui.range_slider, mo.ui.number
텍스트 입력 mo.ui.text, mo.ui.text_area
선택 mo.ui.dropdown, mo.ui.radio, mo.ui.multiselect, mo.ui.checkbox
기타 입력 mo.ui.date, mo.ui.file, mo.ui.button, mo.ui.run_button
데이터 뷰 mo.ui.table, mo.ui.dataframe, mo.ui.data_explorer
복합 탭, 아코디언, 사이드바, mo.hstack, mo.vstack

위젯 값은 .value로 참조합니다. 전역 변수로 할당하면 다른 셀에서 .value를 읽을 때 반응형으로 동작합니다.

DuckDB SQL 셀

mo.sql()을 사용하면 노트북 셀에서 SQL을 직접 실행할 수 있습니다. DuckDB 엔진 기반으로 별도 데이터베이스 서버가 필요 없습니다.

result = mo.sql(f"""    SELECT * FROM weather WHERE location = '{city.value}'""")

f-string으로 Python 변수나 위젯 값을 SQL에 삽입할 수 있습니다. 위젯 값이 바뀌면 SQL도 자동으로 재실행됩니다. 반환 타입은 환경에 따라 Polars DataFrame 또는 Pandas DataFrame입니다.

anywidget 통합

ipywidgets 생태계에서 anywidget 프로토콜을 따르는 위젯은 mo.ui.anywidget()으로 래핑해 marimo 안에서 사용할 수 있습니다. JavaScript/CSS 기반 커스텀 시각화 라이브러리를 통합하는 주요 경로입니다.

WASM 내보내기

marimo export html-wasm 명령으로 서버 없이 브라우저에서만 실행되는 HTML을 만들 수 있습니다. Pyodide(CPython WebAssembly 포트) 기반입니다. GitHub Pages나 Cloudflare Pages에 올리면 Python 서버 없이 노트북을 공유할 수 있습니다.

단, 네이티브 C 확장이 필요한 라이브러리는 WASM에서 동작하지 않습니다. WASM 배포를 계획한다면 사용하는 패키지의 호환 여부를 먼저 확인해야 합니다. 자세한 내용은 PART 09에서 다룹니다.

AI-native 에디터

marimo 에디터는 AI 코드 완성과 셀 생성 기능을 내장하고 있습니다. 외부 LLM API 키를 설정해 사용합니다. 반응형 실행 환경이기 때문에 AI가 생성한 코드를 즉시 실행하고 결과를 확인하면서 반복할 수 있습니다.

생태계 구성 요약

marimo
├── 편집 환경
│   ├── 브라우저 내장 에디터 (marimo edit)
│   └── AI 코드 완성 내장
├── 실행 환경
│   ├── 반응형 노트북 (DAG 기반)
│   ├── 앱 모드 (marimo run)
│   └── 스크립트 실행 (python notebook.py)
├── UI
│   ├── mo.ui 내장 위젯
│   ├── mo.md, mo.hstack, mo.vstack, 탭, 아코디언
│   └── anywidget 통합
├── 데이터
│   ├── DuckDB SQL 셀 (mo.sql)
│   ├── Polars / Pandas 연동
│   └── mo.cache / mo.persistent_cache
├── 내보내기
│   ├── 정적 HTML, WASM HTML
│   ├── .ipynb (Jupyter 역방향 내보내기)
│   └── 마크다운, 스크립트
└── 패키지 관리
    ├── uv 통합
    └── --sandbox (노트북별 격리 환경, PEP 723)

이 구조를 머릿속에 두고 이후 PART를 읽으면 각 기능이 전체 그림에서 어디에 위치하는지 파악하기 쉽습니다.