초보 개발자

mongoose mongoDB, Schema, model 만들기 본문

RECAP - WETUBE

mongoose mongoDB, Schema, model 만들기

taehyeki 2021. 9. 16. 17:57

mongoose는 nodejs와 mongoDB를 이어주는 다리역할을 한다.

우리가 자바스크립트로 적으면 mongoose가 mongoDB에게 전해준다.

 

나 --------> mongoose ------->  mongoDB

 

먼저 터미널을 열고 mongoDB shell과 연결하기 위하여 mongo를 입력해준다.

fail이 뜬다면 sudo service mongodb start를 해준 뒤 비밀번호를 입력해주고 다시 mongo를 입력하면 될 것이다.

이제 우리는 mongoDB와 대화할 수 있다.

위에 보이는 mongodb주소를 mongoose와 이어주기 위해 복사해준다

npm i mongoose

mongoose를 설치, src폴더 내에 자바스크립트 파일을 만들고 

아까 복사한 주소를 붙여 넣는다. 그리고 mongoDB에 새로운 database를 만드는 건 아주 간단하다.

주소 뒤에 폴더를 하나 만들어 주면된다 나는 recap폴더를 만들어 주었다.

 

mongoose는 recap이라는 mongoDB database로 연결해 줄거다.

 

우리는 이 파일 자체를 import해줄 것이다 파일 자체를 import하면 그 파일이 실행이 된다.

server.js파일에서 import해주자

import "./db"

이렇게만 해주면 server.js가 실행이 될 때 데이터베이스와도 연결이 되는 것이다!!!

연결이 되고 안되고를 콘솔로 확인하면 좋기 때문에 그 기능도 만들어 보자!!!

db는 mongoose의 연결에 관한 것들을 말하고 만약 error가 뜨면 error메시지를 출력하고, 잘 실행이 되면 정상표시를 하게 만들었다.

on을 사용하여 error이벤트가 나올 때 마다 에러콘솔을 나타냈고, once를 사용하여 connection이 열릴 때 한번 정상 콘솔을 실행하도록 하였다. once대신 on을써도 한번만 실행되기는한다. 왜냐면 open이벤트는 어처피 한번만 실행이 되기때문아닐까?

 

이제부터 우리의 video 모델을 만들어 보겠다.

src/models/Video.js(대문자)

모델을 만들기 전에 모델의 형태(Schema)를 먼저 정의해야한다. 

videoSchema = new mongoose.Schema({})를 통해 모델의 형태를 잡아준다.

Video에는 제목, 작성자, 댓글, 시간, 등등등 여러가지 필요한 것이 있을 것이다. 

 

const Video = mongoose.model('Video'(대문자), videoSchema);.
위의 schema를 사용하여 Video모델을 만들고 export해준다. 

 

여기서 주의 해야 할 것이 있다.

우리가 처음 server와 mongodb를 연결하기 위하여 db라는 파일을 맨 처음 실행 시켜주었던 것을 알고 있을 것이다.

그 밑에 바로 실행 시켜 주자.

여기서 실행 시켜주는 이유는 모델을 미리 compile또는 create해야 우리가 필요할 때 해당 model을 사용할 수 있기 때문이라고 한다 다시말해 import "./models/Video.js" 이코드로 model을 compile시켜서 db에서 인식을 시켜줘야 이 이후로 우리가 원할 때 마다 불러 올 수 있게 된다.
단, db를 import한 후에 해야한다!!

 

그리고 코드를 좀 더 개선해보자면

server.js파일은 express된 것들과 server의 configuration에 관련된 코드만 처리하기 위해 만들어 졌다.

즉 server에 관련된 일만 하기위해 만들어 진 것이다.

database나 models같은 것들을 import하기 위함은 아니다
init.js파일을 따로 만들어서 앱 실행과 database와의 연동을 여기서 해주자
그리고 import app 을 server.js에서 가져오면 아까와 똑같이 작동되지만 좀더 깔끔해 진 것을 확인할 수 있다 그리고 각자 맡은 역할만 한다.

init.js 

.

server.js

server와 관련된 것들을 설정해 놓은 뒤 export하여 init에 보내 app으로 받아 listen으로 실행시켜주면

잘 동작한다.

'RECAP - WETUBE' 카테고리의 다른 글

watch, edit handler  (0) 2021.09.23
Schema type, 데이터 생성 및 조회 async await  (0) 2021.09.23
5 mvp.css  (0) 2021.09.11
4-2 템플릿 pug  (0) 2021.09.11
4-1 템플릿 pug  (0) 2021.09.11