Marimo - Python 오픈소스 반응형 노트북
Marimo?
최근에 Medium에서 어떤 아티클을 보다가 마리모라는 이름의 오픈소스 도구를 알게 되었습니다. 마리모(Marimo)란 위키피디아에 따르면 공 모양의 집합체를 만드는 것으로 잘 알려져 있는 담수성 녹조류의 일종이라고 합니다. 당연히 이게 말씀드리려던 오픈소스 툴의 정체는 아닙니다.
마리모는 간단하게 이야기해서 Jupyter Notebook을 대체할만한 오픈소스 반응형 노트북입니다. 예전부터 저는 실제 업무에 Jupyter Notebook의 사용을 꺼린다는 이야기를 많이 했습니다. 여러 이유가 있었는데, 마리모는 그 문제를 충분히 해결해줄만한 기능이 있었습니다. 이 내용에 대해서 짧지만 하나씩 짚어보도록 하겠습니다.
사용해보기
설치
설치는 매우 간단합니다. 사용하고 있는 환경에 맞춰서 pip
나 conda
, 또는 uv
등을 이용해서 설치해주면 됩니다.
1
2
3
pip install marimo
conda install -c conda-forge marimo
uv add marimo
마리모의 장점 중 하나는 많은 의존성을 설치하지 않는다는 점입니다. Jupyter를 설치하게 되면 많은 의존성을 설치함에 따라 부담을 느끼는 경우도 있는데, 마리모는 그런 점에서 매우 자유롭습니다.
시작하기
설치한 환경에서 marimo edit
이라는 명령어를 통해 마리모의 첫 화면으로 접근할 수 있습니다. 실행 후 알 수 있는 재밌는 점은 사용하는 포트가 2718이라는 것입니다.
실행 후 노트북을 생성하면 Jupyter와 다르게 .py
파일이 생성됩니다. 이게 마리모의 가장 큰 특징 중 하나입니다. 마리모를 통해 아래처럼 test.py
를 만들어 작성해보겠습니다.
그러면 실제로는 아래와 같은 Python 파일이 작성됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import marimo
__generated_with = "0.11.10"
app = marimo.App(width="medium")
@app.cell
def _():
import numpy as np
import pandas as pd
return np, pd
@app.cell
def _(pd):
iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
return (iris,)
if __name__ == "__main__":
app.run()
이처럼 마리모는 노트북을 작성할 때 Jupyter처럼 JSON 형태로 작성하지 않고 Python 코드로 작성합니다. 이로 인해 기존 Jupyter가 갖고 있던 여러 문제를 해결할 수 있습니다.
- Git을 통한 버전 관리 가능
- 노트북 코드, 출력, 프로그램 상태의 일관성을 보장
- 테스트 용이
사용 용이성
깔끔한 UI
마리모는 사용자의 편의성을 고려한 부분이 눈에 띄었습니다. 우선 아래는 설치되지 않은 라이브러리를 호출할 때의 화면입니다.
좌상단에는 설치되지 않은 라이브러리를 설치하도록 도와주는 팝업이 등장합니다. 드롭다운 목록을 통해 pip
나 conda
등을 이용해 라이브러리 설치를 돕습니다.
또한 실행한 셀의 에러 내용을 살펴보면 에러에 대한 Traceback이 매우 깔끔한 것을 알 수 있습니다.
인터랙티브 DataFrame
가장 마음에 들었던 부분 중 하나가 바로 인터랙티브한 DataFrame
이었습니다. 노트북 환경의 사용자는 대부분 DataFrame
을 반드시 다룹니다. 마리모는 Pandas와 Polars의 DataFrame
을 다룰 때 풍부한 정보를 인터랙티브한 UI를 통해 전달합니다. 아래는 위에서 iris
데이터를 불러온 후 해당 데이터를 단순히 셀에서 실행하였을 때의 화면입니다.
마리모를 통해 데이터 프레임을 페이지로 이동, 검색, 정렬, 필터링할 수 있어 데이터를 쉽게 살펴볼 수 있습니다.
SQL 사용과 데이터베이스 연결
재밌게도 마리모는 노트북 환경에서 자체적으로 데이터베이스를 연결하고 SQL를 직접 사용할 수 있습니다.
현재는 위와 같이 PostgreSQL, MySQL, SQLite, DuckDB, Snowflake, BigQuery를 지원합니다. 한 번 연결을 생성하면 왼쪽 툴바에서 ‘Data Sources’ 항목에서 데이터베이스 정보를 알 수 있습니다.
자세한 내용은 쉘에서 marimo tutorial sql
명령어를 실행하여 튜토리얼을 진행하며 확인할 수 있습니다.
단축키
Jupyter Notebook의 생산성 수준은 단축키 사용에서 비롯된다고 생각합니다. 워낙 오랜 시간동안 Jupyter의 단축키 스키마에 익숙해져 있어서 그런지, 마리모의 단축키가 손에 익지는 않았습니다. 러닝 커브를 낮춘다는 의미에서 마리모의 기본 단축키가 Jupyter와 동일했으면 좋았겠지만 매우 달랐습니다.
확실하게 알 수 있는 특징은 마치 독립적인 애플리케이션의 단축키를 보는 인상을 준다는 점입니다. macOS 기준으로 Command와 Ctrl을 골자로 단축키가 구성되어 있음을 알 수 있습니다. 그래서 Jupyter에서 단축키를 많이 사용하던 분들은 처음에 꽤 헷갈릴 것 같습니다.
나가며
마리모는 이외에도 시각화 작업에서 슬라이더, 드롭다운 목록 등과 상호작용하며 반응형 노트북으로 활용이 가능합니다. 또한 셀을 실행하면 자동으로 해당 변수를 참조하는 셀을 업데이트하여 수동으로 셀을 재실행하여야 하는 불편을 줄여줍니다.
마리모의 배포는 2023년 8월 경 시작되어 어느덧 2년이 다 되어갑니다. 여전히 많은 기능이 개발 중이지만 업데이트가 자주 된다는 점은 매우 고무적입니다. 또한 마리모를 통해 Jupyter가 갖고 있는 많은 한계를 극복할 수 있을 것이라는 기대가 매우 큽니다.