받은 데이터를 DB에 저장해보자(mongoDB, mongoose)
이제 post로 받은 데이터를 db에 저장하기만 하면 된다.
강의에서는 mongoDB를 사용하려 한다. mongo는 noSQL이라 초보자가 다루기 편하다고 한다.
noSQL이라는 말이 뭔가 document 기반이라서 아무데이터나 넣으면 넣는대로 저장할 수 있다는 말 같은데..
이게 스키마 기능이 필요한 이유인 것 같다. sql은 테이블이라는게 있어서 잘못된 정보는 들어가지 않지만
몽고디비는 넣으면 들어가니까 그걸 막기 위해 스키마를 만드는 것 같다.
(추상적인 느낌이고 정확히는 모르니 나중에 알게되면 수정할 예정입니다.)
그렇다면 mongoose는 무엇이냐. mongoDB가 데이터베이스이고 mongoose는 그 데이터베이스랑 노드js 서버를 연결해주는 뭔가라고 생각하면 된다고 한다. 자바스크립트 코드를 쓸수있게 해준단다. 일단 둘다 설치하고 터미널에서 mongo를 쳐본다. 제대로 설치되었는지 확인. 설치되었다면 이제 mongodb 와 node를 연결해보자
작업을 계속하다보면 model이 더 많아져서 server.js에 계속 추가하면 파일이 정리가 안된다고 한다.
아마 nico선생님 스타일인듯. 그래서 db.js파일을 새로 만들어서 server관련은 server.js에, db관련은 db.js에 넣기로 한다.
위에 두줄이면 mongoose를 통해 mongodb와 연결할 수 있다. 그리고 db.js파일 자체를 server.js에 import해주면 된다.
이를 통해 mongodb와 node가 연결됐다.
그럼 한번 진짜 데이터를 post로 받아서 db에 저장해볼까?
video를 업로드해보자
마찬가지로 일단 데이터 받아야되니까? input태그에 name 붙이고, post로 보내고 router에서 post 연결하고 controller실행시킨다.
여기서, video를 나중에 여기저기서 쓰게될거고, 여러 video 데이터가 생길텐데... 일관성없이 데이터 모양이 제각각이면 에러가 생기지 않을까? 적어도 데이터 와꾸는 맞춰놔야 뭘 어떻게 만들지 좀 일관성있는 모양이 되지않을까? 라는 생각이 들었는데 그게 바로 schema다.
이렇게 models 폴더를 만들어서 Video.js 파일에 Schema를 이용해 하나의 모델을 만들었다.
이 모델이 있으면 모든 데이터가 일관성있는 모양으로 저장될것이다. 이걸 server.js에도 import해서 알리고, controller에서 사용하게 될테니 videoController.js파일에도 import 시킨다.
일단 앞에서 배운 req.body를 통해 form의 input value를 가져온다. 이제 사용자가 입력한 title, description, hashtags를 백엔드에서 쓸수있게 되었다.
간단하게 요약하면 model을 활용해서 document를 하나 만들고, 그 document를 저장한다.
위에보면 Schema에서 createdAt 과 meta데이터는 default값을 주었기 때문에 특별한경우가 아니면 설정할 필요가 없다.
title, description, hashtags만 post로 받아서 그 데이터로 video객체를 만들고 그것을 데이터베이스에 저장한다.
Video model로 만들어진 video객체는 mongoose model이기 때문에 mongoose의 시스템을 지원받는다.
video.save()로 편하게 데이터베이스에 저장할 수 있다.
근데 여기서 async, await 와 try,catch개념을 배운다.
이건 다음에