Mongoose에 대해 알아 보자
mongoose
는 node.js
와 mongoDB
를 이어주는 다리이다. 많은 사람, 많은 기업에서 mongoose
를 사용한다.
mongoDB
를 사용하고 그 작업을 javaScript
를 쓴다면 mongoose
는 필수 사항이다.
javaScript
로 작성을 하면 mongoose
가 mongoDB
에게 전해 준다.
validation
할수 있고, query building
도 할 수 있고,hook
도 있고, mongoose
로
아주 많은 것을 할 수 있다.
node.js
에서 mongoDB
와 상호작용하기 위해서 mongoose
를 사용하는거다.
mongoose
를 설치하기전에 mongoDB
가 설치가 잘 되었는지 확인해야 한다.
terminal
을 열어서 mongod
라고 치면 된다. 에러가 아닌 어떠한 메세지가 뜬다면 잘 되고 있다는 거라고 생각하자.
만약 'mongod command not found'
라든지 'mongod is not a command'
같은 메세지가 뜨다면 제대로 설치가 안된거다.
설치가 된걸 확인 했다면 이제 터미널에 'mongo'
라고 쳐보자.
그러면 'mongoDB shell'
이랑 연결을 해준다. mongoDB
와 대화 할수 있다는 뜻이다.
그럼 이제 mongoDB
안에 명령어를 쓰는게 가능해진다.
'help'
라고 쳐보자. 그러면 mongoDB
가 가지고 있는 명령어들을 볼 수 있다.
showdbs
라는 명령어를 쳐보자. 데이터를 받고 있는걸 보여준다.
기본적인 것들은 추후에 알면 되고 일단 exit를 쳐서 나간다.
이제
mongoose
를 설치해 보자.
https://www.npmjs.com/package/mongoose 사이트로 가서 확인해보고
vsc에 터미널에서 npm i mongoose
입력해 주면 설치가 된다.
src폴더 안에 database
라는 파일을 새로 만들어 준다.
db.js
파일명으로 생성해 주었다. 이제 컴퓨터에 실행되고 있는 monfo database에 연결해 준다.
터미널에서 'mongo' 명령어를 실행해서 database가 실행되고 있는 url을 복사해서 넣어 준다.
mongo 명령어를 console에서 실행 시켜서 url을 받아야한다.
그 다음 mongoose를 import하고 mongoose.connect()
를 작성해준다.
그리고 해당 url을 넣어 준다.
import mongoose from "mongoose";
mongoose.connect("mongodb://127.0.0.1:27017/");
mongodb
에 새로운 database
를 만드는건 아주 간단하다.
url에 연결한뒤 '/'뒤에 database
이름을 적어주면 된다.
mongoose.connect("mongodb://127.0.0.1:27017/wetube");
이런 식으로 추가해 주면 된다. mongoose
는 wetube
라는 mongodb database
로 연결해 준다.
지금은 존재하지 않지만 나중에 존재하게 될거다. 이름만 꼭 명시해 주도록 한다.
현재 서버를 보면 파일을 전혀 부르고 있지 않는다.
그래서 파일을 import
해주도록 하자. 파일의 어느 한 function
도 아니고, export default
나
export non-default
도 아니고, 파일 자체를 import
할거다.
server.js
에서
import "./db";
맨 윗줄에 추가해 주었다. 현재 function
을 import
하는게 아니다.
constant
를 import
하는 것도 아니고, 파일 그자체를 import
하는 거다.
서버는 이 라인을 보는 순간 이 파일을 import
해줌으로써, 서버가 mongo
에 연결되는거다.
(강의 내에서는 경고문이 console.log에 떴는데 현재는 뜨지 않는다.
그래도 혹시 모르니 경고문에 대해 했던 방식 그대로 해보도록 한다.)
server.js
에서
import mongoose from "mongoose";
mongoose.connect("mongodb://127.0.0.1:27017/wetube", {
useNewUrlParser: true,
useUnifiedTopology: true,
});
const db = mongoose.connection;
const handleOpen = () => console.log("✅Connected to DB");
db.on("error", (error) => console.log("DB Error", error));
db.once("open", handleOpen);
연결의 성공 여부나 에러를 console.log
로 출력하게 한다면 더 좋을것 같다.
connection
에 event
를 붙여주고, db.on 적어주고, error
라는 event
를 적어 준다.
만약 error
가 뜬다면 그럼 그 에러를 console.log
해준다.
즉 여기서 error
를 받아서 그리고 console.log
만약 database
에 에러나가 나면,
event
가 발생한다.
그리고 또 database에 발생 할수 있는 다른 이벤트는 database
로의 connection
을 여는 때도 있다.
connection
이 열린다는 말은 database
에 연결된다는 뜻이다.
console.log
로 database
에 연결이 됐다고 출력하게 한다.
이 event
는 once
를 사용할거다. 여기서 on
과 once
의 차이점은
on
은 여러번 계속 발생시킬수 있다. 클릭 같은 이벤트 이다.
once
는 오로지 한번만 발생 한다는 뜻이다.
즉 connection
이 열리게 되면 'connected to DB'
라는 문구로 확인 할수 있게 해주는 거다.
다시 한번 말하면 open
은 오로지 한번만 일어나는 거고, error
는 여러번 일어날 수있다.
const db = mongoose.connection;
const handleOpen = () => console.log("✅Connected to DB");
const handleError = (error) => console.log("DB Error", error);
db.on("error", handleError);
db.once("open", handleOpen);
그리고 원한다면 이렇게 바꿔 줄수도 있다. 더 보기 좋게 error function
을 만들어 줄수 있다.
error
는 mongoose
에게서 받을거다. 그리고 handleError
라고 적어준다.
아주 작은 파일이지만 동시에 아주 중요한 파일이다.
다시 한번 확인해 보면 database
에 연결이 됐고, mongoose
가 connection
에 대한 엑세스를 줬다.
그래서 서버와 database
서버의 사이의 현재 connection
에 엑세스 할수 있다.
그리고 몇가지 event
를 듣고 있다.
하나는 error
이다 error
가 뜰 때마다 "DB Error"
라고 출력 될것이다.
그리고 connection
이 열릴 때 event
가 한번 발생 할 거다.