본문 바로가기

Python/Marimo

Marimo란? Jupyter 대체하는 차세대 Python 노트북

반응형

Marimo

Marimo에 대해 공부해볼 겸 해서 내용을 블로그에 정리해보려 한다.
기존에 사용하던 Jupyter Notebook과 얼마나 다른 지 한 번 알아보자.


Marimo 요약

Marimo는 Python 개발자와 데이터 과학자를 위해 설계된 오픈소스 반응형 노트북이다.
기존 Jupyter Notebook의 한계를 극복하고자 개발된 Marimo는, 셀 간의 의존성을 자동으로 관리하는 반응형 실행 방식을 사용한다. 이로 인해 일관성 있는 워크플로우를 가질 수 있다.
모든 노트북이 Python 파일로 저장되어 버전 관리가 용이하며, 다양한 UI 요소를 통한 인터랙티브한 분석, SQL 데이터베이스 통합, 앱 수준의 배포 기능까지 지원한다.
Marimo는 데이터 분석, 모델 실험, 교육 콘텐츠 제작, 내부 도구 개발 등 다양한 활용에 최적화된 현대적인 개발 환경을 제공한다.


 

 

Marimo 특징

 

반응형 실행 (Reactive Execution)

Marimo는 셀 간의 의존성을 자동으로 추적하여, 특정 셀을 수정하면 해당 변경 사항에 영향을 받는 다른 셀들도 자동으로 실행된다. 이러한 반응형 실행 방식은 노트북의 상태를 항상 일관되게 유지하며, 수동으로 셀을 재실행해야 하는 번거로움을 줄여준다.

 

Python 기반의 파일 구조

Marimo는 노트북을 .py 확장자의 순수 Python 파일로 저장한다. 이는 Git을 통한 버전 관리가 용이하며, 다른 Python 프로젝트와의 통합도 수월하게 해준다. 또한, JSON 기반의 Jupyter Notebook과 달리, 코드의 가독성과 유지보수성이 향상된다.

 

인터랙티브 UI

슬라이더, 드롭다운, 버튼 등 다양한 UI 요소를 코드에 쉽게 통합할 수 있어, 사용자와의 상호작용이 필요한 데이터 분석이나 모델 실험에 유용하다. 이러한 요소들은 코드와 자연스럽게 연결되어, 실시간으로 결과를 확인할 수 있다.

 

SQL 지원

Marimo는 PostgreSQL, MySQL, SQLite, DuckDB, Snowflake, BigQuery 등 다양한 데이터베이스와의 연결을 지원하며, 노트북 내에서 직접 SQL 쿼리를 실행할 수 있다. 이를 통해 데이터 조회 및 분석 작업을 효율적으로 수행할 수 있다.

 

앱 전환

작성한 노트북을 별도의 설정 없이 웹 애플리케이션으로 배포할 수 있다. 코드를 숨기고 UI 요소만을 사용자에게 제공하여, 대시보드나 내부 도구로 활용할 수 있다. 또한, Marimo Cloud를 통해 앱 배포 및 데이터 소스 연결을 간편하게 관리할 수 있다.


 

설치 및 시작

Marimo의 설치는 간단하다. 다음 명령어 중 하나를 사용하여 설치할 수 있다.

pip install marimo
conda install -c conda-forge marimo
uv add marimo

 

필자는 이번에는 uv를 사용해보려 한다.
uv init을 하고 uv add marimo를 해보자.

 

uv add marimo

dependenciesmarimo 확인

그 후, 아래 코드를 사용하면 튜토리얼과 인트로를 확인할 수 있다.

marimo tutorial intro

marimo intro

설치 후, 다음 명령어로 Marimo를 실행할 수 있다.

 

marimo edit

이 명령어를 실행하면 브라우저에서 Marimo 편집기가 열리며, 새로운 노트북을 생성하거나 기존 노트북을 열 수 있다.

marimo edit


 

Marimo Cloud

Marimo Cloud는 로컬에서 개발한 Marimo 노트북을 클라우드 환경에서 실행하고 공유할 수 있도록 지원하는 플랫폼이다.
사용자는 추가적인 인프라 설정 없이도 노트북을 웹 애플리케이션으로 배포하거나, 팀원들과 협업할 수 있게 해준다.

 

클라우드 기반 실행 및 배포

Marimo Cloud를 통해 로컬에서 작성한 노트북을 클라우드에서 실행하고, 웹 애플리케이션으로 배포할 수 있다. 이를 통해 데이터 분석 결과나 대시보드를 손쉽게 공유할 수 있다.

 

협업

Marimo Cloud는 팀원들과의 협업을 지원한다. 노트북을 공유하고, 공동으로 편집하거나 피드백을 주고받을 수 있다.

 

데이터 통합

Marimo Cloud는 Google Cloud Storage, BigQuery, Google Sheets 등 다양한 데이터 소스와의 통합을 지원다. 이를 통해 다양한 데이터에 접근하고 분석할 수 있다.

 

CLI 도구 지원

Marimo Cloud는 marimo-cloud라는 CLI 도구를 제공하여, 노트북의 로그인, 로그아웃, 배포 등의 작업을 명령줄에서 수행할 수 있다.

 

 

Playground에서 해볼 수 있다!

Playground로 들어가면 사용해볼 수 있다.


 

간단 예시

multiselect를 사용해서 선택된 값을 mo.md를 통해 출력하는 예시 코드를 사용해보자.

multiselect example
마우스를 올려보면 해당 API에 대한 자세한 설명이 나온다.

 

그리고 우측 하단의 저장 버튼(Save file / ctrl+S)를 하면 노트북 파일을 .py로 저장하게 된다.

저장했을 때의 Python 파일의 내용은 아래처럼 저장된다.

import marimo

__generated_with = "0.13.2"
app = marimo.App(width="medium")


@app.cell
def _():
    import marimo as mo
    import pandas as pd
    return (mo,)


@app.cell
def _(mo):
    options = ["A", "B", "C"]
    multiselect = mo.ui.multiselect(options=options)
    return (multiselect,)


@app.cell
def _(mo, multiselect):
    mo.hstack([multiselect])
    return


@app.cell
def _(mo, multiselect):
    mo.md(f"Has value: {multiselect.value}")
    return


if __name__ == "__main__":
    app.run()

 

Marimo의 활용 예시

  • 데이터 분석 및 시각화: 반응형 UI 요소를 활용하여 실시간 데이터 분석 및 시각화를 수행할 수 있다.
  • 모델 실험 및 프로토타이핑: 모델의 하이퍼파라미터를 조정하며 실험을 반복하고, 결과를 즉시 확인할 수 있다.
  • 교육용 콘텐츠 제작: 인터랙티브한 요소를 포함한 교육 자료를 제작하여 학습자의 이해를 도울 수 있다.
  • 내부 도구 개발: 데이터 라벨링 도구, 재무 계산기 등 다양한 내부 도구를 빠르게 개발하고 배포할 수 있다.

 

현재 개발 중이긴 하지만, 사용할 수 있는 API나 기능들이 다양해서 기대가 되고 재밌게 사용해볼 수 있을 것 같다.
다만, Jupyther Notebook과 단축키가 달라서 익숙해지려면 좀 걸릴 것 같다... 셀 생성 B와 셀 삭제 DD가 손에 너무 익은 지라 ...

반응형