2025년 트렌디한 인터랙티브 앱 만들기: 최신 Shiny app templates 활용
안녕하세요, R을 애용하시는 여러분! 오늘은 최신 트렌드를 반영한 멋진 Shiny 앱을 만드는 방법에 대해 알아보겠습니다. Shiny app templates를 활용하면 현대적이고 세련된 UI를 쉽게 구현할 수 있답니다. 2025년을 막 시작한 지금, 어떤 디자인 요소들이 주목받고 있는지 함께 살펴볼까요?
Shiny 앱 최신 디자인 트렌드
2025년의 UX/UI 트렌드를 보면, 아날로그적 요소의 귀환과 함께 AI 기반 개인화, AR 통합 등이 주목받고 있습니다. 이러한 트렌드를 Shiny 앱에 어떻게 적용할 수 있을지 알아보겠습니다.

1. 벤토 박스 디자인
shinydashboard 패키지를 사용하여 정보를 깔끔하고 조직적으로 표현하는 레이아웃을 구현할 수 있습니다.
2. AI 기반 개인화
reticulate 패키지를 활용해 Python의 머신러닝 라이브러리를 Shiny와 통합하여 개인화된 대시보드나 추천 시스템을 구현할 수 있습니다.
3. 인터랙티브 3D 객체
plotly 또는 rgl 패키지를 사용하여 사용자가 3D 그래프를 조작할 수 있는 인터랙티브 시각화를 만들 수 있습니다.
4. 모던 스큐어모피즘
shinyWidgets 패키지로 UI 요소에 미묘한 그림자와 질감을 추가하여 깊이감을 줄 수 있습니다.
5. bslib 활용
bslib 패키지를 사용하여 최신 Bootstrap 기반의 현대적인 UI를 구현할 수 있습니다
이러한 트렌드를 적절히 조합하여 Shiny 앱에 적용하면, 2025년의 최신 디자인 감각을 반영한 현대적이고 사용자 친화적인 앱을 만들 수 있습니다. 이 중에서 오늘은 마지막 항목에 대해서 알아보겠습니다.
bslib: 현대적인 UI의 핵심
bslib 패키지는 최신 Shiny 앱 개발에 있어 필수적인 도구입니다. Bootstrap 5를 기반으로 한 이 패키지를 사용하면 CSS 지식 없이도 세련된 UI를 만들 수 있습니다.
library(shiny)
library(bslib)
ui <- page_fluid(
theme = bs_theme(version = 5, bootswatch = "minty"),
h1("My Trendy Shiny App"),
card(
card_header("Welcome!"),
card_body("This is a modern Shiny app using bslib.")
)
)
server <- function(input, output) {}
shinyApp(ui, server)이 코드는 Bootstrap 5의 ‘Minty’ 테마를 사용하여 아래와 같이 깔끔하고 현대적인 디자인의 앱을 만듭니다.

반응형 레이아웃과 카드 디자인
최신 트렌드는 다양한 디바이스에 대응하는 반응형 디자인을 강조합니다. bslib의 layout_column_wrap()을 사용하여 이를 구현할 수 있습니다.
ui <- page_fluid(
theme = bs_theme(version = 5, bootswatch = "pulse"),
layout_column_wrap(
width = 1/2,
card(
card_header("Analytics"),
card_body("Your analytics content here")
),
card(
card_header("User Data"),
card_body("User information display")
)
)
)위 코드 실행 결과로 웹화면 사이즈에 따라 자동적으로 디자인이 반응을 하는 기능이 동작하게 됩니다.

인터랙티브 요소 추가
사용자 경험을 향상시키기 위해 인터랙티브한 요소를 추가해봅시다. plotly를 사용하면 동적인 그래프를 쉽게 만들 수 있습니다.
library(shiny)
library(plotly)
ui <- fluidPage(
titlePanel("Interactive mtcars Scatter Plot"),
sidebarLayout(
sidebarPanel(
helpText("This app shows the relationship between weight (wt) and fuel efficiency (mpg) in the mtcars dataset.")
),
mainPanel(
plotlyOutput("interactive_plot")
)
)
)
server <- function(input, output) {
output$interactive_plot <- renderPlotly({
plot_ly(data = mtcars, x = ~wt, y = ~mpg, type = 'scatter', mode = 'markers') %>%
layout(title = 'mtcars: Weight vs Fuel Efficiency',
xaxis = list(title = 'Weight (1000 lbs)'),
yaxis = list(title = 'Fuel Efficiency (mpg)'))
})
}
shinyApp(ui = ui, server = server)
커스텀 테마 적용
bslib을 사용하면 앱의 전체적인 look and feel을 쉽게 커스터마이즈할 수 있습니다. 다음은 bslib을 활용한 더 상세한 테마 적용 예시입니다.

library(shiny)
library(bslib)
library(ggplot2)
# 커스텀 테마 정의
my_theme <- bs_theme(
bg = "#FAFAFA",
fg = "#333333",
primary = "#007BFF",
secondary = "#6C757D",
base_font = font_google("Roboto"),
heading_font = font_google("Montserrat"),
font_scale = 1.1
)
# UI 정의
ui <- page_navbar(
theme = my_theme,
title = "Old Faithful Geyser Data",
nav_panel("Home",
sidebarLayout(
sidebarPanel(
title = "Controls",
sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30)
),
mainPanel(
card(
card_header("Geyser Eruption Histogram"),
plotOutput("geyserPlot"),
verbatimTextOutput("debugText")
)
)
)
),
nav_panel("About",
"This app shows a histogram of the Old Faithful geyser eruption data."
)
)
# 서버 로직
server <- function(input, output, session) {
output$geyserPlot <- renderPlot({
req(input$bins) # 입력값이 준비되었는지 확인
x <- faithful$waiting
bins <- seq(min(x), max(x), length.out = input$bins + 1)
# 디버깅 정보 출력
output$debugText <- renderPrint({
cat("Bins:", length(bins) - 1, "\n")
cat("Range:", range(x), "\n")
cat("Data points:", length(x), "\n")
})
ggplot(faithful, aes(x = waiting)) +
geom_histogram(breaks = bins, fill = "skyblue", color = "white") +
theme_minimal() +
labs(title = "Old Faithful Geyser Eruptions",
x = "Waiting time to next eruption (mins)",
y = "Frequency")
})
}
# 앱 실행
shinyApp(ui = ui, server = server)이 Shiny 앱 코드에서:
bs_theme()함수를 사용하여 배경색, 텍스트 색상, primary/secondary 색상 등 다양한 테마 요소를 커스텀하여 정의했습니다. 또한 Google Fonts를 이용해 기본 폰트와 제목 폰트를 각각 다르게 설정했습니다.page_navbar()함수로 앱의 메인 레이아웃을 구성했습니다. 이 함수를 사용하면 상단에 네비게이션 바를 쉽게 만들 수 있습니다.- 네비게이션 바 내부에서
layout_sidebar()함수로 사이드바 레이아웃을 정의했습니다. 사이드바에는 슬라이더 컨트롤을 배치했고, 메인 영역에는card()함수로 히스토그램 플롯과 디버그 텍스트를 담는 카드를 만들었습니다. - 서버 로직에서는
renderPlot()함수로 히스토그램 플롯을 렌더링하고,renderPrint()함수로 디버그 정보를 출력하도록 구현했습니다.
전반적으로 이 코드는 bslib 라이브러리를 이용해 Bootstrap 4 스타일의 반응형 Shiny 앱을 만드는 방법을 잘 보여주고 있습니다. 커스텀 테마 설정, 레이아웃 구성, 데이터 시각화 등 Shiny 앱 개발의 핵심 요소들이 포함되어 있습니다.
Shiny app templates 포스트를 마무리하며
Shiny app templates를 활용하면 최신 트렌드를 반영한 멋진 앱을 쉽게 만들 수 있습니다. bslib, plotly 등의 패키지를 조합하여 사용하면 더욱 풍성한 UI와 UX를 제공할 수 있죠. 2025년을 시작하는 지금, 아날로그적 요소와 디지털 혁신의 조화를 고민해보는 것도 좋겠습니다.
Shiny의 세계는 끊임없이 진화하고 있습니다. 이 가이드를 통해 여러분의 다음 Shiny 프로젝트가 한층 더 세련되고 사용자 친화적으로 발전하기를 바랍니다!
참고로, 요즘 많이 사용하시는 파이썬에서도 R과 마찬가지로 plotly를 이용한 반응형 웹을 구현할 수 있습니다. 인터랙티브 그래프: 파이썬 Plotly로 데이터 시각화 쉽게 배우기 포스트를 통해서 그 내용을 확인해보세요!
#용어 해설
- bslib: Bootstrap을 R에서 쉽게 사용할 수 있게 해주는 패키지
- 반응형 디자인: 다양한 화면 크기에 자동으로 대응하는 웹 디자인 방식
- plotly: 인터랙티브한 그래프를 만들 수 있는 JavaScript 라이브러리의 R 버전






