4.2 KiB
4.2 KiB
구현 계획 - 모듈(라이선스) 관리
이 시스템의 목표는 관리자가 "라이선스 관리" 페이지를 통해 특정 모듈(자산, 생산, CCTV)을 활성화/비활성화할 수 있도록 하는 것이며, 활성화를 위해서는 유효한 라이선스 키가 필수입니다.
라이선스 시스템 아키텍처
서명된 토큰(Signed Token) 방식(JWT 또는 AES 암호화와 유사)을 사용합니다.
- 발급 (개발자): 생성 도구(CLI 스크립트)를 사용하여 키를 생성합니다.
- 데이터:
{ module: 'cctv', type: 'demo', created: '2024-01-01', days: 30 } - 출력:
U2FsdGVkX1...(암호화된 문자열)
- 데이터:
- 활성화 (사용자): 사용자가 이 문자열을 입력합니다. 서버는 비밀 키(Secret Key)로 이를 복호화하고 날짜를 검증합니다.
사용자 검토 사항
Important
라이선스 관리: 보안을 위해 숨겨진 관리자 생성기(CLI 스크립트)를 사용하여 키를 발급합니다. 만료 처리: 시스템은 데이터베이스에 저장된
expiry_date를 확인하여 만료 여부를 판별합니다.
변경 제안 사항
데이터베이스 및 서버
[신규] system_modules 테이블
code(VARCHAR, PK): 'asset', 'production', 'monitoring'is_active(BOOLEAN)license_key(TEXT): 원본 키 문자열.license_type(VARCHAR): 'dev', 'sub', 'demo'expiry_date(DATETIME): 'dev'(영구)인 경우 NULL.
[신규] server/utils/licenseManager.js
generateLicense(module, type): 암호화된 문자열 반환.verifyLicense(key): 복호화하여 유효성 및 만료일 반환.
[신규] server/routes/system.js
POST /activate: 키 입력 -> 복호화 -> DB 업데이트.GET /modules: 모듈 상태 및 만료 정보 반환.
프론트엔드
[신규] src/system/pages/LicensePage.tsx
- 모듈 목록: 활성/비활성 스위치, 만료일 표시.
- 활성화 모달: 키 입력 필드 제공.
- (숨김) 생성기 탭: 보안상 이유로 삭제됨, CLI로 대체.
[수정] src/widgets/layout/MainLayout.tsx
- 모듈 활성화 상태에 따라 사이드바 메뉴 조건부 렌더링.
검증 계획
- 키 발급: 생성기(CLI)를 사용하여 'Demo' 키(30일)와 'Dev' 키를 생성합니다.
- 활성화: Demo 키를 적용합니다. 30일 후 만료되는지 확인합니다.
- UI 확인: 'CCTV' 메뉴가 사이드바에 나타나는지 확인합니다.
[신규] tools/license_manager.cjs
- 통합 CLI: 오프라인 키 관리 및 온라인 DB 상태 관리.
- 명령어:
list: DB의 모든 모듈 상태 조회.generate <module> <type>: 새로운 서명된 라이선스 키 생성.decode <key>: 라이선스 키 내용 확인 (복호화).activate <key>: 키를 사용하여 DB에 직접 활성화 적용.delete <module>: DB에서 모듈 비활성화/삭제.
- 삭제됨: 기존
issue_license.cjs(이 도구로 통합됨).
고급 카메라 설정 구현
1. 데이터베이스 스키마 확장
camera_settings 테이블에 다음 컬럼을 추가하여 설정을 저장합니다.
transport_mode: ENUM('tcp', 'udp', 'auto') - RTSP 전송 프로토콜 제어.rtsp_encoding: BOOLEAN - 비밀번호 특수문자 URL 인코딩 여부.quality: ENUM('low', 'medium', 'original') - 스트리밍 해상도 및 비트레이트 제어.
2. 백엔드 스트림 엔진 (streamRelay.js)
- FFmpeg 튜닝: JSMpeg(소프트웨어 디코더)의 안정성을 위해 비트레이트를 제한하고 키프레임 주기를 조정했습니다.
-maxrate,-bufsize: 네트워크 버스트 방지.-g 30: 1초마다 키프레임 전송 (화면 깨짐 시 1초 내 자동 복구).
- 심리스 리로드 (Seamless Reload):
- 사용자 설정 변경(PUT) 시, 클라이언트(브라우저)와의 WebSocket 연결은 유지한 채 백그라운드의 FFmpeg 프로세스만 교체합니다.
stopStream대신reloadStream을 사용하여 끊김 없는 화질 변경 경험을 제공합니다.
3. 프론트엔드 UI
- CameraModal: 고급 설정 섹션을 추가하여 사용자가 기술적인 설정(TCP/UDP, 해상도)을 직관적으로 제어할 수 있도록 폼을 개선했습니다.