## 작업 내용 * 업로드된 파일을 iwinv 서버 로컬 디스크에 저장하는 구조를 구현한다. * 파일 저장 경로를 도메인별로 분리한다. * 파일명 충돌을 방지하기 위해 저장 파일명을 UUID 기반으로 생성한다. * DB에는 파일 자체가 아니라 파일 경로와 메타데이터를 저장할 수 있도록 한다. * 업로드된 파일을 다운로드할 수 있는 API를 구현한다. * 파일 접근 시 권한 및 존재 여부를 검증한다. * 파일 크기와 허용 확장자 제한을 적용할 수 있는 구조를 준비한다. ## 완료 조건 * [x] 파일 업로드 시 서버 로컬 디스크에 파일이 저장된다. * [x] 도메인별 저장 경로가 분리되어 있다. * [x] 저장 파일명이 중복되지 않도록 처리된다. * [x] DB에 원본 파일명, 저장 파일명, 파일 경로, MIME 타입, 파일 크기가 저장된다. * [x] 파일 다운로드 API가 구현되어 있다. * [x] 존재하지 않는 파일 요청 시 적절한 에러 응답을 반환한다. * [x] 허용되지 않은 파일 형식에 대한 검증 구조가 준비되어 있다. * [x] 파일 크기 제한을 적용할 수 있는 구조가 준비되어 있다. ## 참고 사항 * MVP에서는 Cloudflare R2를 사용하지 않고 iwinv 서버 로컬 디스크에 파일을 저장한다. * 추천 저장 경로 예시는 `/var/dcom/uploads` 하위에 도메인별 디렉토리를 두는 방식이다. * 예시 경로: * `/var/dcom/uploads/jokbo` * `/var/dcom/uploads/information` * `/var/dcom/uploads/announcements` * `/var/dcom/uploads/albums` * 서버 디스크 용량이 제한적이므로 파일 크기 제한과 백업 정책을 고려해야 한다. * 이 기능은 족보 아카이브, 정보 공유 게시판, 공지사항, 활동 사진 앨범에서 공통으로 사용될 수 있다.
작업 내용
완료 조건
참고 사항
MVP에서는 Cloudflare R2를 사용하지 않고 iwinv 서버 로컬 디스크에 파일을 저장한다.
추천 저장 경로 예시는
/var/dcom/uploads하위에 도메인별 디렉토리를 두는 방식이다.예시 경로:
/var/dcom/uploads/jokbo/var/dcom/uploads/information/var/dcom/uploads/announcements/var/dcom/uploads/albums서버 디스크 용량이 제한적이므로 파일 크기 제한과 백업 정책을 고려해야 한다.
이 기능은 족보 아카이브, 정보 공유 게시판, 공지사항, 활동 사진 앨범에서 공통으로 사용될 수 있다.