결과물
기존에 임의로 작성한 데이터를 지우고, 몽고 DB와 연결한다.
목표
MVC 모델에 대해 이해한다.
mongoDB와 Wetube애플리케이션을 연결한다.
동영상에 대한 모델(데이터)인 Video.js파일 작성
코드
db.js
import dotenv from "dotenv";
import mongoose from "mongoose";
dotenv.config();
mongoose.connect(process.env.MONGO_URL, {
useNewUrlParser: true,
useFindAndMdify: false,
});
const db = mongoose.connection;
const handleOpen = () => console.log("✅Connected to DB");
const handleError = (error) => console.log(`❌Error on DB connection:${error}`);
db.once("open", handleOpen);
db.on("error", handleError);
dotenv.js
MONGO_URL="mongodb://localhost:27017/we-tube"
PORT = 4000
init.js
import app from "./app.js";
import dotenv from "dotenv";
dotenv.config();
import "./models/comment";
const PORT = process.env.PORT || 4000;
const handleListening = () =>
console.log(`✅Listening on: http://localhost:${PORT}`);
app.listen(PORT, handleListening);
mongoDB와 mongoose, dotenv 가 설치되었다는 가정 하의 코드입니다.
-
mongoose를 import 한다.
-
Dotenv.js에서 mongoDB의 포트번호(27017)와 데이터 이름(we-tube)을 입력한다.
-
dotenv를 import한다.
-
mongodb에서 계속 물어보는 설정이기 때문에, useNewurlParser, useFindAndMdify에 대한 설정을 미리한다.
-
DB와 연결되었을 경우, 연결에 실패할 경우에 대한 콘솔로그를 작성한다.
-
db once와 db on을 설정한다.
-
앱이 시작될 때, mongoDB가 실행되도록 Init.js에서 db.js, dotenv를 import한다.
-
기존의 port는 dotenv에 저장된 port를 사용하도록 함수를 지정하고 뻑?날 경우 || 4000 구문을 이용해 포트연결되도록 한다.
Models/video.js
import mongoose from "mongoose";
const videoSchema = new mongoose.Schema({
fileUrl: {
required: "File URL is required",
},
title: {
required: "Title is required",
},
view: {
},
createdAt: {
},
comments: [
{
type: mongoose.Schema.Types.ObjectId,
},
],
});
const model = mongoose.model("Video", videoSchema);
schema란?
일반적으로 데이터의 물리적 저장형태를 기술한 것을 의미한다.
데이터베이스를 저장한 변수 정도로 생각해도되는건가..?
mongoDB의 경우 문서지향 데이터베이스이기 때문에, 아무거나 막 넣어도 에러가 발생 안한다.
그러나 아무거나 막 들어가서 생기는 문제를 막기위해, 스키마를 도입했다.
스키마 내부에 저장한 형태 이외의 데이터가 들어가면, 스키마에서 에러를 발생시킨다.
wetube의 video.js의 경우, 파일url, 타이틀, 은 문자열(string), 조회수는 숫자, 작성일은 date.now함수를 이용해 자동 작성되도록 하였습니다.
comments는 다음글에서 설명
배운점
MVC모델
MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.
어플리케이션을 각각 데이터/인터페이스/로직으로 나누어 관리가 편하도록 하는 설계 방법.
Model
어플리케이션의 데이터를 의미한다.
Wetube의 경우, 애플리케이션 내 동영상 리스트, 제목, 설명, 유저의 정보 등의 데이터들이 해당된다.
모델에는 뷰나 컨트롤러에 대한 내용이 없고 오직 데이터반 반환/설정한다.
View
어플리케이션의 유저 인터페이스를 의미한다.
화면에 보여지는 아이콘, 입력폼, 클릭버튼 등이 해당된다.
뷰에는 모델이 맡고있는 데이터에 대한 내용이 없고 오직 UI에 대한 내용만 송출한다.
Controller
어플리케이션의 로직을 의미한다.
사용자가 UI를 통해 어떤 동작을 수행하면, 일어나는 이벤트를 관장한다.
읽어본 글
MVC패턴
스키마