zioinfo-mail/.claude/agents/asset-qr-dev.md
DESKTOP-TKLFCPR\ython f3987c4402 feat(harness): GUARDiA 기능 개선 및 추가 하네스 — 5개 에이전트
핵심 기능:
1. app-distribution-dev: 모바일 앱 QR 배포 (APK→QR→랜딩→설치)
2. itsm-ux-dev: ITSM 준비중 뷰 8개 완성 + 배치 SSH + D3 의존성 맵
3. mail-enhance-dev: 웹메일 주소록·서명·폴더 관리
4. asset-qr-dev: 서버 QR 태그→스캔→CMDB 조회·실사
5. notification-ui-dev: 노코드 알림 규칙 편집기 + 스마트 필터

목표: 774→~810 엔드포인트
QR 배포: 앱스토어 없이 Manager QR 스캔으로 즉시 설치

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 19:14:53 +09:00

3.1 KiB
Raw Blame History

asset-qr-dev

핵심 역할

자산 QR 태그 기반 추적 시스템을 구현한다. 서버·장비에 QR 코드 라벨을 부착하고, 스마트폰으로 스캔하면 CMDB 정보 조회·수정·점검이 가능하다.

구현 범위

ITSM 신규 라우터: asset_qr.py

POST /api/asset-qr/generate/{server_id}  서버용 QR 코드 생성
GET  /api/asset-qr/scan/{qr_token}       QR 스캔  자산 정보 반환
POST /api/asset-qr/checkin/{qr_token}    실사 체크인 (위치·상태 확인)
GET  /api/asset-qr/print/{server_id}     인쇄용 QR 라벨 HTML 생성
GET  /api/asset-qr/batch-print           다수 자산 QR 일괄 인쇄
POST /api/asset-qr/mobile-register       스마트폰으로 신규 자산 등록
GET  /api/asset-qr/audit-log/{server_id} QR 스캔 이력

QR 코드 데이터 구조

# QR 코드에 인코딩되는 URL
# https://guardia.기관명.co.kr/asset/{qr_token}
# qr_token: UUID4 (서버 ID 직접 노출 방지)

class AssetQRToken(Base):
    __tablename__ = "tb_asset_qr_token"
    id         = Column(Integer, primary_key=True)
    qr_token   = Column(String(36), unique=True)  # UUID4
    server_id  = Column(Integer, ForeignKey("tb_server_info.id"))
    qr_data    = Column(Text)   # base64 QR 이미지
    scan_count = Column(Integer, default=0)
    last_scan_at = Column(DateTime)
    created_at = Column(DateTime)

class AssetQRScanLog(Base):
    __tablename__ = "tb_asset_qr_scan_log"
    id          = Column(Integer, primary_key=True)
    qr_token    = Column(String(36))
    scan_type   = Column(String(20))  # VIEW | CHECKIN | REGISTER
    user_agent  = Column(String(200)) # 모바일 기기 정보
    location    = Column(String(200), nullable=True)
    note        = Column(Text, nullable=True)
    scanned_at  = Column(DateTime)

QR 라벨 디자인 (인쇄용)

<!-- /api/asset-qr/print/{server_id} 반환 HTML -->
<!-- A4 인쇄 최적화, 라벨 크기 50×30mm -->
┌─────────────────────────┐
│  [GUARDiA 로고]          │
│  ████████  서버명: web01 │
│  ████QR██  IP: 192.168.1.10 │
│  ████████  일련번호: SN001 │
│            랙: A-01      │
└─────────────────────────┘

Messenger 앱 연동

// app/(tabs)/scan.tsx 신규 탭
// expo-barcode-scanner로 QR 스캔
// 스캔 결과 → /api/asset-qr/scan/{token}
// 서버 상세 정보 표시 + 실사 체크인 버튼

ITSM 사이드바 메뉴 추가

// index.html
{ label: 'QR 자산 관리', nav: 'asset_qr' }
// app.js
case "asset_qr":
  // 전체 서버 QR 목록, 스캔 이력, 일괄 인쇄

작업 원칙

  1. QR 토큰은 UUID4 (서버 ID 노출 방지)
  2. 인증 없이도 스캔 가능한 공개 URL (기본 정보만)
  3. 상세 수정은 로그인 필요
  4. qrcode 라이브러리 (app-distribution-dev와 공유)

팀 통신 프로토콜

  • 협업: app-distribution-dev와 qrcode 라이브러리 설치 공유
  • 협업: itsm-ux-dev에 asset_qr 뷰 패턴 제공