Skip to content

아키텍처

원본 다운로드: Markdown · PDF

작성일: 2026-07-19 · 한글 복구: 2026-09-07 초기 아바타 데모의 설계 기록입니다. 이후 Meet 및 Windows 서비스 구성은 관련 가이드를 참고합니다.

사용자 브라우저
|
+-- HTTPS --> Caddy --> 웹 UI (Flutter / Meet)
|
+-- WSS ----> Caddy --> LiveKit SFU :7880
+-- WebRTC ----------> LiveKit 미디어 포트
^
| 영상·음성 트랙 발행
Avatar Bot (Python)
^
| PyAV 파일 디코딩
avatar_bot/videos/avatar.mp4
^
| 오프라인 영상 생성
Wav2Lip / SadTalker
GFPGAN / CodeFormer

Caddy는 HTTPS 및 시그널링 프록시를 담당하고 LiveKit은 참가자 사이의 미디어와 데이터를 중계합니다. Avatar Bot은 미리 만든 영상을 읽어 방에 발행합니다.

  1. 클라이언트가 JWT로 LiveKit 방에 입장합니다.
  2. 로컬 카메라와 마이크 트랙을 발행합니다.
  3. 아바타를 포함한 원격 참가자의 트랙을 구독합니다.
  4. LiveKit SFU가 WebRTC 미디어를 중계합니다.
  1. Flutter가 avatar-control 토픽으로 video:off 등의 명령을 보냅니다.
  2. 봇이 비디오 또는 오디오 트랙의 음소거 상태를 변경합니다.
  3. 봇이 avatar-status 토픽으로 상태를 알립니다.
  4. Flutter가 토글 UI 상태를 동기화합니다.
  1. videos/의 얼굴 영상과 오디오를 입력으로 준비합니다.
  2. Wav2Lip으로 립싱크를 생성하고 필요하면 GFPGAN 또는 CodeFormer로 복원합니다.
  3. 결과를 avatar_bot/videos/avatar.mp4에 배치합니다.
  4. 봇이 파일 수정 시간 변경을 감지해 영상을 다시 불러옵니다.

SadTalker는 사진과 오디오를 이용한 대체 제작 경로입니다.

  • 개발 키: devkey / secret
  • Flutter의 TokenGenerator가 클라이언트에서 HS256 JWT에 서명합니다.
  • 봇은 같은 키를 사용해 서버 SDK의 AccessToken을 생성합니다.

이 구조는 클라이언트 번들에 secret이 포함되는 한계가 있습니다. 운영용 Flutter 구성에는 서버 측 토큰 발급 API가 필요합니다. 별도 Meet 앱은 서버의 connection-details API를 사용합니다.

계층 위치 및 역할
공개 도메인 meet.dev.tictechtoeai.com
TLS 종료 Caddy (초기 WSL 구성, 이후 Windows 네이티브 서비스)
SFU Windows LiveKit 실행 파일
Bot 같은 머신의 Python 프로세스
초기 정적 웹 Flutter build/web를 Caddy로 제공
이후 Meet UI Next.js 3000 포트를 Caddy로 프록시
방향 설명
Flutter 서버 토큰 짧은 수명의 JWT를 발급하는 API
실시간 립싱크 마이크 또는 TTS에서 생성한 프레임을 봇이 발행
여러 아바타 방과 identity별로 다른 영상 또는 에이전트 사용
Reflex 통합 초기 Caddy의 3000/8000 경로 활용 구상
경로 통일 실행기와 설정을 현재 C 드라이브 작업 경로로 정리

위 표는 구현 완료 목록이 아닙니다. 배포 변경 이력은 Meet 연동Windows 서비스를 참고합니다.