[Youtube 클론코딩] 비디오 스키마 만들기
스키마와 모델
저번에 작성한 POST 연습하기 포스팅에서는, 일반 배열을 이용해서 가짜 데이터베이스를 만들었었다.
[Youtube 클론코딩] POST 기능 연습하기 (tistory.com)
[Youtube 클론코딩] POST 기능 연습하기
Fake Database로 POST 연습하기. POST 방식은 주소창의 쿼리 스트링을 이용하지 않게 데이터를 주고받는 방식으로 사전 작업이 필요하다. 이를 이해하기 위해서 단순 배열을 이용해 연습해보자. Video
riam.tistory.com
그러다보니 각 파일의 형식을 강제할 수 있는 수단이 없었고,
새로운 파일을 추가할 때에도 수동으로 형식을 맞춰서 입력해주어야 했다.
그러나 데이터베이스를 이용하면 이러한 부분을 개선할 수 있는데, 바로 모델 기능이다.
/src/models/Video.js
mongoose는 스키마와 모델 개념을 제공하는데, 이는 다음 링크에서 자세하게 볼 수 있다.
2-3. 데이터베이스 스키마와 모델 · GitBook (vlpt.us)
2-3. 데이터베이스 스키마와 모델 · GitBook
2-3. 데이터베이스 스키마와 모델 2장의 서론에서는, MongoDB 는 고정적인 스키마를 갖지 않고 있다고 설명을 했습니다. 그런데 이번에 스키마를 미리 만든다니, 조금 헷갈리기도 하지요? 여기서 만
backend-intro.vlpt.us
간략히 요약하면 스키마는 추상적인 개념이고, 모델은 이 스키마를 가지고 만든 인스턴스인데,
Mongo DB는 정해진 데이터 형식이 없다.
따라서 Mongo DB에 저장된 데이터가 무슨 구조를 가지고 있는지를 정의하는 것이 스키마고
그 구조에 따라 실제 데이터를 저장하는 게 바로 모델이다.
const video = mongoose.model("Video", videoSchema);
즉 이 구문은 Mongo DB에 "Video"라는 이름으로 저장된 데이터 객체를 video라는 변수에 저장하겠다는 의미이다.
init.js로 server.js 나누기
이렇게 만든 모델을 각 기능에서 자유롭게 사용하려면 모든 기능 이전에 불러와야한다(preload)
따라서 server.js 가장 위에 import 해줄 필요가 있다.
물론 db에서 불러오는 것이므로 db.js를 import 하는 작업이 가장 먼저 시행돼야 한다.
그런데 모델이 많아지게 되면 import의 행 수가 엄청나게 길어지게 된다.
따라서 모델 부분만 따로 init.js로 분리시켜보면, 다음과 같다.
/src/init.js
init은 initial의 약어로, 처음에 로딩되는 것들을 모아놓은 파일을 의미한다.
db를 불러온 뒤 app을 포트와 연결해야 하므로 server.js에서 app.listen 부분을 떼어온다.
server.js에서는 app을 export 한다.
server.js에서 app.listen()을 떼어왔으므로 package.json의 npm run dev 부분도 수정한다.