1 왜 Shiny 웹앱 팩키지1

다음 일화를 통해 개발자(R 엔지니어)와 운영부서에서 흔히 생길 수 있는 사례를 통해 Shiny 웹앱을 팩키지로 개발할 경우 장점에 대해서 파악할 수 있다.

IT: HEY, I TRIED TO ‘SOURCE(“APP.R”)’ BUT I’VE GOT AN ERROR.

R-DEV: WHAT’S THE ERROR?

IT: IT SAYS “COULD NOT FIND PACKAGE ‘SHINY’.”

R-DEV: AH YES, YOU NEED TO INSTALL {SHINY}. TRY TO RUN ‘INSTALL.PACKAGES(“SHINY”).’

IT: OK NICE. WHAT ELSE?

R-DEV: LET ME THINK, TRY ALSO ‘INSTALL.PACKAGES(“DT”)’… GOOD? NOW TRY ‘INSTALL.PACKAGES(“GGPLOT2”),’ AND …

[…]

IT: OK, NOW I SOURCE THE ‘APP.R,’ RIGHT?

R-DEV: SURE!

IT: OK SO IT SAYS ‘COULD NOT FIND FUNCTION RUNAPP()’

R-DEV: AH, YOU’VE GOT TO DO LIBRARY(SHINY) AT THE BEGINNING OF YOUR SCRIPT. AND LIBRARY(PURRR), AND LIBRARY(JSONLITE)*.

1.1 메타 데이터

한걸음 더 들어가 실제로 Shiny 웹앱 개발자는 본인이 개발했기 때문에 잘 알지만 타인은 Shiny 웹앱에 대해 잘 모른다. 이런 정보를 메타데이터(Meta Data)에 담아 정리하게 되면 큰 도움이 된다. 메타 데이터에는 다음이 포함된다.

  • Shiny 웹앱 이름
  • 버전
  • 제작자 (예: 버그가 생겼을 경우 도움을 요청할 수 있는 개발자)
  • Shiny 웹앱이 하는 역할과 주요 기능
  • 사용법
  • 의존성: Shiny 웹앱과 연결된 팩키지

1.2 테스트

Shiny 웹앱 팩키지로 들고 있는 경우 테스트가 용이하다.

1.3 문서

마지막으로 문서를 팩키지에 함께 담을 수 있어 편리하다.

  • README: 팩키지 개요
  • 소품(Vignettes): 팩키지 사용법을 설명함.
  • pkgdown: 외부 공개된 팩키지 웹사이트

1.4 배포

CRAN, GitHub, .gz.tar 형태 Shiny 웹앱을 설치하고 이를 팩키지로 불러 실행시킨다.

devtools::install()   
library(shinyAppName) 
run_app()

혹은 RSTUDIO CONNECT & SHINY SERVER를 통해 배포한다.

pkgload::load_all()
shiny::shinyApp(ui = app_ui(), server = app_server)

가장 일반적인 방식은 도커 컨테이너를 활용해서 배포하는 것이다.

$ CMD R -e 'options("shiny.port"=80, shiny.host="0.0.0.0"); shinyAppName::run_app()'
 

데이터 과학자 이광춘 저작

kwangchun.lee.7@gmail.com