본문 바로가기

개발

회사 일상 - plotly 서버 연결

반응형

이번에 대쉬보드를 구축하는 PoC 를맡게 되었는데 이게 외부와 통신이 되어야해서 고생좀 했다.

백엔드 1도 모르는 멍청이가 이것저것 찾는데 시간이 오래걸리더라 막상 구현은 얼마 안걸림;;; 일단 전역변수를 사용해서 해결하는 방법이 있더라 그냥 썩혀두기 아까워 코드 조금이나마 남겨둘려고 적는다.

 

 

post.py

import json
import requests

# 변환하려는 데이터
data = {
  'x': [1, 2, 3, 4,3,2,1],
    'y': [10, 11, 12, 13,10,11,12]
}

# Python 객체를 JSON 문자열로 변환
json_data = json.dumps(data)

# 서버 URL
url = 'http://127.0.0.1:8050/postdata'

# 서버에 POST 요청을 보냄
response = requests.post(url, data=json_data)

# 응답 출력
print(data)
print(response.text)
print(response.status_code)

 

 

app.py

import dash
from dash import dcc, html
from dash.dependencies import Input, Output
from flask import Flask, request
import json
import plotly.graph_objects as go

# Flask 서버와 Dash 앱 생성
server = Flask(__name__)
app = dash.Dash(__name__, server=server)

# Dash 앱 레이아웃 설정
app.layout = html.Div([
    dcc.Graph(id='live-graph', animate=True),
    dcc.Interval(
        id='graph-update',
        interval=1*1000,  # in milliseconds
        n_intervals=0
    )
])


@server.route('/postdata', methods=['POST'])
def get_data():
    global global_data
    global_data = json.loads(request.data)  # JSON 데이터 파싱
    return 'Success', 200

@app.callback(Output('live-graph', 'figure'), [Input('graph-update', 'n_intervals')])
def update_graph_scatter(n):
    global global_data
    # 그래프를 업데이트
    print(global_data)
    fig = go.Figure(
        data=[
            go.Scatter(
                x=global_data['x'],   #global_data.get('x', []),
                y=global_data['y'],   #global_data.get('y', []),
                name='Scatter',
                mode='lines+markers'
            )
        ],
        layout=go.Layout(
            title='서버로부터 받아온 데이터 시각화',
        )
    )
   
    return fig


if __name__ == '__main__':
    app.run_server(debug=True)

 

 

이게 데코레이터를 분리 안하고 사용하니까 작동이 됐다 안됐다 그래서 전역변수로 변수를 변경해줬다.

반응형

'개발' 카테고리의 다른 글

javascript 문법 정리  (0) 2025.02.23
Dash보드 만들기  (0) 2024.03.01
운영계, QA계, 개발계 3단계로 나뉘어져야 하는 이유  (0) 2023.12.27