노드 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) 시스템을 배워봅시다!
'IT Developer > Node.js' 카테고리의 다른 글
Node.js 기초 <18. 중앙 집중형 로그 관리와 APM(Application Performance Monitoring)> (0) | 2025.03.20 |
---|---|
Node.js 기초 <17. API 게이트웨이(API Gateway)와 서비스 관리> (0) | 2025.03.19 |
Node.js 기초 <16. 마이크로서비스 아키텍처(MSA)와 RabbitMQ 활용> (0) | 2025.03.18 |
Node.js 기초 <15. 작업 큐(Queue)와 백그라운드 작업 처리 (Bull 활용)> (1) | 2025.03.17 |
Node.js 기초 <13. 파일 업로드와 이미지 처리 (multer 활용)> (0) | 2025.03.15 |
Node.js 기초 <12. Express의 미들웨어와 요청 처리 흐름> (0) | 2025.03.14 |
Node.js 기초 <11. 인증과 보안: JWT, OAuth, 세션 관리> (0) | 2025.03.13 |
Node.js 기초 <10. 웹소켓(WebSocket)과 실시간 데이터 처리> (1) | 2025.03.12 |