# Streamingle 플러그인 아키텍처 설계서 ## 1. 시스템 개요 ### 1.1 목적 - 스트림덱 플러그인과 유니티 간의 실시간 양방향 통신 - 여러 컨트롤러를 하나의 플러그인에서 통합 관리 - 연결 즉시 데이터 공유 및 동적 UI 업데이트 ### 1.2 핵심 특징 - WebSocket 기반 실시간 통신 - JSON 프로토콜을 통한 구조화된 데이터 교환 - 연결 시 즉시 데이터 동기화 - 확장 가능한 컨트롤러 아키텍처 ## 2. 통신 프로토콜 ### 2.1 기본 메시지 구조 ```json { "type": "메시지_타입", "timestamp": "2024-01-01T00:00:00Z", "data": { // 메시지별 데이터 } } ``` ### 2.2 메시지 타입 정의 #### 2.2.1 연결 관련 - `connection_established`: 연결 성공 - `connection_failed`: 연결 실패 - `heartbeat`: 연결 상태 확인 #### 2.2.2 데이터 요청/응답 - `request_data`: 데이터 요청 - `data_response`: 데이터 응답 - `data_update`: 데이터 업데이트 알림 #### 2.2.3 액션 실행 - `execute_action`: 액션 실행 요청 - `action_result`: 액션 실행 결과 #### 2.2.4 UI 업데이트 - `ui_update`: UI 업데이트 요청 - `ui_state`: UI 상태 정보 ## 3. 연결 시 즉시 데이터 공유 구조 ### 3.1 연결 핸드셰이크 프로세스 1. 스트림덱 → 유니티: 연결 시도 2. 유니티 → 스트림덱: `connection_established` + 초기 데이터 3. 스트림덱: UI 즉시 업데이트 ### 3.2 초기 데이터 구조 ```json { "type": "connection_established", "timestamp": "2024-01-01T00:00:00Z", "data": { "available_controllers": [ { "id": "camera_controller", "name": "카메라 컨트롤러", "type": "camera", "items": [ { "id": "camera_1", "name": "메인 카메라", "description": "메인 스트리밍 카메라" } ] }, { "id": "item_controller", "name": "아이템 컨트롤러", "type": "item", "items": [ { "id": "item_1", "name": "무기 1", "description": "기본 무기" } ] } ], "ui_state": { "current_selection": null, "available_actions": [] } } } ``` ## 4. 컨트롤러 아키텍처 ### 4.1 기본 컨트롤러 인터페이스 모든 컨트롤러는 다음 인터페이스를 구현해야 함: - `GetControllerInfo()`: 컨트롤러 정보 반환 - `GetItems()`: 관리 항목 목록 반환 - `ExecuteAction(action_id, parameters)`: 액션 실행 - `OnDataUpdate()`: 데이터 업데이트 알림 ### 4.2 컨트롤러 등록 시스템 - 유니티 시작 시 자동 컨트롤러 스캔 - 동적 컨트롤러 추가/제거 지원 - 컨트롤러별 설정 관리 ### 4.3 지원 컨트롤러 타입 - CameraController: 카메라 전환, 설정 - ItemController: 아이템 관리, 장착 - AnimationController: 애니메이션 재생 - EffectController: 이펙트 제어 - AudioController: 오디오 제어 ## 5. 데이터 동기화 전략 ### 5.1 실시간 업데이트 - 컨트롤러 상태 변경 시 즉시 알림 - UI 상태 자동 동기화 - 연결 끊김 시 자동 재연결 ### 5.2 데이터 캐싱 - 스트림덱 측 로컬 캐시 - 변경된 데이터만 전송 - 캐시 무효화 전략 ### 5.3 동기화 우선순위 1. 연결 시 전체 데이터 2. 상태 변경 알림 3. 주기적 하트비트 4. 요청 시 데이터 ## 6. 에러 처리 및 복구 ### 6.1 연결 관리 - 자동 재연결 (지수 백오프) - 연결 상태 모니터링 - 타임아웃 처리 ### 6.2 데이터 무결성 - JSON 유효성 검증 - 필수 필드 확인 - 기본값 처리 ### 6.3 로깅 및 디버깅 - 구조화된 로그 시스템 - 에러 추적 및 보고 - 성능 모니터링 ## 7. 확장성 고려사항 ### 7.1 새로운 컨트롤러 추가 - 인터페이스 구현만으로 추가 가능 - 플러그인 재시작 없이 동적 로드 - 설정 기반 컨트롤러 활성화 ### 7.2 새로운 메시지 타입 - 프로토콜 버전 관리 - 하위 호환성 유지 - 점진적 기능 추가 ### 7.3 성능 최적화 - 메시지 압축 - 배치 처리 - 연결 풀링 ## 8. 개발 로드맵 ### 8.1 Phase 1: 기본 구조 - WebSocket 통신 기반 구축 - 기본 컨트롤러 인터페이스 - 연결 시 데이터 공유 ### 8.2 Phase 2: 컨트롤러 구현 - CameraController 구현 - ItemController 구현 - 기본 UI 업데이트 ### 8.3 Phase 3: 고급 기능 - 동적 컨트롤러 로드 - 고급 에러 처리 - 성능 최적화 ### 8.4 Phase 4: 확장 - 추가 컨트롤러 타입 - 고급 UI 기능 - 플러그인 마켓플레이스 준비 ## 9. 기술 스택 ### 9.1 유니티 측 - WebSocketSharp: WebSocket 서버 - JSON.NET: JSON 직렬화 - Unity Coroutines: 비동기 처리 ### 9.2 스트림덱 측 - ws: WebSocket 클라이언트 - Node.js 내장 모듈: 파일 시스템, 로깅 - JSON: 데이터 직렬화 ## 10. 보안 고려사항 ### 10.1 인증 - 연결 시 인증 토큰 검증 - 권한 기반 액션 제어 - 세션 관리 ### 10.2 데이터 보호 - 민감한 데이터 암호화 - 로그 데이터 마스킹 - 접근 제어 ## 11. 테스트 전략 ### 11.1 단위 테스트 - 컨트롤러 인터페이스 테스트 - JSON 프로토콜 검증 - 에러 처리 테스트 ### 11.2 통합 테스트 - 전체 시스템 통합 테스트 - 성능 테스트 - 부하 테스트 ### 11.3 사용자 테스트 - 실제 스트리밍 환경 테스트 - 사용자 피드백 수집 - UI/UX 개선