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>

Service Worker를 사용해 PWA를 오프라인에서 동작하게 만들기

Service Worker란?

Service Worker는 브라우저와 네트워크 사이에서 동작하는 가상 프록시로, 웹 애플리케이션의 자원을 캐싱하고 네트워크 상태에 따라 적절한 응답을 제공합니다. 이를 통해 사용자는 오프라인 상태에서도 애플리케이션을 사용할 수 있습니다.

Service Worker는 독립된 스레드에서 실행되며, DOM에 직접 접근하지 않습니다. 비차단형 API를 사용하며, Promise 기반으로 설계되어 효율적인 작업 처리가 가능합니다.

Service Worker 등록하기

Service Worker를 사용하려면 먼저 브라우저에 등록해야 합니다. 아래는 간단한 등록 코드입니다:


if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw.js')
    .then(registration => console.log('Service Worker 등록 성공:', registration))
    .catch(error => console.log('Service Worker 등록 실패:', error));
}
                

위 코드는 브라우저가 Service Worker API를 지원하는지 확인한 후, Service Worker 파일(sw.js)을 등록합니다.

Service Worker의 수명 주기

Service Worker는 설치(install), 활성화(activate), 그리고 fetch 이벤트를 포함한 여러 단계로 구성된 수명 주기를 가집니다.

1. 설치 (Install)

설치 단계에서는 캐시를 초기화하고 필요한 자원을 캐싱합니다:


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

2. 활성화 (Activate)

활성화 단계에서는 오래된 캐시를 정리할 수 있습니다:


self.addEventListener('activate', event => {
  event.waitUntil(
    caches.keys().then(cacheNames => {
      return Promise.all(
        cacheNames.map(cacheName => {
          if (cacheName !== 'app-cache-v1') {
            return caches.delete(cacheName);
          }
        })
      );
    })
  );
});
                

3. 요청 가로채기 (Fetch)

fetch 이벤트를 통해 네트워크 요청을 가로채고 캐시된 자원을 반환하거나 네트워크에서 데이터를 가져옵니다:


self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request).then(response => {
      return response || fetch(event.request).then(networkResponse => {
        return caches.open('app-cache-v1').then(cache => {
          cache.put(event.request, networkResponse.clone());
          return networkResponse;
        });
      });
    })
  );
});
                

오프라인 우선 전략

"오프라인 우선" 패턴은 캐시된 자원이 있으면 이를 먼저 반환하고, 없을 경우 네트워크에서 데이터를 가져와 캐시에 저장하는 방식입니다. 이를 통해 사용자는 인터넷 연결이 없어도 애플리케이션을 사용할 수 있습니다.

업데이트 및 캐시 관리

새로운 버전의 애플리케이션이 배포되었을 때, Service Worker를 업데이트하려면 캐시 이름에 버전 번호를 추가하여 이전 캐시와 구분해야 합니다. 또한, activate 이벤트를 활용해 오래된 캐시를 삭제할 수 있습니다.

결론

이 문서에서는 Service Worker를 사용해 PWA가 오프라인에서도 동작하도록 만드는 방법을 살펴보았습니다. Service Worker는 단순히 오프라인 기능뿐만 아니라 푸시 알림, 백그라운드 동기화 등 다양한 기능을 제공합니다. 이를 통해 사용자 경험을 크게 향상시킬 수 있습니다.

20250115

Streamlit : 이미지 분류 및 데이터 시각화 앱 만들기 (Mac 환경)

1. 개발 환경 설정

Python 및 Streamlit 설치

  1. Python 설치: Python 3.8 이상이 필요합니다. Mac에서 Python이 설치되어 있지 않다면, Python 공식 웹사이트에서 다운로드
  2. 가상 환경 생성:
    python3 -m venv streamlit_env
    source streamlit_env/bin/activate
  3. 필요한 라이브러리 설치:
    pip install streamlit pandas numpy matplotlib tensorflow_hub pillow

Streamlit 설치 확인

Streamlit이 올바르게 설치되었는지 확인하려면 다음 명령을 실행

streamlit hello

브라우저에 Streamlit 데모 앱이 열리면 성공적으로 설치된 것입니다.

2. Streamlit 앱 코드 작성

아래 코드는 이미지 분류와 데이터 시각화를 포함한 Streamlit 애플리케이션입니다.

import streamlit as st
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tensorflow_hub as hub
from PIL import Image

# 앱 제목 및 설명
st.title("이미지 분류 및 데이터 시각화 앱")
st.write("이 앱은 업로드된 이미지를 분류하고 데이터를 시각화합니다.")

# 이미지 업로드 및 분류
uploaded_file = st.file_uploader("이미지를 업로드하세요", type=["jpg", "png", "jpeg"])
if uploaded_file is not None:
    image = Image.open(uploaded_file)
    st.image(image, caption="업로드된 이미지", use_column_width=True)
    st.write("이미지를 분류 중입니다...")

    # TensorFlow Hub에서 사전 학습된 모델 로드
    model = hub.load("https://tfhub.dev/google/imagenet/mobilenet_v2_100_224/classification/5")
    image = image.resize((224, 224))
    image_array = np.array(image) / 255.0  # 정규화
    image_array = np.expand_dims(image_array, axis=0)

    predictions = model(image_array)
    st.write("분류 결과:", predictions.numpy())

# 데이터 시각화
st.header("데이터 시각화")
data = pd.DataFrame(
    np.random.randn(100, 3),
    columns=['특성 A', '특성 B', '특성 C']
)
st.line_chart(data)

# 사이드바 예제
st.sidebar.header("사이드바 설정")
range_slider = st.sidebar.slider("값 범위 선택", 0, 100, (25, 75))
st.sidebar.write(f"선택된 범위: {range_slider}")

3. 코드 저장

위 코드를 image_classification_app.py라는 이름으로 저장하세요:

nano image_classification_app.py

4. 앱 실행

  1. 디렉토리 이동:
    cd /path/to/your/directory
  2. Streamlit 앱 실행:
    streamlit run image_classification_app.py
    브라우저에서 http://localhost:8501로 이동하여 앱을 확인합니다.

5. 주요 기능 설명

  • A. 이미지 업로드 및 분류: 사용자가 이미지를 업로드하면 TensorFlow Hub의 사전 학습된 MobileNet V2 모델을 사용하여 이미지를 분류합니다.
  • B. 데이터 시각화: 무작위로 생성된 데이터를 Pandas DataFrame으로 변환하고 이를 라인 차트로 시각화합니다.
  • C. 사이드바: 사이드바에 슬라이더를 추가하여 사용자 입력을 받을 수 있습니다.

6. 실행 결과

앱 실행 후 다음과 같은 기능을 테스트할 수 있습니다:

  • 이미지를 업로드하고 분류 결과를 확인합니다.
  • 데이터가 라인 차트로 표시되는 것을 봅니다.
  • 사이드바 슬라이더를 조작하여 선택된 범위를 변경합니다.

7. 추가 팁

  • TensorFlow Hub 모델 외에도 다양한 사전 학습 모델을 사용할 수 있습니다.
  • @st.cache 데코레이터를 활용해 데이터 로딩 속도를 최적화할 수 있습니다.
  • Streamlit Cloud를 사용해 앱을 쉽게 배포할 수 있습니다.


20250105

Anthropic의 컴퓨터 조종 AI: Claude 3.5의 혁신적인 "Computer Use" 기능

 Anthropic이 발표한 Claude 3.5 Sonnet의 새로운 기능, "Computer Use", 는 AI 기술의 새로운 지평을 열고 있습니다. 이 기능은 AI가 사람처럼 컴퓨터를 조작할 수 있도록 설계되었으며, 마우스 이동, 버튼 클릭, 텍스트 입력과 같은 작업을 수행할 수 있습니다. 이번 글에서는 Claude의 컴퓨터 조종 기능의 주요 내용과 활용 사례, 그리고 개발자들이 이를 테스트하고 활용할 수 있는 방법을 소개합니다.

"Computer Use" 기능이란?

Anthropic의 **"Computer Use"**는 AI가 컴퓨터 화면을 보고 상호작용하며, 실제 사용자처럼 작업을 수행할 수 있도록 설계된 기능입니다.
이 기능은 현재 공개 베타 상태로 제공되며, 다음과 같은 작업을 수행할 수 있습니다:
  • 커서 이동 및 클릭: 화면에서 특정 위치를 찾아 클릭.
  • 텍스트 입력: 가상 키보드를 사용해 문서 작성 또는 입력 폼 작성.
  • 웹 탐색 및 소프트웨어 조작: 브라우저에서 검색하거나 애플리케이션 내에서 작업 수행.

주요 특징

  1. 사람처럼 컴퓨터 사용:
    • Claude는 화면을 보고, 커서를 움직이며, 버튼을 클릭하고 텍스트를 입력할 수 있습니다.
    • 예: 고객 관계 관리(CRM) 페이지에서 데이터를 찾아 폼에 입력 후 제출.
  2. API 통합 가능:
    • Anthropic API를 통해 Claude의 컴퓨터 사용 기능을 개발자 워크플로우에 통합할 수 있습니다.
    • 예: "내 컴퓨터와 온라인 데이터를 사용해 이 폼을 작성해줘"라는 명령으로 자동화된 작업 수행.
  3. 다중 스텝 작업 처리:
    • Claude는 복잡한 다중 단계 작업(수십에서 수백 단계)을 처리하며, 장애가 발생하면 스스로 수정하고 재시도합니다.

실제 활용 사례

1. 기업에서의 활용

이미 여러 기업이 Claude의 "Computer Use" 기능을 활용하여 생산성을 높이고 있습니다:
  • Replit: Claude를 활용해 앱 빌드 과정에서 자동 검증 도구 개발.
  • Canva: 디자인 생성 및 편집 과정에서 시간 절약 효과 확인.
  • GitLab: DevSecOps 작업에서 최대 10% 성능 향상.
  • Browser Company: 웹 기반 워크플로우 자동화에서 탁월한 성과.

2. 데모 시나리오

Anthropic이 공개한 데모에서는 Claude가 다음과 같은 작업을 수행했습니다:
  • CRM 페이지를 스크롤하며 필요한 데이터를 찾고 이를 폼에 입력.
  • 텍스트 편집기를 열어 문서를 작성하고 저장.
  • 브라우저를 열어 웹사이트 탐색 후 필요한 정보를 정리.

테스트 가능한 예제

개발자들은 Anthropic API를 사용하여 Claude의 "Computer Use" 기능을 직접 테스트할 수 있습니다. 아래는 간단한 테스트 예제입니다.

1. 설정 준비

요구 사항

  • Anthropic API 키 (console.anthropic.com에서 생성)
  • Docker 설치 (테스트 환경 격리를 위해 권장)

Docker 환경 설정

bash
docker run -d -p 8080:8080 anthropic/computer-use-demo

2. 간단한 작업 테스트

예제 1: 파일 저장

Claude에게 다음과 같은 요청을 보냅니다:
text
Save a picture of a cat to my desktop.

예상 동작

  1. Claude가 브라우저를 열고 "cat picture"를 검색.
  2. 이미지를 다운로드하여 데스크톱에 저장.

예제 2: 텍스트 편집기 사용

Claude에게 다음 요청을 보냅니다:
text
Open a text editor and type the following text: "Hello World! This is a test of Claude's computer use functionality."

예상 동작

  1. 텍스트 편집기를 열고 지정된 텍스트를 입력.
  2. 파일 저장 명령 실행.

3. Python 코드로 API 사용

Anthropic API를 활용해 Claude의 컴퓨터 사용 기능을 호출할 수도 있습니다.

Python 코드 예제

python
import anthropic client = anthropic.Client(api_key="your_api_key") response = client.completions.create( model="claude-3-5-sonnet", prompt="Use the computer to open a text editor and type 'Hello World!'", max_tokens=100, ) print(response['completion'])

안전성 및 주의사항

Anthropic은 "Computer Use" 기능이 강력한 만큼, 이를 안전하게 사용하는 것이 중요하다고 강조합니다.

보안 권장 사항

  1. 격리된 환경 사용:
    • 가상 머신(VM) 또는 컨테이너 환경에서 실행하여 민감한 데이터 접근 방지.
  2. 인터넷 접근 제한:
    • 필요한 도메인만 허용하여 불필요한 네트워크 접근 차단.
  3. 사람 중심 제어 유지:
    • 민감한 작업에는 항상 사람이 최종 결정을 내리도록 설계.

잠재적 위험

  • 프롬프트 인젝션 공격:
    악성 명령어가 포함된 프롬프트로 AI 모델의 의도치 않은 행동 유발 가능.
  • Anthropic은 이를 방지하기 위해 모델에 안전 장치를 추가했으며, 프롬프트 검증 및 실행 결과 모니터링 시스템을 제공합니다.

앞으로의 전망

Claude의 "Computer Use"는 인간과 유사하게 컴퓨터와 상호작용하는 AI 기술 발전의 중요한 이정표입니다.
이 기능은 단순히 특정 작업을 자동화하는 것을 넘어, 일반적인 소프트웨어와 웹 애플리케이션을 다룰 수 있는 범용 도구로 자리 잡고 있습니다.Anthropic은 현재 공개 베타 상태에서 사용자 피드백을 적극적으로 반영하여 이 기술을 더욱 발전시킬 계획입니다. 앞으로 이 기술이 업무 자동화와 생산성 향상에 어떤 변화를 가져올지 기대됩니다.

결론

Anthropic의 "Computer Use"는 AI가 단순히 텍스트 대화를 넘어 실제 컴퓨터를 조작할 수 있는 새로운 가능성을 열었습니다.
개발자들은 이를 활용해 복잡한 워크플로우를 자동화하고 반복적인 작업에서 벗어날 수 있으며, 기업들은 생산성과 효율성을 극대화할 수 있습니다.