레이블이 app인 게시물을 표시합니다. 모든 게시물 표시
레이블이 app인 게시물을 표시합니다. 모든 게시물 표시

20250116

PWA Manifest 작성 예제 (HTML 포함)

프로그레시브 웹 앱(PWA)은 웹과 네이티브 앱의 기능적 장점을 결합한 웹 애플리케이션입니다. PWA는 특정 기술과 표준 패턴을 사용하여 개발되며, 사용자에게 네이티브 앱과 유사한 경험을 제공합니다. 예를 들어, PWA는 네이티브 앱처럼 설치할 수 있고 오프라인에서도 작동하며, 푸시 알림과 같은 기능을 지원합니다.

웹 앱은 링크를 통해 쉽게 공유할 수 있고 접근성이 뛰어난 반면, 네이티브 앱은 운영체제와 더 잘 통합되어 부드러운 사용자 경험을 제공합니다. PWA는 이 두 가지 장점을 모두 활용하여 더 나은 사용자 경험을 제공합니다.

PWA의 주요 특징

PWA는 다음과 같은 특징을 가지고 있습니다:

  • 발견 가능: 검색 엔진을 통해 쉽게 찾을 수 있습니다.
  • 설치 가능: 네이티브 앱처럼 홈 화면에 추가할 수 있습니다.
  • 오프라인 지원: 네트워크 연결이 없어도 작동합니다(Service Worker 기술 활용).
  • 반응형 디자인: 모든 기기와 화면 크기에 최적화됩니다.
  • 푸시 알림: 사용자 재참여를 유도할 수 있습니다.
  • 보안성: HTTPS를 통해 안전하게 제공됩니다.

PWA 구현 방법

PWA를 구현하려면 다음 세 가지 핵심 요소가 필요합니다:

1. 웹 앱 매니페스트 파일(manifest.json)

매니페스트 파일은 PWA의 메타정보를 담고 있으며, 앱 이름, 아이콘, 시작 URL 등을 정의합니다.

{
  "name": "My PWA",
  "short_name": "PWA",
  "start_url": "/index.html",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#317EFB",
  "icons": [
    {
      "src": "icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ]
}

2. 서비스 워커(Service Worker)

서비스 워커는 백그라운드에서 실행되며, 캐싱, 오프라인 지원, 푸시 알림 등을 처리합니다.

self.addEventListener('install', event => {
  event.waitUntil(
    caches.open('pwa-cache').then(cache => {
      return cache.addAll(['/index.html', '/style.css', '/app.js']);
    })
  );
});

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request).then(response => response || fetch(event.request))
  );
});

3. HTTPS

PWA는 보안을 위해 HTTPS 프로토콜에서만 동작합니다.

PWA의 성공 사례

PWA 도입 후 성공적인 결과를 얻은 사례가 많습니다:

  • Flipkart Lite: 인도의 전자상거래 플랫폼으로 PWA 도입 후 전환율이 70% 증가했습니다.
  • Twitter Lite: 데이터 사용량을 줄이고 로딩 속도를 개선하여 사용자 참여율이 크게 증가했습니다(세션당 페이지 수 +65%).
  • Pinterest: 로딩 속도를 단축하고 모바일 사용자 수를 두 배로 늘렸습니다.
  • Starbucks: 오프라인에서도 메뉴 탐색 및 주문이 가능하며, 모바일 주문 비율이 증가했습니다.

PWA 도입의 장점

PWA는 비교적 적은 노력으로도 큰 이점을 제공합니다:

  • 서비스 워커 캐싱: 빠른 로딩 시간과 데이터 절약.
  • 자동 업데이트: 변경된 콘텐츠만 업데이트 가능.
  • 네이티브 앱과 유사한 경험 제공: 홈 화면 아이콘 추가 및 전체 화면 실행.
  • 푸시 알림을 통한 재참여 유도: 전환율과 사용자 참여율 향상.

PWA 구현 예제

아래는 간단한 PWA 구현 예제입니다:

HTML 파일 (index.html)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>My First PWA</title>
  <link rel="manifest" href="/manifest.json">
</head>
<body>
  <h1>Welcome to My PWA</h1>
  <script>
    if ('serviceWorker' in navigator) {
      navigator.serviceWorker.register('/service-worker.js')
        .then(() => console.log('Service Worker registered'))
        .catch(err => console.error('Service Worker registration failed', err));
    }
  </script>
</body>
</html>

20250101

웹앱 Streamlit + Python

데이터 분석과 AI 프로젝트를 진행하며, 종종 빠르게 결과물을 시각화하거나 프로토타입을 만들어야 할 때가 많습니다. 이때 제가 자주 사용하는 도구가 바로 Streamlit입니다. Streamlit은 파이썬 코드 몇 줄로 손쉽게 웹 애플리케이션을 만들 수 있는 프레임워크로, 특히 데이터 시각화와 AI 모델 배포에 최적화되어 있습니다.

이번 글에서는 Streamlit의 기본 사용법부터 실전 예제까지 다뤄보겠습니다.

1. Streamlit이란?

Streamlit은 파이썬 기반의 오픈소스 웹 프레임워크로, 다음과 같은 특징을 가지고 있습니다:
  • 간단한 코드: HTML, CSS, JavaScript 없이도 파이썬 코드만으로 웹앱 제작 가능.
  • 빠른 개발: 데이터 분석 결과나 모델을 바로 시각화하여 공유 가능.
  • 다양한 위젯 지원: 슬라이더, 버튼, 체크박스 등 인터랙티브 UI 구성 가능.
  • 손쉬운 배포: Streamlit Cloud를 통해 클릭 몇 번으로 앱을 배포할 수 있음.

2. 설치 및 기본 실행

Streamlit 설치:
bash
pip install streamlit
설치 후, Streamlit의 기본 실행:
bash
streamlit hello
브라우저가 열리며 Streamlit의 기능을 체험할 수 있는 페이지가 표시됩니다.

3. 첫 번째 앱 만들기

코드 작성

아래와 같은 간단한 코드를 작성해 app.py라는 파일로 저장합니다:
python
import streamlit as st # 제목 출력 st.title("Hello, Streamlit!") st.write("이것은 Streamlit으로 만든 첫 번째 웹앱입니다.")

앱 실행

터미널에서 다음 명령어를 입력합니다:
bash
streamlit run app.py
브라우저에서 http://localhost:8501로 접속하면 앱이 실행된 것을 확인할 수 있습니다.

4. 실전 예제: 데이터 시각화 대시보드

이제 실제 데이터를 활용한 대시보드를 만들어 보겠습니다.

코드 작성

아래 코드를 dashboard.py라는 파일로 저장하세요:
python
import streamlit as st import pandas as pd import numpy as np # 제목과 설명 추가 st.title("데이터 시각화 대시보드") st.write("랜덤 데이터를 생성하여 다양한 차트를 그려봅니다.") # 랜덤 데이터 생성 data = pd.DataFrame( np.random.randn(50, 3), columns=["A", "B", "C"] ) # 데이터프레임 출력 st.subheader("데이터프레임") st.dataframe(data) # 라인 차트 출력 st.subheader("라인 차트") st.line_chart(data) # 바 차트 출력 st.subheader("바 차트") st.bar_chart(data) # 슬라이더로 데이터 필터링 st.subheader("슬라이더로 데이터 필터링") value = st.slider("표시할 데이터 개수", min_value=1, max_value=50, value=10) filtered_data = data.head(value) st.write(f"선택된 {value}개의 데이터:") st.dataframe(filtered_data)

결과 확인

위 코드를 실행하면 다음과 같은 기능을 가진 대시보드가 생성됩니다:
  1. 랜덤 데이터를 테이블 형태로 표시.
  2. 데이터를 라인 차트와 바 차트로 시각화.
  3. 슬라이더를 이용해 표시할 데이터 개수를 동적으로 조정.

5. 주요 기능 소개

Streamlit은 다양한 기능을 제공하며, 이를 활용하면 더욱 풍부한 웹앱을 제작할 수 있습니다.

(1) 텍스트 출력

  • st.title()st.header()st.subheader(): 제목 및 부제목 출력.
  • st.write(): 텍스트, 데이터프레임 등 다양한 형태의 데이터를 출력.
python
st.title("Streamlit 기능 소개") st.write("이곳에 텍스트나 데이터를 출력할 수 있습니다.")

(2) 위젯 (사용자 입력)

  • 버튼: if st.button('클릭')
  • 슬라이더: value = st.slider('슬라이더', 0, 100)
  • 체크박스: if st.checkbox('체크')
  • 선택 박스: option = st.selectbox('옵션 선택', ['A', 'B', 'C'])
python
if st.checkbox("데이터 보기"): st.write(data)

(3) 차트

  • 라인 차트: st.line_chart(data)
  • 바 차트: st.bar_chart(data)
  • 맵: st.map(data)
python
import numpy as np map_data = pd.DataFrame( np.random.randn(1000, 2) / [50, 50] + [37.76, -122.4], columns=["lat", "lon"] ) st.map(map_data)

6. 배포하기

Streamlit 앱은 로컬에서 실행하는 것뿐 아니라 클라우드에 배포하여 다른 사람들과 공유할 수도 있습니다.

GitHub와 연동하여 배포

  1. 코드를 GitHub 저장소에 업로드합니다.
  2. Streamlit Cloud에 접속해 GitHub 저장소를 연결합니다.
  3. 배포하고자 하는 브랜치와 파일 경로를 지정한 후 "Deploy" 버튼을 클릭합니다.
배포가 완료되면 고유 URL이 생성되어 누구나 접근할 수 있습니다.

7. 활용 사례

Streamlit은 다음과 같은 프로젝트에 적합합니다:
  1. 데이터 분석 대시보드: 분석 결과를 팀원들과 공유.
  2. AI 모델 데모: 머신러닝 모델의 입력값과 결과를 인터랙티브하게 보여줌.
  3. 프로토타입 제작: 복잡한 백엔드 없이 빠르게 웹앱 제작.

결론

Streamlit은 파이썬 개발자에게 웹 애플리케이션 제작의 문턱을 낮춰주는 강력한 도구입니다. 특히 데이터 분석이나 AI 모델링 결과를 빠르게 공유해야 하는 경우 유용하며, 간단한 인터페이스 덕분에 누구나 쉽게 사용할 수 있습니다.