JSON 키 파일을 프로젝트로 복사했다면, 이제 콘솔을 실행해 NodeBird 프로젝트로 이동한 후 multer에서 클라우드 스토리지로 이미지를 업로드할 수 있게 해주는 multer-google-storage 패키지를 설치합니다.

    Warning 과금 요소

    클라우드 스토리지를 사용하면 데이터를 저장할 때와 저장된 데이터를 로드할 때 과금됩니다. 초반에는 GCP에서 제공하는 300달러 크레딧을 사용하므로 과금되지 않습니다. 하지만 1년이 지나거나 300달러를 모두 소진하면 과금되기 시작하므로 이 예제를 실습한 후에는 반드시 버킷 안의 데이터를 지우길 바랍니다.

    콘솔

    $ npm i multer-google-storage

    multer-google-storage를 사용하도록 routes/post.js와 controllers/post.js를 수정합니다.

    nodebird/routes/post.js

    const express = require('express');
    const multer = require('multer');
    const fs = require('fs');
    const multerGoogleStorage = require('multer-google-storage');
    
    const { afterUploadImage, uploadPost } = require('../controllers/post');
    const { isLoggedIn } = require('../middlewares');
    
    const router = express.Router();
    
    try {
      fs.readdirSync('uploads');
    } catch (error) {
      console.error('uploads 폴더가 없어 uploads 폴더를 생성합니다.');
      fs.mkdirSync('uploads');
    }
    
    const upload = multer({
      storage: multerGoogleStorage.storageEngine({
        bucket: 'nodebird3',
        projectId: 'node-deploy-358509',
        keyFilename: 'node-deploy-358509-a2917cd5849c.json',
        filename: (req, file, cb) => {
          cb(null, `original/${Date.now()}_${file.originalname}`);
        },
      }),
      limits: { fileSize: 5 * 1024 * 1024 },
    });
    ...

    nodebird/controllers/post.js

    const { Post, Hashtag } = require('../models');
    
    exports.afterUploadImage = (req, res) => {
      console.log(req.file);
      res.json({ url: req.file.path });
    };
    ...
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.