Use visible NAS upload storage and reconcile missing files
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
|
||||
비로그인 방문자에게 전송 내역을 보여주지 않는다. 로그인한 계정이 수락하고 그 세션이 전달 완료까지 유효한 경우 받은 항목에 기록한다. 로그인 전 받은 자료는 가져오지 않는다. 받은 항목은 날짜별로 묶는다. 자동 열기/다운로드 후 읽음은 기기 접근권과 계정 기록에 함께 반영한다.
|
||||
|
||||
오른쪽 보관함 버튼을 누르면 받은 항목을 먼저 표시하고 `임시 저장 / 받은 항목`을 전환할 수 있다. 임시 저장은 자신이 클립보드 콘텐츠·파일을 담는 공간이다. 먼저 `클립보드 저장 / 파일 저장` 중 하나를 선택하고 해당 입력만 표시한다. 선택적인 한 줄 제목/메모는 최대 200자이며 원래 만료를 연장하지 않고 수정할 수 있다. 제목 아래 보관 설명은 생략하고 하단 용량 안내와 함께 `항목별 최대 7일 보관`을 표시한다. 계정 설정은 이메일·비밀번호별 변경 버튼을 누른 뒤 해당 폼을 열며 모바일에서는 하단 시트로 표시한다. 이메일 주소로 다른 사람에게 보내는 새 요청은 제거했다. Resend는 가입·인증·비밀번호 복구 등 계정 메일에 계속 사용한다.
|
||||
오른쪽 보관함 버튼을 누르면 받은 항목을 먼저 표시하고 `받은 항목 / 임시 저장`을 전환할 수 있다. 임시 저장은 자신이 클립보드 콘텐츠·파일을 담는 공간이다. 먼저 `클립보드 저장 / 파일 저장` 중 하나를 선택하고 해당 입력만 표시한다. 선택적인 한 줄 제목/메모는 최대 200자이며 원래 만료를 연장하지 않고 수정할 수 있다. 제목 아래 보관 설명은 생략하고 하단 용량 안내와 함께 `항목별 최대 7일 보관`을 표시한다. 계정 설정에서 이메일 변경 버튼은 숨기고 비밀번호 변경 버튼으로 해당 폼을 열며 모바일에서는 하단 시트로 표시한다. 이메일 주소로 다른 사람에게 보내는 새 요청은 제거했다. Resend는 가입·인증·비밀번호 복구 등 계정 메일에 계속 사용한다.
|
||||
|
||||
기기 전송은 새 링크, 새 파일, 로그인한 사용자의 보관함 자료 중에서 보낸다. 보관함은 임시 저장과 받은 항목을 포함한 세 번째 콘텐츠 선택 방법이며 비로그인 화면에서는 숨긴다. 항목 선택은 미리보기만 바꾸고 한 개의 전송 버튼으로 확정한다. 저장한 자료도 대상 기기가 수락한 뒤에 전달한다. 저장된 파일은 서버의 원본을 재사용해 브라우저 재다운로드·재업로드와 중복 물리 저장을 피한다. 원본의 개인 메모는 상대에게 복제하지 않는다. 다른 계정의 자료, 만료·삭제한 원본, 폐기된 발신 계정 세션으로는 보낼 수 없다.
|
||||
|
||||
|
||||
@@ -137,3 +137,12 @@
|
||||
- 내 기기 설정의 발견 허용 스위치를 제거했다. 이전 버전에서 발견을 꺼둔 세션도 재접속 시 켜지며 기기 ID·저장한 이름을 유지하는지 검증했다. 기존 서버의 접근 제어·방 격리와 발견 차단 API는 유지한다.
|
||||
- 전체 빌드·타입 검사와 API 테스트 80개 통과. 계정 보관함·반응형 레이아웃·익명 파일/링크 전송·클립보드 텍스트·위치 자동 발견 브라우저 검증 5종을 통과했다. 실제 계정 메일은 테스트 메일러로 검증하며 외부 Resend 발송은 수행하지 않았다.
|
||||
- 파일 원본·조각·DB의 영구 볼륨 위치, 다운로드 실패·사이트 이탈, 마지막 유효 참조가 끝난 뒤 원본 정리와 관리자 접근 범위를 구현 코드로 확인해 deploy.md에 기록했다. 파일 보관 정책·DB 구조·YAML·환경변수는 변경하지 않았다. NAS 원격 배포는 수행하지 않았다.
|
||||
|
||||
## 2026-10-13 공유 폴더 저장·수동 삭제 대비와 안내 정리
|
||||
|
||||
- 파일을 프로젝트의 `uploads` 바인드 마운트에 저장하며 Git·Docker 빌드에서 제외한다. NAS 로그인 사용자의 UID/GID로 앱을 실행하고 소유자 전용 저장 권한을 준비한다. DB 볼륨에는 Compose 라벨과 nocopy를 적용해 처음 만든 빈 볼륨의 소유권을 유지한다. 실행 중인 프로젝트의 권한 변경과 이전 업로드 볼륨을 연결한 상태의 전환은 설정 스크립트에서 거절한다.
|
||||
- 사용자 요청대로 기존 NAS 테스트 자료를 복사하지 않는 최초 초기화 절차를 deploy.md 7-1에 기록했다. `.env`는 유지하며 설정 스크립트 자체는 데이터를 삭제하지 않는다. 초기화 명령은 NAS에서 사용자가 실행해야 하고 이후 코드 업데이트에서는 반복하지 않는다.
|
||||
- 수동 삭제 검증 8개를 추가해 API 총 88개를 통과했다. 조회·개인 용량·다운로드·1분 정리 작업으로 사라진 원본을 감지하며 공유된 모든 항목의 만료·용량 회수·정상 파일/링크 및 페이지 유지·소켓 알림·수락 대기 취소를 확인했다. 멱등 트랜잭션 실패/롤백 후에도 정리를 유지하고 다운로드 직전 삭제는 404, 권한 오류는 기록을 유지한 503으로 처리한다.
|
||||
- 계정 브라우저 검증에서 NAS 저장소에 해당하는 실제 서버 원본을 삭제한 뒤 다운로드 전 안내·양쪽 보관함과 사용량 정리·다른 기기의 열린 전송 선택 해제·전송 버튼 비활성화를 확인했다. 기존 저장·메모·삭제/복원·수락 후 자동 열기/다운로드·로그아웃 권한 격리는 유지한다.
|
||||
- 오류 토스트의 좌우 여백·텍스트/아이콘 중앙 정렬·44px 닫기 버튼·5초 자동 닫힘, 모바일 네트워크 실패의 한국어 안내와 수동 닫힘을 실제 Chromium에서 확인했다. 링크 수신 안내도 5초 뒤 닫히고 새 전송 모달을 가리지 않는다. 이메일 변경 버튼은 숨기고 받은 항목/임시 저장 탭 순서와 보관 만료 날짜 문구를 정리했다.
|
||||
- 전체 빌드·타입 검사, 계정·반응형 레이아웃·익명 파일/링크·클립보드 텍스트 브라우저 검증을 통과했다. 운영 Docker 이미지 빌드, 기본 UID와 다른 NAS UID/GID를 사용하는 실제 격리 Compose 시작/health·영구 DB·호스트 바인드 마운트·공개 호스트 포트 없음, 재시작 뒤 파일/텍스트/세션 보존과 8MiB 미완료 조각 이어 보내기·SQLite integrity·호스트 파일 삭제를 확인했다. 실제 NAS·파일 관리자·실물 Safari의 확인과 재배포는 수행하지 않았다.
|
||||
|
||||
Reference in New Issue
Block a user