iBetter Books
수정

marimo run으로 앱 실행

Ch 01부터 Ch 03까지 app.py를 완성했습니다. 편집 모드에서 보면 코드 셀과 출력이 번갈아 보입니다. 이제 이 노트북을 앱 모드로 실행합니다. 코드가 사라지고 위젯과 차트만 화면에 남습니다.

marimo run 명령

app.py가 있는 디렉터리에서 다음 명령을 실행합니다.

marimo run app.py

터미널에 이런 출력이 나타납니다.

        _      _  _ __ | |    (_) | '_ \| |__  | | | |_) | '_ \ | | | .__/|_| |_|/ | |_|        |__/Running at http://localhost:2718

기본 포트는 2718입니다. 브라우저에서 http://localhost:2718을 열면 앱이 실행됩니다.

앱 모드 화면

앱 모드의 화면은 편집 모드와 다릅니다.

편집 모드에서는 셀 코드가 왼쪽에 보이고 출력이 오른쪽에 나타납니다. 코드 셀을 클릭해 수정할 수 있습니다.

앱 모드에서는 코드가 완전히 숨겨집니다. 각 셀의 출력만 화면에 표시됩니다. Ch 03에서 만든 app_layout의 출력, 즉 사이드바와 메인 패널이 나란히 배치된 화면이 그대로 나타납니다. 사용자는 왼쪽 위젯을 조작하면 오른쪽 차트가 바뀌는 것을 봅니다. 코드를 클릭하거나 수정할 수 없습니다.

포트와 호스트 옵션

로컬 개발 환경이 아닌 서버나 컨테이너에서 실행할 때는 호스트와 포트를 지정합니다.

# 포트 변경marimo run app.py --port 8080# 외부 접근 허용 (서버, Docker 등)marimo run app.py --host 0.0.0.0 --port 8080

--host 0.0.0.0은 모든 네트워크 인터페이스에서 접근을 허용합니다. 로컬에서 혼자 쓸 때는 기본값인 localhost로 충분합니다. 팀에 공유하거나 서버에 올릴 때는 0.0.0.0으로 열고 방화벽과 포트를 맞춥니다.

편집 모드와 앱 모드 비교

두 모드의 차이를 정리합니다.

항목 편집 모드 (marimo edit) 앱 모드 (marimo run)
코드 표시 보임 숨겨짐
코드 수정 가능 불가
위젯 조작 가능 가능
기본 포트 2718 2718
대상 개발자, 분석가 최종 사용자
URL 경로 http://localhost:2718 http://localhost:2718

포트는 두 모드 모두 기본값이 2718입니다. 실행 명령이 다를 뿐입니다.

실행 중단

Ctrl + C로 서버를 종료합니다.

^CShutting down server...

완성된 app.py 전체 구조 확인

Ch 01부터 Ch 03까지 작성한 셀들을 종합합니다. 편집 모드에서 보면 다음 순서입니다.

셀 1:  import (mo, np, pd, px)셀 2:  df 생성 (고정 시드, 500행)셀 3:  입력 위젯 (category_filter, amount_min_filter, region_filter)셀 4:  filtered_df (SQL — 위젯 세 개에 의존)셀 5:  summary_md (filtered_df에 의존)셀 6:  view_selector 위젯셀 7:  cat_agg SQL + fig_category (filtered_df에 의존)셀 8:  region_agg SQL + fig_region (filtered_df에 의존)셀 9:  weekday_agg SQL + fig_weekday (filtered_df에 의존)셀 10: active_chart (view_selector.value로 분기)셀 11: sidebar (sidebar = mo.vstack([...]))셀 12: main_panel (mo.vstack([...]))셀 13: app_layout (mo.hstack([sidebar, main_panel], widths=[1, 3]))

앱 모드에서는 마지막 표현식이 있는 셀의 출력만 화면에 표시됩니다. 셀 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12는 모두 변수를 정의할 뿐이며 마지막 표현식이 없습니다. 앱 화면에 나타나지 않습니다. 셀 13의 app_layout만 마지막 표현식으로 두어 앱의 전체 화면이 됩니다.

출력이 없는 셀을 앱 화면에 노출하지 않는 것은 의도적입니다. 중간 계산, 데이터 집계, 레이아웃 조각을 변수로 정의만 하고 마지막 표현식으로 두지 않으면 앱 화면에 보이지 않습니다. 앱 모드에서 보여줄 것과 보여주지 않을 것을 이 방식으로 제어합니다.

다음 단계

이 파트에서 만든 앱은 로컬 환경에서 실행하는 수준입니다. 팀에 공유하거나 인터넷에 배포하려면 추가 작업이 필요합니다.

PART 09에서 배포 경로 전체를 다룹니다. Docker 컨테이너로 묶어 서버에 올리는 방법, WASM으로 내보내 브라우저에서 단독 실행하는 방법, GitHub Pages에 정적 파일로 게시하는 방법이 모두 포함됩니다.

정리

  • marimo run app.py로 앱 모드를 실행합니다. 기본 포트는 2718이고, 브라우저에서 http://localhost:2718을 엽니다.
  • 앱 모드에서는 코드가 숨겨지고 셀 출력만 화면에 표시됩니다. 사용자는 위젯을 조작할 수 있지만 코드를 보거나 수정할 수 없습니다.
  • 외부 접근이 필요하면 --host 0.0.0.0 --port 8080 옵션을 추가합니다.
  • 앱 화면에 보이는 것은 마지막 표현식이 있는 셀의 출력입니다. 변수 정의만 하는 셀은 앱 화면에 나타나지 않습니다. 이 방식으로 앱 화면에 무엇을 보여줄지 제어합니다.
  • 배포 경로(Docker, WASM, GitHub Pages)는 PART 09에서 다룹니다.