
Q. 백엔드 서버에서 이미지 업로드를 구현하는 다양한 방식에 대해 설명해 주세요.
이미지를 서버의 디스크(폴더)에 저장한다.
이미지 URL을 DB에 저장하여 접근 가능하다.
빠르게 구현 가능하다.
작은 프로젝트나 테스트에 적합하다.
Node.js + multer (Express 미들웨어)
Python Flask + werkzeug
PHP + move_uploaded_file()
구현 간단, 추가 인프라 불필요하다.
인터넷 연결 없이 동작 가능하다.
서버가 재배포되면 이미지 소실 가능하다.
확장성 부족하다. (서버 여러 대일 경우 공유 어려움)
백업, 보안 관리 어려움이 있다.
AWS S3, Google Cloud Storage, Azure Blob 등에 저장한다.
클라이언트가 직접 업로드하거나, 백엔드가 중계한다.
서버 업로드 방식
클라이언트 → 서버 → S3
서버가 S3 SDK로 이미지 업로드
프리사인드 URL 방식 (권장)
클라이언트가 백엔드에 요청
서버가 S3에 업로드 가능한 일회용 URL 발급
클라이언트가 해당 URL에 직접 이미지 업로드
고가용성, 대용량 지원한다.
서버 부하 감소 (프리사인드 방식)
URL 접근 제어 가능하다.
클라우드 계정 필요 (비용 발생)
권한 설정, 보안 구성 필요하다.
백업/복구 일괄 가능하다. (이미지 포함)
일관된 저장/조회 API 구성
DB 성능 저하 (용량 커질수록)
CDN 캐싱 등 어려움이 있다.
이미지 업로드 후 CDN(Content Delivery Network)과 연동한다.
빠른 이미지 전송을 위해 전 세계 서버에서 캐싱
이미지 저장 위치는 클라우드 (예: S3)
CDN (CloudFront, Cloudflare 등)을 통해 배포한다.
빠른 응답 속도, 지연 최소화
글로벌 서비스에 유리하다.
CDN 설정 복잡할 수 있다.
캐시 무효화 정책 필요하다.
| 항목 | 설명 |
|---|---|
| 보안 | 확장자 검사, 크기 제한, 인증 처리 |
| 성능 | 압축, 썸네일 생성, 이미지 리사이징 |
| 확장성 | 서버 분리, 클라우드 사용 고려 |
| URL 관리 | DB에 경로 저장, CDN 경로 관리 |
| 조건 | 추천 방식 |
|---|---|
| 빠른 개발, 단일 서버 | 로컬 저장 + multer |
| 안정성, 스케일, 보안 | S3 + 프리사인드 URL |
| 민감한 데이터 통제 | BLOB + DB 보안 적용 |
| 글로벌 서비스 | S3 + CDN 구성 |