doclib 연속 리팩토링 및 비디오 스트리밍 실행 계획
기준 브랜치: main (94abb46) 목표: 도메인 모듈 경계를 실제 소비 코드까지 연결하고, 정리된 구조 위에 권한 기반 비디오 스트리밍 기능을 구현한다.
작업 순서
| 단계 | 범위 | 완료 기준 |
|---|---|---|
| 1 | 게시판·권한·첨부파일 도메인 접근 계층 | 각 기능이 PortalDataContext 전체 대신 기능별 Hook으로 필요한 상태와 명령만 사용한다. |
| 2 | 홈 화면 첨부파일 UI | 파일 상세, 첨부 목록, 업로드·다운로드·공유 인터랙션을 features/attachments로 이동한다. |
| 3 | 관리자·서버 인증 세분화 | 관리 패널의 공통 구성 요소와 인증의 세션·사용자 조회·라우트·미들웨어 책임을 파일 단위로 나눈다. |
| 4 | 리팩토링 검증 | 타입 검사, 비밀정보 비의존 테스트, 프로덕션 빌드가 통과한다. |
| 5 | 비디오 스트리밍 | 접근 가능한 동영상 게시, 메타데이터·접근 제어 API, 동영상 플레이어·목록 UI를 별도 기능 모듈로 구현한다. |
도메인 규칙
PortalDataContext는 기존 저장·동기화 호환성을 유지하는 내부 상태 저장소로 둔다. 게시판, 권한, 첨부파일 소비 코드는 각각 features/boards/state, features/access/state, features/attachments/state에서 제공하는 선택적 Hook을 사용한다. 이 방식은 한 번에 데이터 저장 형식을 바꾸지 않으면서도 UI와 기능 명령의 의존성을 분리한다.
비디오 스트리밍은 features/video-streaming과 server/features/video-streaming이 소유한다. 첨부파일 저장소를 재사용하되, 업로드·재생·다운로드는 인증 미들웨어와 게시글의 쓰기·읽기 권한을 통과해야 한다. 기본 구현은 브라우저 기본 HTML5 플레이어와 HTTP Range 요청을 사용하므로 별도 트랜스코딩 인프라 없이 MP4·WebM·Ogg 파일을 재생할 수 있다.
검증 기준
기능 경계 변경 후에는 TypeScript 검사와 프로덕션 빌드를 통과해야 한다. 외부 비밀정보가 필요한 Archive API 및 R2 통합 테스트는 현재 검증 환경에서 별도로 보류하며, 나머지 단위 테스트는 통과해야 한다.