Skip to content

2022 서버시스템구축실습 프로젝트

Notifications You must be signed in to change notification settings

hyeon-b/Mechurial_project

 
 

Repository files navigation

Mechurial_project

Description

메추리알이란, 사용자가 원하는 사이트의 URLKeyword, 그리고 알림조건을 입력하게 되면 주기적으로 크롤링을 통해 원하는 조건에 맞는 글이 업로드 되면 회원가입시 설정한 메일로 알림이 가는 서비스 입니다.

High Level Diagram

서비스 전체 HLD

Environment

Google Cloud Platform의 VM Instance를 사용중입니다.

OS: Ubuntu [20.04LTS]

Node.js: v16.15.1

npm: v8.11.0

Installation

1. VM Instance에서 Node.js 설치

sudo apt-get update 
sudo apt-get upgrade 
sudo apt-get install build-essenial

Node.js 설치

wget https://nodejs.org/dist/v16.15.1/node-v16.15.1-linux-x64.tar.xz

압축해제 및 설정

tar xf node-v16.15.1-linux-x64.tar.xz
cd node-v16.15.1-linux-x64
sudo cp -Rvi ./{bin,include,lib,share} /usr/local/

2. Ubuntu에서 puppeteer를 실행시키기 위한 패키지들 설치

sudo apt-get install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libnss3 lsb-release xdg-utils wget
sudo apt-get install libgtk2.0-0 libgtk-3-0 libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb libgbm-dev

3. 서버를 실행시키기 위한 준비 과정

package.json, package-lock.json가 존재한다면

npm install

package.json, package-lock.json가 존재하지 않는다면

npm init
npm i -S express express-ejs-layouts express-session sequelize mysql2 http-status-codes dotenv ejs @sendgrid/mail puppeteer cheerio node-cron bcrypt

How to Run

  • .env 파일에 DB_USER, DB_PW, DB_NAME, DB_HOST 를 먼저 채워주세요.
  • mysql에서 아래 명령어를 통해 사용할 db를 생성해주세요.
create database DB_NAME명

이후 권한 오류가 발생한다면, mysql에 아래 명령어를 입력해주세요.

grant all on DB_NAME명.*to 'DB_USER명'@'%';

서버를 실행시키기 위해 아래 명령어를 입력해주세요.

sudo node main

Crawling

크롤링 과정 소개

크롤링 전체 과정 :  url 크롤링 html 파일로 저장 + 키워드와 조건만족 여부 확인 + 만족시 사용자에게 메일 전송 & DB에서 인스턴스 삭제

등록추가 UML

sequenceDiagram
userInput ->> userTBL: 회원 정보를 등록한다.
userInput ->> registerTBL: 알림을 등록한다.
userTBL ->> registerTBL: 회원 아이디를 외래키로 갖는다. 
registerTBL ->> pageTBL: 회원이 등록한 url을 보낸다. 
pageTBL-->> pageTBL: 기존에 갖고 있는 url과 일치하는지 비교한다. 
pageTBL--x pageTBL: 일치한다면 저장하지 않는다.
pageTBL->> pageTBL: 일치하지 않는다면 저장한다. 
Loading

About

2022 서버시스템구축실습 프로젝트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • EJS 46.0%
  • CSS 33.3%
  • JavaScript 20.7%