node.js - mongoDB-campass / schema / Docker-volumes 본문
mongoDB-campass / schema
schema 는 SQL || noSQL 의 활용을 편리하게 하기 위해
데이터 간의 연결고리 및 형식을 정의하는 것을 말한다.
아래 소스 코드에서는
Board 에 대한 스키마를 { writer / title / contents } 로 정의하였다.
import mongoose from "mongoose";
const boardSchema = new mongoose.Schema({
writer : String,
title : String,
contents : String
})
// 모델
export const Board = mongoose.model("Board", boardSchema)
앞선 포스팅에서 mongoose 는 mongoDB의 명령어를 단순화해준다고 설명했었다.
밑 소스 코드에서는 mongoose 를 활용하여
board.save() / board.find() 로 명령어를 실행시켜준 모습이다.
// index.js // app.post
app.post("/boards", async function (req, res) {
// 스키마 양식
const board = new Board({
writer: req.body.writer,
title : req.body.title,
contents : req.body.contents
})
// 몽고DB에 저장됨 save() , await / asnyc
await board.save() //save() 몽구스
//
res.send("게시물 등록에 성공하였습니다.");
});
// index.js // app.get
app.get("/boards", async function (req, res) {
// 몽고 DB에서 찾아옴
const result = await Board.find() //find() 몽구스
res.send(result);
});
POST / 스키마의 양식에 따라 DB에 저장하길 원하는 데이터를 입력해준다.
GET / DB에 저장된 해당 데이터를 받아온 모습이다.
이제는 Docker내 컨테이너와 local 컴퓨터를 연결하여 데이터베이스에 내용을 저장하고, 가져올 수 있게 되었다!
Docker-volumes
로컬 컴퓨터와 도커 컨테이너를 연결하여, 로컬 컴퓨터의 수정사항이 생겼을 때
다시 '빌드'할 필요 없이 도커 컨테이너 또한 내용을 수정해 줄 수 있는 기능이다. (저장공간을 공유)
** nodemon 과 함께 쓰는 것이 좋다.
//docker yaml
my-backend:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./index.js:/myfolder/index.js // 해당 파일 변경 사항이 생겼을 때 발동
- ./email.js:/myfolder/email.js // 해당 파일 변경 사항이 생겼을 때 발동
# - ./src:/myfolder/src
ports:
- 4000:4000
소스 코드가 변경되어 저장될 때마다 서버가 재시작됨을 확인할 수 있다.
__V
데이터에 있는 '__V '는 업로드된 버전을 의미한다.
수정하게 된 경우 __V 는 값이 증가되게 된다.
디버그 모드
log로 변경 결과를 볼 수 있게 해준다.
해당 파일에서는 아래와 같이 소스코드를 작성했다.
// 디버그 모드
mongoose.set("debug",true)
몽고DB 와 스키마의 연관성
사실 오늘 작업한 스키마는 몽고DB와는 상관이 없다.
애초에 noSQL인 몽고DB는 그 말마따나 관계형 데이터베이스가 아니기 때문에,
몽고DB에 직접 데이터를 입력하게 되면 오늘 작성한 writer / title / contents 외에도 다른 정보들도 들어갈 수 있다.
따라서, 몽고DB와 같은 noSQL 은 스키마리스 데이터베이스(schema-less database)라고 부르기도 한다.
'개발 > node.js' 카테고리의 다른 글
node.js - graphQL : Schema-first vs Code-first (0) | 2023.01.24 |
---|---|
node.js - 스크래핑(scraping) / 크롤링(crawling) (0) | 2023.01.21 |
node.js - DatabaseTool(GUI) (0) | 2023.01.19 |
node.js - package.json(의존성 모듈) (0) | 2023.01.19 |
node.js - 데이터베이스 / mongoDB(&GUI) / docker-compose / mongoose 설치 (1) | 2023.01.19 |