개인프로젝트

Python plotly dash 로 admin 페이지 개발

wefree 2023. 9. 1. 14:06

회사에서 주로 데이터 엔니지니어링, 백엔드 등의 업무를 하지만, 자주 웹개발 요청을 받는다. 전문 웹 개발을 하기 보다는 백엔드 개발자로서 쉽고, 빠르게 개발하는 것을 목표로 한다.

방향

  • plotly dash 로 개발해 javascripts 를 최소한으로 사용한다.
  • admin 화면을 구성하고, URL 주소로 컨텐츠를 쉽게 공유할 수 있도록 한다.
  • 내 tistory 블로그 글을 분석하는 차트도 넣어본다.
  • https://fly.io/ 에 배포해 누구나 살펴볼 수 있도록 한다.

 

dash 로 개발

 

Secrets 관리

tistory OAuth API 사용을 위해서는 secret key 를 관리해야 한다. 이는 소스코드 등에 공개되어서는 안된다. fly.io 에 배포시에는 fly.io 에서 제공해 주는 secrets 기능을 사용했다. secret key 를 환경변수로 입력받기 위해 python dotenv 도 사용해 봤다.
 
 

fly.io 에 배포

참고 자료

정리

  fly auth login

  # 배포할 소스 디렉토리에서
  fly launch
  fly deploy
  
  # 모니터링
  fly status
  fly apps list
  fly apps restart
  
  # console terminal
  flyctl ssh console
  
  # secrets
  fly -a my-app secrets set DATABASE_URL=postgres://example.com/mydb

 

wefree tistory 블로그 통계

tistory 에서는 기본적인 통계 기능(조회수 등)을 제공하지만, 시간 단위(예: 월단위) 로 내가 어느 정도로 열심히 글을 작성했는지는 보여주지는 않는다. tistory open api 를 사용하면 작성된 블로그 글 목록을 가져올 수 있으니, 내 블로그(https://wefree.tistory.com/) 의 월별 작성된 글의 수를 차트로 보여주도록 한다.
 

App Secrets

관리페이지: https://www.tistory.com/guide/api/manage/list

OAuth 2.0

tistory open api 는 OAuth 2.0 으로 인증한다. 서버에서 주기적으로 알아서 (예: 1회/일) 인증후 데이터를 갱신하도록 하는것이 가장 좋을 테지만.. 인증 후 아래 화면처럼 access 를 허용할지를 묻는 화면이 떠서 UI 없이 개발하는데는 노력이 많이 필요할 것 같다. 

여기서는 관리자가 UI 에서 버튼을 클릭해 tistory 에 로그인 후 데이터를 가져오도록 개발한다.
 

블로그 글 분석 관련 주요 API

  • 전체 Blog Post 개수를 위한 API 
  • Blog Post 단위 정보 수집을 위한 API 
    • 한번에 10개 목록을 가져 올 수 있다. (page 파라미터를 지정해 호출)
    • 전체 목록을 가져오기 위해서는 전체 글 개수를 확인 후 page param 을 변경해 가면서 호출
  • 카테고리 API 
    • 상위 / 하위 category 로 구분되지만, 여기 통계에서는 상위 category 기준으로 처리한다.

 

Javascript 라이브러리를 Dash 에서 사용하기

 

후기

장점

  • python 의 간결함과 이미 갖춰진 web components 로 순식간에 개발할 수 있다. (nicegui 를 이용하면 더 간결하게 작성할 수 있어 보이는데, 이정도만 되어도 훌륭하다.)
  • 멋진 charts, table 을 단 몇줄 만에 구현할 수 있다.
  • python 의 pandas dataframe 을 바로 사용할 수 있어 분석 App 만들기가 너무 쉽다. 

단점