SSADAK MEMBER STUDIO · V2.3 0.2.3 · 2026-10-16
대표 설치·운영 설명서
V2.3 · 완료 후 수정한 초안의 종료
한 번 제작을 마쳤더라도 사실·원본·현재 회원 설정을 적용하여 새 초안(DRAFT)이 된 작업은 다시 제작할 필요 없이 작업 종료 · 자료 정리 준비 → 이 작업 종료 확인으로 종료할 수 있습니다. 과거 성공 결과가 이전 개정에 보존돼 있는지 확인합니다. 현재 실행·결과 불명·미해결 게시/전송/비용 기록이 있으면 계속 차단합니다.
종료 확인 취소는 원래 초안을 유지합니다. 종료 확정은 자동 보관만 하며 파일을 지우지 않습니다. 종료 작업 자료 정리 · 공간 확보 → 보관한 작업 불러오기 → 정리 대상과 용량 미리 확인 → 백업 파일 만들기 → 백업 TAR 내려받기 → 확인한 자료 정리를 별도로 진행합니다. 성공 기록·이전 글과 설정·수정 이력·비용·게시 영수증은 남습니다. 공유 자료와 앱 밖 원본/백업은 유지합니다.
편집 화면에서 본문도 함께 저장하면 결과 초안이 유지될 수 있습니다. 이 경우에는 작업 보관 후 자료 정리를 사용합니다. 현재 회원 설정을 새 버전에 적용하면 재제작 전 초안으로 돌아가며 위 종료 버튼을 사용할 수 있습니다. 종료 후에는 재실행할 수 없습니다.
DB 구조는 V2.2와 같은 4입니다. 새 DB 이전이나 의존성 추가는 없습니다. 실행 중·결과 불명 보호와 모든 기존 기능은 유지합니다.
이번 프로그램 완료 범위와 첫 운영 준비
현재 합의 범위의 프로그램 개발 완료: 가상 대표·회원, 합성 자료, 로컬 HTTP/TLS, 모의 API, 실제 로컬 영상 제작, Windows/Edge 및 설치·업데이트·복구 검증을 기준으로 합니다. 같은 소스의 상세 결과는 재검토 묶음 REPORT.html과 evidence에서 확인합니다.
첫 배포 시 설정: 대표 서버 주소·HTTPS 인증서·발급자를 준비하고 대표 설명서 명령으로 서명 고객 패키지를 발급합니다. UNPROVISIONED 고객 ZIP은 설정 전 템플릿이며 서명·승인 검사를 그대로 적용합니다. 지금 새 고객이나 서버를 마련할 필요는 없습니다.
사용자 결정으로 연기한 검증: 실제 고객 API 청구 대조·유료 생성 품질·실제 R2 계정과 전송·7개 플랫폼 실게시. 이번 개발 완료 조건에서 제외했으며 실제 성공으로 표시하지 않습니다. 키 분리·대표 키 대체 금지·모의 비용 원장과 내부 게시 승인/중복 방지는 검증 대상입니다.
환경 한계: 기존 Windows PC의 별도 폴더·포트·가상 계정과 격리된 Edge에서 검증했습니다. 깨끗한 다른 PC·물리 휴대폰·OS 재부팅·실제 Chrome 플랫폼 연결은 미검증입니다. 이용료 결제·구독·자동 승인 만료는 범위 밖입니다.
V2.3 · 작업 종료와 정리 취소
프로그램 내부 검증 완료 · 실제 외부 운영 검증은 별도. 이 기능은 고객 PC 파일과 기록만 다루며 API·공개 게시 비용을 발생시키지 않습니다. 이용료 결제·자동 승인 만료는 추가하지 않았습니다.
| 동작 | 무엇이 바뀌나요? |
|---|
| 나중에 실행 | 비용 확인 창을 닫고 입력·원본·DRAFT를 유지합니다. 외부 제작 요청을 보내지 않으며 나중에 제작할 수 있습니다. |
| 작업 보관 | 목록에서 보관함으로 이동합니다. 실행 권한이나 파일·용량은 바뀌지 않습니다. |
| 작업 종료 · 자료 정리 준비 | 완료 후 수정한 초안을 포함한 안전한 미실행/재개 대기 작업을 확인 버튼으로 종료합니다. 다시 생성·편집·재개·미리보기·게시할 수 없고 자동 보관됩니다. 아직 파일은 지우지 않습니다. 종료 취소를 누르면 원상 유지합니다. |
| 실제 파일 정리 | 종료 또는 완료 작업을 선택하고 백업 TAR를 받은 뒤 별도 확인합니다. 선택한 파일만 삭제하고 글·개정·시도·승인·비용·게시 영수증은 남깁니다. |
| 정리 계획 취소 | 정리 전/백업 준비 상태의 계획을 무효화합니다. 작업·원본·렌더는 그대로이며 완료 작업은 계속 편집·재제작할 수 있습니다. 이미 직접 종료한 작업의 종료를 되돌리는 기능은 아닙니다. |
| 앱 백업 사본 삭제 | 취소했거나 정리 완료한 계획의 앱 내부 TAR/임시 파일만 별도 확인 후 삭제합니다. 원본 작업 및 앱 밖으로 내려받은 TAR는 건드리지 않습니다. |
미실행 작업을 비우는 순서
- 더 쓸 작업은 나중에 실행 상태로 둡니다. 사용하지 않을 작업을 펼쳐 작업 종료 · 자료 정리 준비 → 이 작업 종료 확인을 누릅니다. 종료 후 재실행할 수 없으므로 확인하세요.
- 종료 작업 자료 정리 · 공간 확보 → 보관한 작업 불러오기에서 대상을 선택합니다. 이미 완료한 작업은 작업 보관 후 같은 경로를 씁니다.
- 정리 대상과 용량 미리 확인 → 백업 파일 만들기 → 백업 TAR 내려받기. 내려받은 파일을 별도 위치에 보관합니다. TAR의 MANIFEST.json/file_map으로 파일 위치와 해시·읽기용 기록을 확인합니다.
- 확인란을 체크하고 확인한 자료 정리를 누릅니다. 실제 삭제 후 원본 개수/용량이 줄어듭니다. 다른 작업의 현재·이전 개정이 쓰는 파일은 보존하므로 모두 줄지 않을 수 있습니다.
- 정리 완료 기록에서 내려받은 백업을 확인한 후 내려받은 백업의 앱 내 사본 삭제로 추가 공간을 확보합니다.
정리하지 않기로 했거나 백업 후 작업이 바뀐 경우
- 현재 미리보기에서 이 정리 계획 취소 · 원본 유지 또는 정리 기록의 정리 계획 취소 · 원본 유지를 누릅니다. 기록이 보이지 않으면 정리 기록 새로고침을 누릅니다.
- 취소 기록을 펼쳐 앱 사본의 크기와 TAR 여부를 확인하고 취소한 계획의 앱 백업 사본 삭제 → 앱 백업 사본만 삭제 확인을 누릅니다.
- 원래 작업·원본·렌더는 유지됩니다. 다시 정리하려면 현재 대상을 선택하여 새 계획을 만듭니다. 이전 취소된 계획의 확인 요청은 거절됩니다.
정리 전·백업 준비·계획 취소·자료 정리 중·완료 및 처리 실패를 구분합니다. 백업 실패/오래된 계획도 원본을 삭제하지 않고 취소 후 사본을 지울 수 있습니다. 자료 정리 중에는 복구용 백업을 지울 수 없습니다. 앱 종료 후에는 이미 확인한 자료 정리와 백업 삭제만 기록에 따라 이어서 처리합니다. 실패가 남으면 공간·파일 사용 권한을 확인하고 해당 다시 확인/삭제 버튼을 누르세요. 앱 내부 파일을 탐색기에서 직접 지우지 마세요.
실행 중·전송 중·결과 불명·활성 게시 작업은 종료/정리가 차단됩니다. 오래된 상태·개정의 확인도 거절됩니다. 생성과 종료, 정리 확정과 취소가 겹치면 한쪽만 성립합니다. API 키가 없더라도 안전한 미실행 작업은 비용 없이 종료·정리할 수 있습니다. 다른 회원, 공유 자료, 과거 개정 참조, 비용/게시 영수증 보호는 유지합니다.
원본+업로드 예약은 1GiB / 200개이며 파생 파일·음성 캐시·임시 조각·백업은 실제 디스크 사용량을 별도 표시합니다. 정리 백업도 별도 공간이 필요합니다.
업데이트와 되돌림
V2.2에서 도입한 DB 구조 버전 4는 종료 기록(job_terminations), 백업 삭제 저널(storage_backup_removals)을 추가합니다. 기존 구조 3의 작업·정리 계획·이력은 유지합니다. 구버전은 새 종료 상태를 이해하지 못하므로 V2.1/구조 3 또는 V2/구조 2로 바로 되돌릴 수 없습니다. 구조 4 지원 패키지끼리 검증된 업데이트/되돌림만 가능합니다.
업데이트 전에 앱을 종료하고 기존 전체 백업 도구로 데이터 폴더 전체를 보관하세요. 구버전으로 돌아가야 한다면 현재 구조 4 자료도 따로 백업한 뒤 업데이트 전의 전체 백업을 새 폴더에 복구하고 대응하는 구버전 앱으로 시작합니다. 새로 생성한 자료는 예전 백업에 없으며 자동 병합되지 않습니다. user_version을 수동으로 내리지 마세요.
정리 TAR는 앱 전체 DB 복원 백업이 아닙니다. 선택한 실제 파일과 읽기용 기록을 담습니다. 전체 백업은 DB·로컬 암호화 키·파일을 함께 보관하며 외부에 공유하지 않습니다. 아래 기존 전체 백업/복구 명령을 사용하고 복구 후 재로그인·기기 교체를 확인하세요.
자막 끄기와 소수점
내레이션 자막 끔은 저장된 수동 자막보다 우선합니다. 원문·이전 개정·기존 결과는 그대로 남습니다. 회원 설정에서 켠 뒤 작업에 현재 회원 설정으로 이 작업 새 버전 만들기를 적용하면 수동 자막을 다시 사용합니다. Shorts·클립·Facebook 영상에 공통 적용하며 브랜드·전화·CTA는 유지합니다. 새 미리보기와 새 게시 승인이 필요하고 게시 완료본은 자동 변경하지 않습니다.
영상 구간은 0~600초, 자막은 0~180초에서 0.01초 단위입니다. 예: 구간 0.5~1.5초, 자막 0.25~0.9초. 가림 위치/크기는 0.1% 단위이며 화면 안에 있어야 하고 전체 75% 제한을 유지합니다. 음악 음량은 0~50%, 0.1% 단위입니다. 표시 순서는 1~200 정수입니다. 자동 반올림하지 않습니다. 과거 고정밀 값은 자동 변경하지 않으며 새 편집 시 허용 단위에 맞춰 직접 확인합니다.
대표용 서버와 고객 실행기는 분리됩니다. 운영 도메인·TLS와 실제 외부 계정 검증은 대표가 준비할 항목입니다. 기존 앱은 종료하거나 수정하지 않았습니다. 제공된 고객 ZIP은 서버 미설정 템플릿이며 그대로 운영용으로 전달하면 실행되지 않습니다.
1. 대표 서버 설치
대표 패키지를 새 폴더에 풀고 설치.cmd를 실행합니다. 기본 설치 루트 %LOCALAPPDATA%\SSADAK\AUTHORITY, 데이터는 그 아래 data입니다. 일반 Windows x64 사용자로 실행하며 Node를 앱 폴더에 설치합니다. 항상 켜둘 PC/서버, 접근 가능한 HTTPS 도메인·인증서·네트워크 포트를 준비합니다. DNS·라우터·방화벽은 자동 변경하지 않습니다.
# PowerShell 5.1, 설치 루트에서 현재 버전 찾기
$root = Join-Path $env:LOCALAPPDATA 'SSADAK\AUTHORITY'
$current = (Get-Content -Raw (Join-Path $root 'current.json') | ConvertFrom-Json).current
$version = Join-Path $root $current
& (Join-Path $version 'Configure-Authority.ps1') -PublicOrigin 'https://members.example.com:4340' -CertificateFile 'C:\certs\fullchain.pem' -PrivateKeyFile 'C:\certs\privkey.pem' -Port 4340
& (Join-Path $version 'Start-MemberApp.ps1')
예시 도메인과 인증서 경로는 실제 값으로 바꿉니다. HTTPS 주소의 포트와 직접 수신 포트는 네트워크 구성에 맞춥니다. 최초 data/MASTER_SETUP.url을 대표만 열어 마스터 아이디·비밀번호를 정합니다. 링크·data·서명 개인키를 고객 패키지에 넣지 않습니다. 최초 링크는 사용 후 효력이 없어집니다.
2. 서명 고객 패키지 생성
& (Join-Path $version 'Build-Release.ps1') -OutputDirectory 'C:\SSADAK-Releases' -AuthorityUrl 'https://members.example.com:4340' -AuthoritySigningKey (Join-Path $root 'data\authority-signing-key.json')
이 명령이 생성한 CUSTOMER_PC ZIP만 고객에게 전달합니다. 공개키·서명·HTTPS 서버 주소가 고정됩니다. 고객 설치 설정을 다른 임의 서버로 바꾸면 거절합니다. AUTHORITY 패키지와 데이터는 고객에게 보내지 않습니다. 최초 대표 패키지는 자기 발급 서명이 아닌 파일 해시 배포이므로 재검토 ZIP의 해시와 신뢰한 전달 경로를 확인합니다. 정식 고객 서명은 이후 업데이트에서도 같은 발급자 키를 사용합니다.
3. 승인·중지·기기 관리
회원 관리에서 회원 검색 → 사용 허용 / 사용 해제. 허용은 무기한이며 고객 결제 기능은 없습니다. 기기 회수는 기존 기기·세션·실행 권한을 무효화하고 다음 새 PC 로그인으로 등록합니다. 요청마다 중앙 권한을 확인하며 실행 lease는 20초 간격 갱신, 만료 60초입니다. 중앙 장애 시 다음 외부 실행을 차단합니다. 이미 외부 접수된 요청은 철회 보장할 수 없습니다. 계정 공유를 억제하지만 사용자가 소스/OS를 변조하는 공격까지 막는 DRM은 아닙니다.
4. 자동 시작·중지·장애
Authority-Service.ps1 -Register는 현재 사용자 Windows 로그인 시 예약 작업을 등록합니다. 부팅 후 로그인 전 Windows 서비스가 아닙니다. watcher와 예약 작업은 최대 3회 1분 재시작 설정이며 원본 앱과 무관합니다. 실제 등록·재부팅 검증은 수행하지 않았습니다. -Unregister는 이 설치의 작업만 해제합니다. Stop-MemberApp.ps1은 실행 파일·PID 생일을 확인한 자기 서버만 중지합니다. PID 재사용만으로 종료하지 않습니다.
5. 백업·대표 비밀번호 복구
# 서버를 먼저 종료한 뒤, 설치된 Node로 실행
node authority-ops.mjs backup '중앙데이터폴더' '존재하지않는새백업폴더'
node authority-ops.mjs restore '백업폴더' '존재하지않는새복구폴더'
node authority-ops.mjs recover-master '중앙데이터폴더' 'https://members.example.com:4340'
설치된 Node는 현재 버전 runtime/node-v24.19.0-win-x64/node.exe입니다. 복구는 전체 해시 검증 후 새 폴더로만 진행합니다. 서명 키를 보존하고 로그인 세션은 지웁니다. 대표 복구는 중지된 중앙 DB에 15분 1회 MASTER_RECOVERY.url을 만들고 기존 대표 세션을 지웁니다. data 설정·인증서 참조 경로를 새 설치에 맞춰 다시 구성합니다. 백업 속 실제 키·자료를 검토 ZIP에 넣지 않습니다.
6. V1 자료 이전
운영 DB를 실행 중에 복사하거나 덮어쓰지 않습니다. V1 앱을 별도로 중지하고 공식 백업을 만든 뒤 복제본에서 먼저 검증합니다. V2는 DB user_version 2와 schema_migrations를 기록하며 더 높은 버전은 차단합니다. 이번 검증은 실제 V1 코드로 생성한 가상 2회원 DB를 사용했고 실제 운영 자료는 읽기 집계도 ERR_SQLITE_ERROR로 완료하지 못했습니다. 운영 이사가 끝났다고 보지 않습니다.
node legacy-member-export.mjs '중지된V1데이터사본' '존재하지않는고객데이터폴더' '해당회원UUID' 'https://members.example.com:4340'
선택 회원의 작업·사진·게시 영수증만 내보내고 다른 회원·세션·중앙 게시판은 제외합니다. 키를 새 로컬 vault로 재암호화합니다. 중앙에는 같은 UUID의 회원 DB가 보존되어야 하며 고객 재인증이 필요합니다. 현재 원본 대표 automation의 과거 작업을 회원 앱으로 자동 변환하는 기능은 없습니다. 원본 자료는 그대로 유지됩니다. 복구된 자료의 해시·회원·과거 게시 기록을 확인한 뒤에만 운영 경로를 전환합니다.
7. 업데이트와 롤백
- 자기 앱 종료 → 비공개 백업 → 동일 발급자로 서명한 새 ZIP을 새 폴더에 압축 해제.
- 설치.cmd 또는 Install-Package.ps1을 동일 설치 루트로 실행. 별도 버전 폴더에서 무결성·런타임 준비가 완료돼야 current.json을 변경합니다. 실패하면 이전 버전 포인터 유지.
- 필요 시 현재 버전 Node로
package-manager.mjs rollback 설치루트. 데이터 호환 스키마 범위 안에서만 실행하며 데이터 자동 다운그레이드는 하지 않습니다. - 고객 Chrome 연결은 플랫폼연결_설치.cmd 재실행 후 새 확장 폴더를 로드합니다. 이전 버전 확장과 버전 해시가 다르면 게시를 차단합니다.
8. 공지·문의·운영 수용 검사
공지 작성·수정·보관과 변경 이력, 비공개 문의 답변·완료 처리, 회원/작업/게시판 검색·페이지 이동을 제공합니다. 삭제로 기록을 지우지 않습니다. 실제 운영 전 EXTERNAL_ACTIONS.json 순서로 깨끗한 PC, HTTPS, 본인 API, R2, 플랫폼별 본인 인증·새 테스트 게시 승인을 한 번에 준비합니다. 기존 Maxcruz 등 역사 작업은 테스트 게시에 쓰지 않습니다. 로컬 통과와 실게시 통과를 별도 기록해야 합니다.