사용자가 업로드한 이미지를 저장하는 방법에는 크게 두가지가 있음.
- 로컬 서버
- 클라우드 기반 서비스 (ex. cloudflare, S3)
장단점
- 로컬 서버에 이미지 저장
장점 1. 간단한 구현 • 로컬 파일 시스템에 이미지를 저장하는 방식은 구현이 간단하며, 추가적인 외부 서비스 설정이 필요 없습니다. 2. 비용 절감 • 별도의 클라우드 스토리지 비용이 들지 않아 초기 비용이 적게 듭니다. 3. 빠른 접근 • 서버 내부에서 이미지를 바로 읽고 쓸 수 있어 네트워크를 통한 데이터 전송 지연이 없습니다. 4. 데이터 제어 • 데이터가 외부에 노출되지 않으므로 보안 관리가 용이합니다. 단점 1. 확장성 부족 • 서버의 저장 용량이 제한적이며, 대량의 이미지 데이터를 처리할 경우 용량 부족 문제가 발생할 수 있습니다. 2. 백업 및 복구 어려움 • 물리적 장애(디스크 손상, 자연재해 등)에 취약하며, 백업 및 복구 작업이 복잡합니다. 3. 성능 저하 • 서버에 저장된 데이터가 많아질수록 I/O 성능 저하와 함께 서버 부하가 증가할 수 있습니다. 4. 전송 속도 제한 • 사용자가 다른 지역에 있을 경우, 이미지 전송 속도가 느려질 수 있습니다.
- cloudflare
장점 1. 확장성과 안정성 • Cloudflare는 대규모 데이터를 처리할 수 있는 확장성과 안정성을 제공합니다. 저장 공간을 쉽게 확장할 수 있어 대량의 이미지 데이터를 처리하기 적합합니다. 2. 이미지 최적화 • Cloudflare Images는 자동으로 이미지를 최적화하여 다양한 디바이스와 브라우저에 적합한 형식으로 제공합니다. 예를 들어, 리사이징, 워터마크 추가 등의 기능을 지원합니다. 3. 전역 CDN 제공 • Cloudflare는 전 세계 330개 이상의 데이터 센터를 통해 이미지를 캐싱하고 제공하여 사용자에게 빠른 응답 속도를 보장합니다. 4. 보안 강화 • 서명된 URL(Signed URL)을 사용하여 인증된 사용자만 이미지에 접근하도록 설정할 수 있습니다. 5. 비용 효율성 • 사용량 기반 요금제와 저렴한 가격으로 대규모 이미지 관리를 지원합니다(예: 10만 개 이미지를 호스팅하는 데 월 $5). 단점 1. 의존성 증가 • 외부 서비스에 의존하므로 Cloudflare 서비스 중단 시 데이터 접근이 제한될 수 있습니다. 2. 네트워크 의존성 • 인터넷 연결 상태에 따라 업로드 및 다운로드 속도가 영향을 받을 수 있습니다. 3. 복잡한 설정 • API 토큰 발급, 업로드 URL 생성 등 초기 설정 과정이 로컬 저장 방식보다 복잡합니다. 4. 비용 발생 • 무료로 사용할 수 있는 용량은 제한적이며, 추가 용량이나 고급 기능 사용 시 비용이 발생합니다.
⇒ Cloudflare는 주로 인터넷 보안 및 성능 최적화에 중점을 둔 플랫폼이며, R2 서비스를 통해 비용 효율적인 객체 스토리지 옵션을 제공
- Amazon S3는 AWS 생태계와의 통합성과 다양한 스토리지 옵션으로 복잡한 요구사항을 충족시킬 수 있음
따라서 사용자는 프로젝트 요구사항(예: 비용 절감 vs 복잡한 통합)을 기준으로 적절한 서비스를 선택
- 로컬 서버에 저장 코드
export async function POST(req) { const formData = await req.formData(); const file = formData.get('file'); if (file) { const buffer = Buffer.from(await file.arrayBuffer()); const filePath = path.join(process.cwd(), 'public/uploads', file.name); fs.writeFileSync(filePath, buffer); return new Response(JSON.stringify({ url: `/uploads/${file.name}` }), { status: 200 }); } }
- cloudflare 방법
Cloudflarea 계정 만들기 - 로그인 - Images - Overview - 결제 - Use API - Get an API create API token here - Create Token - Read and write to Cloudflarae Stream and Images (Use template 버튼) - Analytics 는 삭제 - Continue to summary - Create Token - copy - .env 파일에 붙여넣기 Images - Overview - Account ID, Account hash 도 복사해서 .env 파일에 붙여 넣는다.