iBetter Books
수정

Dash란 무엇인가

Plotly를 만든 회사 이름도 Plotly Technologies입니다. 그 회사가 만든 웹 프레임워크가 Dash입니다. 이름만 들으면 Plotly와 별개인 것 같지만, 사실상 한 몸입니다.

Dash = Plotly + Flask + React

Plotly 차트를 화면에 보여주는 것은 React가 하고, HTTP 요청을 처리하는 것은 Flask가 합니다. 개발자는 파이썬만 씁니다. HTML도, 자바스크립트도 직접 쓸 필요가 없습니다.

pip install dash

pip install dash

Dash를 설치하면 plotly도 함께 설치됩니다. 이미 Plotly가 설치되어 있어도 버전 충돌 없이 진행됩니다.

pip show dash# Name: dash# Version: 3.x.x

최소 코드로 첫 Dash 앱 실행하기

# 새 파일: chapter04_05_dash_hello.pyfrom dash import Dash, htmlapp = Dash(__name__)app.layout = html.Div([    html.H1("첫 Dash 앱"),    html.P("Hello, Dash!")])if __name__ == "__main__":    app.run(debug=True)

파일을 저장하고 터미널에서 실행합니다.

python chapter04_05_dash_hello.py

출력 결과는 이렇습니다.

Dash is running on http://127.0.0.1:8050/

 * Serving Flask app 'chapter04_05_dash_hello'
 * Debug mode: on

브라우저에서 http://127.0.0.1:8050으로 접속하면 "첫 Dash 앱"이라는 제목과 "Hello, Dash!" 문장이 보입니다.

debug=True를 주면 코드를 수정하고 저장할 때 브라우저가 자동으로 갱신됩니다. 개발할 때는 항상 켜두는 것이 편합니다.

코드를 하나씩 뜯어봅니다.

  • Dash(__name__): Dash 앱 인스턴스를 만듭니다. __name__은 파이썬 파일 이름을 자동으로 전달합니다.
  • app.layout: 화면에 보여줄 컴포넌트를 정의합니다. HTML 구조와 같습니다.
  • html.Div, html.H1, html.P: Dash의 HTML 컴포넌트입니다. HTML 태그와 1:1 대응됩니다.
  • app.run(debug=True): 개발 서버를 시작합니다.

Dash vs Streamlit 비교

두 프레임워크 모두 파이썬으로 웹 앱을 만드는 도구입니다. 어떤 걸 쓸지 고민된다면 아래 표를 참고하세요.

항목 Dash Streamlit
실행 방식 콜백 기반 (이벤트 → 함수 → UI) 스크립트 기반 (위에서 아래로 재실행)
Plotly 연동 네이티브 (완전 지원) 지원하지만 일부 기능 제한
제어 세밀도 높음 (컴포넌트 단위 제어) 낮음 (전체 스크립트 재실행)
학습 곡선 가파름 (콜백 개념 필요) 완만함 (함수처럼 작성)
적합한 용도 복잡한 대시보드, 프로덕션 빠른 프로토타입, 데이터 탐색

Streamlit은 빠릅니다. 데이터를 탐색하거나 동료에게 분석 결과를 빠르게 보여줄 때 좋습니다. Dash는 세밀합니다. 어떤 버튼을 눌렀을 때 어떤 컴포넌트만 바뀌는지 정확하게 제어할 수 있습니다.

캡스톤 발표처럼 완성도 있는 대시보드가 필요할 때는 Dash가 더 적합합니다.

차트 포함하기

Dash 앱에 Plotly 차트를 넣는 것은 한 줄이면 됩니다. dcc.Graph가 Plotly Figure를 받습니다.

# 수정: chapter04_05_dash_hello.pyfrom dash import Dash, html, dccimport plotly.express as pxapp = Dash(__name__)df = px.data.iris()fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",                 title="붓꽃 데이터 산점도")app.layout = html.Div([    html.H1("첫 Dash 앱"),    html.P("Plotly 차트가 포함된 Dash 앱입니다."),    dcc.Graph(figure=fig)   # Plotly Figure를 그대로 넣는다])if __name__ == "__main__":    app.run(debug=True)

dcc.Graph(figure=fig)에서 figpx.scatter()가 반환한 Plotly Figure 객체입니다. 이전 장까지 배운 모든 차트를 그대로 넣을 수 있습니다.

브라우저를 새로 고침하면 산점도가 나타납니다. 차트 위에 마우스를 올리면 툴팁이 뜨고, 범례를 클릭하면 품종별로 숨기고 보이는 기능도 그대로 작동합니다. Plotly의 인터랙티브 기능이 Dash 안에서도 모두 살아있습니다.