인프런 커뮤니티 질문&답변

똑같이썼는데안돼님의 프로필 이미지

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

크롤링 2 - Puppeteer

조언 부탁드립니다. mini-project

해결된 질문

작성

·

385

·

수정됨

1

현재 puppeteer-crawling해서

스타벅스메뉴와 이미지는 잘 긁어 왔는데요.

자꾸 MongoDB에 저장되어 있는 img를 불러올 때

에러가 발생하는데, 성공하신 분 있나요?

스키마에서 이미지 형식을 Buffer

했습니다.

import mongoose from "mongoose";

const StarbucksSchema = new mongoose.Schema({
  name: String,
  img: Buffer,
});

export const Starbucks = mongoose.model("Starbucks", StarbucksSchema);


  //이미지 URL로부터 이미지 다운로드
    if (!fs.existsSync("img_crawling")) {
      fs.mkdirSync("img_crawling");
    }
    let fileName = `img_crawling/${menuName}.jpg`;
    request(menuImage).pipe(fs.createWriteStream(fileName));
    console.log(`이미지 ${fileName} 저장 완료`);

 

저는 fs모듈과 request모듈을 추가로 사용했는데,

이미지의 주소를 MongDB에 저장하고,

이미지는 별도의 폴더에 저장되게 만들었습니다.


질문 요약
1. MongDB에 이미지 저장할 때 fs라이브러리와 request라이브러리를 사용하게 맞나요?

2. 이미지를 저장은 잘 됐는데, 화면에 뿌려 줄려고 하는데 자꾸 에러가 나요.

제출용.jpg

3.몽고DB에 접속해서 이미지 주소를 가져와서, 그 주소를 기반으로 뿌려줘야 되는지

4.아니면 몽고DB에 접속해서 그 메타주소(?)를 기반으로 현재 컴퓨터에 저장된 이미지를 화면에 뿌려줘야 하는지

자꾸 구글링하면 몽고DB에 이미지파일을 직접적으로

저장하는 것은 DB에 무리를 일으킨다. 그래서 어떠한

라이브러리를 사용해서 DB에는 메타주소(?)만을 저장하고,

이미지파일을 별도의 localStorage에 저장한다.

또한 이미지를 그냥 가져(load) 올 수 없어서 인코딩을 해줘야 한다.

뭔 말인지 모르겠어요 ㅠ.ㅠ

답변 1

0

안녕하세요. 똑같이썼는데안돼님

해당 미니 프로젝트 과제에서는 이미지 파일을 직접 저장하지 않고, 강의에서 학습한 크롤링을 활용하여 이미지 태그가 가지고 있는 url만 데이터 베이스에 저장해야 합니다. 크롤링 시 이미지 태그 안의 url을 가져와 저장하는 방법을 고민해 보세요.

또한 데이터 베이스에 저장된 url을 API 응답에 잘 담기도록 작성해 준다면, 이후 과정은 프론트엔드 폴더 내부에서 처리중이니 해당 폴더의 menu.js 파일을 읽어보며 로직을 이해, 남은 과정을 수행해 보시길 바랍니다. 감사합니다.