IT Developer/Node.js

Node.js 기초 <14. 클라우드 스토리지(AWS S3, Firebase)와 파일 업로드>

TEMA_ 2025. 3. 16. 15:56
반응형

노드 Node.js

14. 클라우드 스토리지(AWS S3, Firebase)와 파일 업로드 

 

안녕하세요! 태마입니다.

Node.js 기초 강좌입니다.

 

강좌의 경우 

1. 주제 간단 정리

2. 상세 주제 정리

으로 이루어져 있습니다.

 

노드 Node.js

포스팅 시작하겠습니다 :)

 

 

 


 

1. 주제 간단 정리

 

1. 클라우드 스토리지가 필요한 이유

로컬 서버에 파일을 저장하는 것은 용량 제한과 관리 문제로 인해 비효율적입니다.
따라서 AWS S3, Firebase Storage 같은 클라우드 스토리지를 활용하면 더 안정적이고 확장성 있는 파일 관리를 할 수 있습니다.

📌 클라우드 스토리지를 사용하면?
대량의 파일 저장 가능 → 서버 용량에 구애받지 않음
CDN(Content Delivery Network) 지원 → 이미지, 동영상 로딩 속도 향상
보안 및 접근 제어 가능 → 공개/비공개 파일 설정 가능


 

2. AWS S3 vs Firebase Storage 비교

AWS S3 (Amazon Simple Storage Service)
대용량 파일 저장 가능
파일 접근 권한 설정 가능 (퍼블릭, 프라이빗)
EC2, Lambda, CloudFront 등 AWS 서비스와 연동 용이

Firebase Storage
모바일/웹 앱과 손쉬운 연동 (Firebase SDK 지원)
Google Cloud 기반의 빠른 데이터 전송
무료 사용량 제공 (월 5GB 저장, 1GB 다운로드)

📌 웹 애플리케이션에서는 AWS S3가 많이 사용되며, 모바일 앱과의 연동에는 Firebase Storage가 유리!

✅ 여기까지 클라우드 스토리지의 개념과 비교를 배웠습니다!
👉 "그렇다면, Node.js에서 AWS S3와 Firebase Storage를 어떻게 연동할까?"
2부에서 AWS S3와 Firebase Storage를 활용한 파일 업로드 방법을 배워봅시다!

반응형

 

2. 상세 주제 정리

 

1. AWS S3를 활용한 파일 업로드

1) AWS S3 설정 및 패키지 설치
1️⃣ AWS IAM 계정 생성 후 S3 접근 권한 설정
2️⃣ 버킷(Bucket) 생성 후 퍼블릭/프라이빗 설정
3️⃣ Node.js 프로젝트에서 aws-sdk 설치

$ npm install aws-sdk multer multer-s3

2) AWS S3와 Node.js 연동 코드

const AWS = require("aws-sdk");
const multer = require("multer");
const multerS3 = require("multer-s3");

AWS.config.update({
  accessKeyId: process.env.AWS_ACCESS_KEY_ID,
  secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  region: "us-east-1" // 본인의 S3 버킷 지역 입력
});

const s3 = new AWS.S3();

const upload = multer({
  storage: multerS3({
    s3,
    bucket: "my-s3-bucket",
    acl: "public-read", // 파일을 공개 설정 (또는 "private")
    key: (req, file, cb) => {
      cb(null, `uploads/${Date.now()}-${file.originalname}`);
    }
  })
});

const express = require("express");
const app = express();

app.post("/upload-s3", upload.single("file"), (req, res) => {
  res.json({ fileUrl: req.file.location });
});

app.listen(3000, () => console.log("AWS S3 파일 업로드 서버 실행 중"));

📌 업로드된 파일은 AWS S3의 uploads/ 폴더에 저장되며, URL을 반환!

3) 업로드된 파일 URL을 반환하는 API 응답 예시

{
  "fileUrl": "https://my-s3-bucket.s3.amazonaws.com/uploads/167892301-file.jpg"
}

📌 CDN을 활용하여 빠르게 파일을 제공 가능!


2. Firebase Storage를 활용한 파일 업로드

1) Firebase 프로젝트 설정 및 패키지 설치
1️⃣ Firebase Console에서 프로젝트 생성
2️⃣ Firebase Storage 사용 설정
3️⃣ Node.js 프로젝트에서 firebase-admin 설치

$ npm install firebase-admin

2) Firebase Storage와 Node.js 연동 코드

const admin = require("firebase-admin");
const multer = require("multer");
const { Storage } = require("@google-cloud/storage");

admin.initializeApp({
  credential: admin.credential.cert(require("./firebase-key.json")),
  storageBucket: "my-firebase-bucket.appspot.com"
});

const storage = new Storage();
const bucket = storage.bucket("my-firebase-bucket.appspot.com");

const upload = multer({ storage: multer.memoryStorage() });

const express = require("express");
const app = express();

app.post("/upload-firebase", upload.single("file"), (req, res) => {
  const file = bucket.file(`uploads/${Date.now()}-${req.file.originalname}`);
  const stream = file.createWriteStream({ metadata: { contentType: req.file.mimetype } });

  stream.on("error", (err) => res.status(500).json({ error: err.message }));
  stream.on("finish", async () => {
    await file.makePublic(); // 파일을 공개로 설정
    res.json({ fileUrl: `https://storage.googleapis.com/${bucket.name}/${file.name}` });
  });

  stream.end(req.file.buffer);
});

app.listen(3000, () => console.log("Firebase 파일 업로드 서버 실행 중"));

📌 Firebase Storage에 업로드 후, 파일 URL을 반환!

3) 업로드된 파일 URL을 반환하는 API 응답 예시

{
  "fileUrl": "https://storage.googleapis.com/my-firebase-bucket/uploads/167892301-file.jpg"
}

📌 Firebase를 사용하면 Google Cloud와 쉽게 연동 가능!


3. AWS S3 vs Firebase Storage 선택 가이드

AWS S3를 선택해야 하는 경우
웹 애플리케이션에서 대량의 파일을 저장해야 하는 경우
CDN(CloudFront)과 연동하여 빠른 파일 제공이 필요한 경우
기업용 서비스에서 확장성이 필요한 경우

Firebase Storage를 선택해야 하는 경우
모바일 앱과 쉽게 연동해야 하는 경우 (Firebase SDK 지원)
Google Cloud 서비스를 함께 사용할 계획이 있는 경우
무료 사용량(5GB 저장, 1GB 다운로드) 내에서 간단한 서비스 운영

📌 웹 서비스에는 AWS S3, 모바일 앱 서비스에는 Firebase Storage가 적합!


✅ 여기까지 AWS S3와 Firebase Storage를 활용한 파일 업로드 방법을 배웠습니다!
👉 "그렇다면, Node.js에서 백그라운드 작업을 수행하려면 어떻게 할까?"
다음 회차에서 Bull을 활용한 작업 큐(Queue) 시스템을 배워봅시다!

 

 

반응형