본문 바로가기

node.js - mongoDB-campass / schema / Docker-volumes 본문

개발/node.js

node.js - mongoDB-campass / schema / Docker-volumes

자전하는명왕성 2023. 1. 20. 16:37

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)라고 부르기도 한다.

Comments