Skip to content

[BE] 로컬 파일 업로드 및 다운로드 처리 구현 #13

Description

@SJA-03

작업 내용

  • 업로드된 파일을 iwinv 서버 로컬 디스크에 저장하는 구조를 구현한다.
  • 파일 저장 경로를 도메인별로 분리한다.
  • 파일명 충돌을 방지하기 위해 저장 파일명을 UUID 기반으로 생성한다.
  • DB에는 파일 자체가 아니라 파일 경로와 메타데이터를 저장할 수 있도록 한다.
  • 업로드된 파일을 다운로드할 수 있는 API를 구현한다.
  • 파일 접근 시 권한 및 존재 여부를 검증한다.
  • 파일 크기와 허용 확장자 제한을 적용할 수 있는 구조를 준비한다.

완료 조건

  • 파일 업로드 시 서버 로컬 디스크에 파일이 저장된다.
  • 도메인별 저장 경로가 분리되어 있다.
  • 저장 파일명이 중복되지 않도록 처리된다.
  • DB에 원본 파일명, 저장 파일명, 파일 경로, MIME 타입, 파일 크기가 저장된다.
  • 파일 다운로드 API가 구현되어 있다.
  • 존재하지 않는 파일 요청 시 적절한 에러 응답을 반환한다.
  • 허용되지 않은 파일 형식에 대한 검증 구조가 준비되어 있다.
  • 파일 크기 제한을 적용할 수 있는 구조가 준비되어 있다.

참고 사항

  • MVP에서는 Cloudflare R2를 사용하지 않고 iwinv 서버 로컬 디스크에 파일을 저장한다.

  • 추천 저장 경로 예시는 /var/dcom/uploads 하위에 도메인별 디렉토리를 두는 방식이다.

  • 예시 경로:

    • /var/dcom/uploads/jokbo
    • /var/dcom/uploads/information
    • /var/dcom/uploads/announcements
    • /var/dcom/uploads/albums
  • 서버 디스크 용량이 제한적이므로 파일 크기 제한과 백업 정책을 고려해야 한다.

  • 이 기능은 족보 아카이브, 정보 공유 게시판, 공지사항, 활동 사진 앨범에서 공통으로 사용될 수 있다.

Metadata

Metadata

Assignees

Labels

phase:mvpIncluded in MVP scopetype:featureNew feature implementation

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions