마지막 업데이트 2026-07-29
Shared 패키지 상수/타입 (이벤트·mediasoup config) — 코드레벨 동작 흐름의 핵심을 활용 가이드식으로 먼저 안내합니다. 기술적 결론과 원문 근거는 아래 본문에 보존되어 있습니다.
@ppi/shared는 web(apps/web)과 socket(apps/socket)이 공유하는 상수·타입·유틸의 SSOT(single source of truth). 소켓 이벤트명·mediasoup/WebRTC 설정·세션 타입·로거·에러 클래스가 여기 모여 양쪽이 동일 정의를 쓴다.
SOCKET_EVENTS 한 곳에서 import해 drift를 원천 차단한다.
| export | 내용 |
|---|---|
MEDIASOUP_CONFIG | ROUTER_MEDIA_CODECS(opus/VP8/VP9/H264), 포트 40000–40099, 대역폭, 워커 로그(#2) |
WEBRTC_CONFIG | ICE/미디어 제약 등 WebRTC 공통 |
SESSION_CONFIG | 세션 타임아웃·기본값 |
SOCKET_EVENTS | 전 소켓 이벤트명(연결/룸/peer/SFU/legacy P2P/세션/알림…) |
REALTIME_MODEL_VERSIONS / DEFAULT_REALTIME_MODEL_VERSION | "v1.0"/"v1.5", 기본 v1.0(#1) |
API_ENDPOINTS, MONITOR_CONFIG | 엔드포인트·모니터 설정 |
connection(connect/disconnect/error)
room(create/join/leave-room, room-created/closed)
peer(peer-joined/left/state-changed)
mediasoup SFU(create/connect-transport, produce, consume, resume/pause-consumer, close-*)
legacy P2P(sdp-offer/answer, ice-candidate) // V1 #11
session(session-start/stop, lesson-session-expired …)
alert / monitoring / avatar …
| 파일 | 주요 타입 |
|---|---|
mediasoup.ts | PeerRole, InterruptMode(off/early/on), TransportDirection, GuestState, VadSettings, InputAudioNoiseReduction(far/near), ManualReadyState, RoomListItem |
webrtc.ts | RTC*State, RTCIceServerConfig, MediaConstraints, TrackInfo, NetworkQuality, ConnectionStats |
session.ts | SessionRole(host/guest/monitor), SessionState, AlertType/Severity, SessionInfo, RoomConfig |
auto-response.ts | 자동 응답('응') 타입 |
서버의 MediasoupRoom.guestState(#5), 클라 GuestState 갱신(updateGuestState)이 모두 이 GuestState 타입을 공유 → cross-instance 직렬화 정합의 기준.
| export | 역할 |
|---|---|
createLogger(prefix) / logger | 구조화 로거. 서버=JSON Lines(Loki), 브라우저=human-readable(typeof window 분기) |
PPIError + MediasoupError/WebRTCError/SessionError | 코드(ERROR_CODES) 동반 에러 클래스. handleError로 표준화 |
parseUserIdFromRoomId/parseLessonIndexFromRoomId/createRoomId | roomId({userId}_{lessonIndex}) 파싱·생성 |
createRoomId/parse*가 roomId 규칙(#2/#15)의 단일 정의. roomId 포맷을 바꾸려면 여기만 고치면 양쪽 반영.| 파일 | 역할 |
|---|---|
| utils/constants.ts | MEDIASOUP/WEBRTC/SESSION_CONFIG, SOCKET_EVENTS, 모델 버전, API_ENDPOINTS |
| types/{mediasoup,webrtc,session,auto-response}.ts | 공유 타입 |
| utils/{logger,error,room}.ts | 로거·에러·roomId 유틸 |
| index.ts | barrel export(@ppi/shared) |