iBetter Books
수정

Jupyter 사용자를 위한 적응 가이드

Jupyter를 써온 사람에게 marimo는 처음에 낯설게 느껴지는 부분이 있습니다. 실행 모델과 파일 형식이 근본적으로 다르기 때문입니다. 이 챕터는 Jupyter 사용자가 marimo로 전환할 때 마주치는 주요 차이점과 대응 방법을 정리합니다.

Jupyter와 marimo의 핵심 차이

항목 Jupyter marimo
파일 형식 JSON (.ipynb) 순수 Python (.py)
실행 모델 수동 순차 실행 (REPL) DAG 반응형 자동 실행
Hidden state 발생 가능 (셀 삭제 후에도 변수 잔류) 없음 (셀 삭제 시 변수 즉시 제거)
셀 출력 저장 파일에 포함 파일에 미포함 (실행 시 생성)
Git diff 출력 포함으로 노이즈 많음 코드만 포함 — 깔끔한 diff
스크립트 실행 nbconvert 또는 별도 변환 필요 python notebook.py 직접 실행 가능
변수 중복 정의 허용 (마지막 값 사용) 금지 (MB002 에러)
셀 재실행 수동으로 셀 선택 후 실행 의존 셀이 자동 재실행

버려야 할 Jupyter 습관

셀을 수동으로 순서대로 실행하는 습관

Jupyter에서는 모든 셀을 위에서 아래로 실행해야 결과가 일관됩니다. marimo는 변수 의존 관계를 추적해 필요한 셀만 자동으로 재실행합니다. 셀을 선택해서 하나씩 실행할 필요가 없습니다.

"커널 재시작 후 전체 실행"에 의존하는 습관

Jupyter에서 hidden state가 쌓이면 커널을 재시작하고 전체를 다시 실행합니다. marimo에서는 셀을 삭제하면 그 셀의 변수가 즉시 사라지므로 이런 상황이 발생하지 않습니다. 단, 처음 환경을 검증하거나 완전 재실행이 필요할 때는 툴바의 전체 실행 버튼을 사용합니다.

같은 변수를 여러 셀에서 재정의하는 습관

Jupyter에서는 실험 중에 같은 변수에 다른 값을 할당해가며 작업하는 경우가 많습니다. marimo에서는 동일 변수를 두 개 이상의 셀에서 정의하면 MB002 에러가 발생합니다.

# Cell 1model = train_model(data)   # model 정의# Cell 2model = load_model("path")  # 같은 model 재정의로 MB002 에러 발생

해결 방법은 두 가지입니다. 하나의 셀에서 조건 분기로 처리하거나, 변수 이름을 달리합니다.

# 방법 1: 하나의 셀에서 처리use_pretrained = Truemodel = load_model("path") if use_pretrained else train_model(data)
# 방법 2: 다른 변수명 사용trained_model = train_model(data)loaded_model = load_model("path")

셀 안에서 결과를 print로 출력하는 습관

Jupyter에서는 print(result)로 출력합니다. marimo에서도 print는 동작하지만, 셀의 마지막 표현식이 있으면 그것이 셀 출력으로 표시됩니다. 단순히 변수를 마지막 줄에 적는 것으로 결과를 볼 수 있습니다.

result = compute()result          # 이 줄이 셀 출력으로 표시됨

자동 재실행에 적응하기

처음에는 셀을 수정할 때마다 다른 셀이 자동으로 실행되는 것이 낯설 수 있습니다. 특히 계산 비용이 큰 셀이 포함된 노트북에서는 부담이 됩니다.

이런 경우 lazy 모드를 사용합니다. lazy 모드에서는 의존 셀이 "stale" 상태로 표시되고, 사용자가 직접 실행할 때만 재계산합니다. 설정 방법은 PART 02 Ch 04에서 다룹니다.

파일 형식 차이와 git

Jupyter의 .ipynb 파일은 JSON으로 셀 출력까지 저장합니다. 코드 한 줄을 수정해도 출력이 포함된 여러 줄이 변경됩니다. git diff가 읽기 어렵고 코드 리뷰가 복잡해집니다.

marimo의 .py 파일은 코드만 저장합니다. 출력은 파일에 포함되지 않습니다. git diff가 변경한 코드만 보여주므로 코드 리뷰가 훨씬 명확합니다. 이것이 팀 협업 환경에서 marimo를 선택하는 주요 이유 중 하나입니다.

Jupyter 노트북을 marimo로 변환하기

기존 .ipynb 파일을 marimo 형식으로 변환하는 명령이 있습니다.

marimo convert my_notebook.ipynb -o my_notebook.py

변환 후에는 반드시 내용을 확인해야 합니다. 실행 순서에 의존하는 코드나 같은 변수를 여러 번 재정의하는 셀은 변환 후 에러가 발생합니다. 변환 후 처리 방법은 PART 05에서 자세히 다룹니다.

ipywidgets 사용자를 위한 안내

Jupyter에서 ipywidgetsinteract 함수를 사용했다면, marimo에서는 다른 방식으로 작성합니다. interact는 marimo에서 직접 지원하지 않습니다.

# Jupyter의 ipywidgets 방식 (marimo에서 동작하지 않음)from ipywidgets import interactinteract(lambda x: x * 2, x=(0, 10))

marimo에서는 위젯을 전역 변수로 정의하고, 다른 셀에서 .value를 참조합니다.

# marimo 방식import marimo as moslider = mo.ui.slider(0, 10, value=5, label="x")slider
# 별도 셀에서 slider.value 참조, slider가 바뀌면 이 셀이 자동 재실행result = slider.value * 2mo.md(f"결과: {result}")

위젯과 UI에 대한 자세한 내용은 PART 03에서 다룹니다.