본문으로 건너뛰기

Files-Upload-Strategies

1 파일 업로드 전략 개요

  • 파일 업로드 전략은 다양하며, 각 프로젝트의 요구사항에 따라 적절한 전략을 선택해야 합니다.
  • 주요 전략들은 다음과 같습니다
    • Direct Upload (서버 직접 업로드)
    • Server-Side Cloud Upload (서버 측 클라우드 업로드)
    • Client-Side Cloud Upload (클라이언트 측 클라우드 업로드)

2 서버 직접 업로드 전략

2.1 작동 방식

  • 사용자가 멀티파트 폼을 통해 서버로 파일/이미지를 직접 업로드합니다.
  • 서버는 파일을 검증한 후 로컬 하드 드라이브에 저장합니다.

2.2 장점

  • 구현이 간단합니다 (예: Node.js의 Multer 패키지 사용).
  • 추가 인프라 없이 빠르게 구축 가능합니다.
  • 소규모 프로젝트나 프로토타입에 적합합니다.

2.3 단점

  • 확장성(Scalability) 문제:
    • 서버 하드 디스크 용량의 제한
    • 다중 서버 환경에서 부하 분산의 어려움
  • 가용성(Availability) 문제:
    • 서버 장애 시 파일 접근 불가능
  • 백업과 복구의 복잡성
  • CDN 통합의 어려움

2.4 확장성 문제 해결 방안

  • Consistent hashing 또는 Rendezvous hashing 사용
  • 서버 간 공유 하드 드라이브 사용

3 서버 측 클라우드 업로드 전략

3.1 작동 방식

  1. 클라이언트가 서버로 파일을 업로드합니다.
  2. 서버가 파일을 임시로 저장합니다.
  3. 서버가 해당 파일을 클라우드 스토리지(예: AWS S3)에 업로드합니다.
  4. 서버가 클라우드 스토리지의 파일 URL을 데이터베이스에 저장합니다.

3.2 장점

  • 첫 번째 전략보다 확장성이 뛰어납니다.
  • 서버 간 파일 공유가 용이합니다.

3.3 단점

  • 서버 리소스를 사용하여 파일을 업로드합니다.

3.4 개선 방안

  • 이미지 업로드 프로세스를 사용자 요청에서 분리(디커플링)
  • 큐를 사용한 비동기 처리로 최종 일관성 확보

4 클라이언트 측 클라우드 업로드 전략

  • Pre-signed URL을 사용하여 클라이언트가 클라우드 스토리지에 직접 업로드합니다.

4.1 작동 방식

  • 클라이언트가 서버에 파일 업로드를 위한 서명된 URL을 요청합니다.
    • 클라이언트는 파일 타입, 크기, 향후 연결될 리소스 정보 등을 포함할 수 있습니다.
  • 서버가 AWS S3에 서명된 URL(pre-signed URL) 생성을 요청합니다.
    • 서버는 AWS SDK를 사용하여 S3에 서명된 URL 생성을 요청합니다.
    • 이 URL에는 파일 업로드 권한, 만료 시간, 허용된 파일 크기 등의 정보가 포함됩니다.
  • AWS S3가 서명된 URL을 생성하여 서버에 반환합니다.
  • 서버가 생성된 서명된 URL을 클라이언트에 제공합니다.
  • 클라이언트가 이 서명된 URL을 사용하여 직접 AWS S3에 파일을 업로드합니다.
    • 이 과정에서 서버는 관여하지 않으며, 클라이언트와 S3 간 직접 통신이 이루어집니다.
  • AWS S3가 파일 업로드를 처리하고, 성공 여부를 클라이언트에 응답합니다.
  • 업로드 완료 후, 클라이언트가 서버에 리소스 생성/수정 요청을 보냅니다.
    • 이 요청에는 업로드된 파일의 S3 URL 또는 키(key)가 포함됩니다.
  • 서버가 S3에 파일 존재 여부와 메타데이터를 확인합니다.
    • 필요한 경우 서버는 S3 SDK를 사용하여 파일을 다른 위치로 이동하거나 추가 처리를 수행할 수 있습니다.
  • 서버가 파일 검증을 수행합니다 (선택적).
    • 파일 형식, 크기, 내용 등을 확인할 수 있습니다.
  • 서버가 리소스를 생성/수정하고 데이터베이스에 파일 정보를 기록합니다.
    • 이 정보에는 S3 URL, 파일 메타데이터, 연관된 리소스 정보 등이 포함될 수 있습니다.
  • 서버가 처리 결과를 클라이언트에 응답합니다.

4.2 장점

  • 서버의 이미지 업로드 처리 부하가 없습니다.

4.3 단점

  • Pre-signed URL의 적절한 만료 시간 설정 필요
  • CORS(Cross-Origin Resource Sharing) 설정 주의 필요