다음 일화를 통해 개발자(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)*.
한걸음 더 들어가 실제로 Shiny 웹앱 개발자는 본인이 개발했기 때문에 잘 알지만 타인은 Shiny 웹앱에 대해 잘 모른다. 이런 정보를 메타데이터(Meta Data)에 담아 정리하게 되면 큰 도움이 된다. 메타 데이터에는 다음이 포함된다.
Shiny 웹앱 팩키지로 들고 있는 경우 테스트가 용이하다.
마지막으로 문서를 팩키지에 함께 담을 수 있어 편리하다.
README
: 팩키지 개요pkgdown
: 외부 공개된 팩키지 웹사이트CRAN
, GitHub
, .gz.tar
형태 Shiny 웹앱을 설치하고 이를 팩키지로 불러 실행시킨다.
::install()
devtoolslibrary(shinyAppName)
run_app()
혹은 RSTUDIO CONNECT & SHINY SERVER
를 통해 배포한다.
::load_all()
pkgload::shinyApp(ui = app_ui(), server = app_server) shiny
가장 일반적인 방식은 도커 컨테이너를 활용해서 배포하는 것이다.
$ CMD R -e 'options("shiny.port"=80, shiny.host="0.0.0.0"); shinyAppName::run_app()'
데이터 과학자 이광춘 저작
kwangchun.lee.7@gmail.com