5.7 KiB (Stored with Git LFS)
5.7 KiB (Stored with Git LFS)
Streamingle 플러그인 아키텍처 설계서
1. 시스템 개요
1.1 목적
- 스트림덱 플러그인과 유니티 간의 실시간 양방향 통신
- 여러 컨트롤러를 하나의 플러그인에서 통합 관리
- 연결 즉시 데이터 공유 및 동적 UI 업데이트
1.2 핵심 특징
- WebSocket 기반 실시간 통신
- JSON 프로토콜을 통한 구조화된 데이터 교환
- 연결 시 즉시 데이터 동기화
- 확장 가능한 컨트롤러 아키텍처
2. 통신 프로토콜
2.1 기본 메시지 구조
{
"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 연결 핸드셰이크 프로세스
- 스트림덱 → 유니티: 연결 시도
- 유니티 → 스트림덱:
connection_established+ 초기 데이터 - 스트림덱: UI 즉시 업데이트
3.2 초기 데이터 구조
{
"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 동기화 우선순위
- 연결 시 전체 데이터
- 상태 변경 알림
- 주기적 하트비트
- 요청 시 데이터
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 개선