| 항목 | 필요 여부 | 없으면 |
|---|---|---|
python3 |
필수 | 서버가 뜨지 않는다. macOS·Linux 기본 탑재 |
| 외부 패키지 | 없음 | 표준 라이브러리만 쓴다. pip install 이 없다 |
| 브라우저 창 | 권장 | Claude Code 데스크톱 앱의 창을 쓴다. 없으면 사용자가 직접 localhost:<포트> 를 열면 동일하게 동작한다 |
| 인터넷 | 불필요 | 덱은 외부 CDN을 참조하지 않는다. 오프라인에서 만들고 발표할 수 있다 |
스크립트는 skills/lecture-live-edit/scripts/ 에 있다. 플러그인 설치 위치는 환경마다 다르므로
세션에서 한 번 찾아 쓴다.
TOOL=$(dirname "$(find ~/.claude -name lle.py -path '*lecture-live-edit/scripts*' 2>/dev/null | head -1)")launch.json 의 runtimeArgs 만은 실제 절대경로가 들어가야 한다(설정 파일이라 변수 확장이 없다).
오케스트레이터가 셋업 단계에서 위 방법으로 해석해 채워 넣는다.
- 강의 1건 = 폴더 1개 = 포트 1개. 4601부터 순서대로 쓴다.
- 포트가 이미 쓰이면 서버는 다른 포트로 옮겨가지 않고 즉시 종료한다.
launch.json의 포트가 단일 진실이어야 브라우저가 늘 같은 주소를 보기 때문이다. - 충돌 시: 그 강의의 서버가 이미 떠 있는 것이면 그대로 쓰고, 다른 프로그램이면
launch.json의 포트를 바꾼다.
lsof -nP -iTCP:4601 -sTCP:LISTEN # 누가 쓰는지 확인피드백이 도착하면 Claude가 자동으로 깨어나 반영한다. 이 감시는 세션 단위다.
| 상황 | 동작 |
|---|---|
| 정상 | 피드백 1건마다 알림 → 자동 반영 |
| 세션 종료 | 감시는 사라지지만 큐는 디스크에 남는다. 재개 시 일괄 반영 |
| 감시가 죽음 | 반자동으로 강등 — 오버레이가 대기 건수와 안내를 표시하고, 채팅에 아무 말이나 하면 처리된다 |
어느 경우에도 데이터 유실은 없다. 미처리 여부는 queue.jsonl 줄 수와 cursor 의 차이로만 판정하므로,
알림은 유실돼도 되는 힌트일 뿐이다.
세션을 새로 시작했을 때의 재개 절차는 lecture-live-edit 스킬에 규정돼 있다
(서버 재기동 → 밀린 것 반영 → 감시 재장전 → 상태 보고).
- 서버는
127.0.0.1에만 바인딩한다. 외부에서 접근할 수 없다. - 피드백 요청은 64KB로 제한한다.
- 별도 인증이 없는 것은 로컬 전용이기 때문이다. 공개 네트워크에 노출하지 말 것.
<강의 폴더>/
├── deck.html 최종 산출물 (항상 클린)
├── feedback/ 라이브 편집 상태 — queue.jsonl, cursor, published, applied.jsonl
├── versions/ 반영 직전 스냅샷 (되돌리기용)
└── _workspace/ 구성안 등 중간 산출물
feedback/ 과 versions/ 는 런타임 부산물이다. 배포할 때는 deck.html 만 가져가면 된다.
- 슬라이드를 JS가 런타임 생성하는 덱은 편집 대상이 되지 못한다. 고칠 자리가 소스에 없기 때문이다.
- 같은 프로젝트를 두 세션이 동시에 편집하면 커서를 양쪽이 기록해 어긋난다. 지원하지 않는다.
- macOS에서 한글 파일명은 NFC/NFD 정규화 불일치로 404가 날 수 있다. 서버가 자동 재시도하지만, 이미지 파일명은 ASCII를 권한다.