백엔드에서 이미지 업로드 방법

MIN·2025년 3월 29일

weekly

목록 보기
13/31

개요

백엔드 서버에서 이미지 업로드는 클라이언트가 이미지를 서버로 전송, 저장하고 클라이언트에게 적절한 응답을 보내는 방식으로 이루어집니다. 업로드 방법에는 여러 가지가 있다.


  1. DB에 저장하는 방식
    데이터베이스에 저장하는 방식이며, 이미지파일을 바이너리 오브젝트 형태로 저장하거나, 인코딩하여 텍스트로 저장이 가능하다.
const multer = require('multer');
// multer 모듈을 임포트해준다.
const storage = multer.memoryStorage(); 
//multer의 MemoryStorage소드를 활용해 데이터베이스에 저장이가능하다.
app.post('/upload', upload.single('image'), async (req, res) => 
//이후 경로를 지정하고 로직을 구성하면 이미지 업로드가 가능

2.로컬 파일 시스템에 저장하는 방식

const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, "uploads/"); 
  },
  filename: (req, file, cb) => {
    cb(null, Date.now() + path.extname(file.originalname)); 
  },
});

로컬에 저장하는 방식은 diskStorage메소드를 활용하면 되고
destination: 파일을 저장할 디렉토리 경로를 지정
filename: 저장될 파일의 이름을 설정


3.클라우드 방식
클라우드 방식으로는 Amazon S3(Simple Storage Service)는 아마존 웹 서비스에서 제공하는 클라우드 스토리지 서비스가 있다.
S3 : 파일, 데이터 및 다양한 유형의 미디어 등을 저장하고 관리하는 데 사용되는 웹 기반 스토리지 시스템

const s3 = new AWS.S3({
  accessKeyId: process.env.AWS_ACCESS_KEY_ID,
  secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  region: 'us-east-1',
});
// 아마존 s3에 접근하기위해 객체를 만드는 부분
// accesskeyId는 API를 호출하기 위한 키, 시크릿키는 엑세스 키와함께 인증용도
onst upload = multer({
  storage: multerS3({
    s3: s3, // s3객체를 사용
    bucket: 'your-bucket-name', // s3의 버킷 설정부분
    acl: 'public-read', //읽기 권한 
    key: (req, file, cb) => { 
      cb(null, Date.now().toString() + file.originalname); 
    },// 파일 저장 경로와 이름 설정
  }),
});
// 

장단점

  • DB방식
    - 파일 크키가 커질수록 DB성능 저하
    - DB접근제어시 이미지도 같이 제어 가능
    - 이미지 파일 용량을 많이 차지할 수 있음
  • 로컬
    - 직접 접근하기에 속도 빠름
    - 파일 경로에 대해서 접근권한은 따로 관리 필요
    - DB용량에 부담이 없음
  • 클라우드
    - 클라우드에 저장하는 용량 만큼만 비용 지불하기에 효율적
    - 콘텐츠 전송 네트워크(CDN)로 인해 접근 빠름
    - 클라우드 서비스자체에서 보안 기능이 고도화 되어있어 보안에 강함
    - 다양한 포맷과 호환이 가능하다.

0개의 댓글