Node.js - Mongoose 활용

Temporary·2024년 7월 16일
0

Nods.js

목록 보기
15/39

ODM(+mongoose)을 활용한 데이터 저장/조회

section0404-05-docker-compose-with-mongoose 폴더를 복사하고

폴더의 이름을 04-06-docker-compose-with-mongoose-board으로 변경해서 사용한다.

mongoDB 에서는 스키마를 담아둘 때, 스키마(js) 파일이 필요하다.
일반적으로, 스키마를 담고 있는 것을 model 이라고 한다.

Defining a Model

Model 정의를 위해 backend 폴더 안에 models 폴더를 먼저 생성하고 폴더 안에 board.model.js 파일을 만들어준다.

// board.model.js

import mongoose from 'mongoose'

const boardSchema = new mongoose.Schema({
    writer: String,
    title: String,
    contents: String
})

export const Board = mongoose.model("Board", boardSchema)

mongoose 라이브러리를 import 한다.

새로운 스키마를 BoardSchema 변수에 담아서 선언하고 내부에는 다음과 같이 요소들의 key 값의 타입을 지정해 주었다.

model() 메소드를 사용하여 문자열과 schema를 전달하여 model을 생성한다. 첫번째 인자는 해당 collection의 단수적 표현을 나타내는 문자열이다.

생성된 model 을 외부에서 접근할수 있도록 export 처리해준다.

GET 데이터 조회

그리고 index.js 파일에서 아래의 코드를 작성하여 해당 파일을 사용할 수 있게 불러온다.

// index.js

import { Board } from './models/board.model.js'

const app = express()
app.use(cors())
app.use(express.json())
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerJsdoc(options)));
app.get('/boards', async (req, res) => {
  // 1. 데이터를 조회하는 로직 => DB에 접속해서 데이터 꺼내오기
  // const result = [
  //   { number: 1, writer: "철수", title: "제목입니다~~", contents: "내용이에요@@@" },
  //   { number: 2, writer: "영희", title: "영희 제목입니다~~", contents: "영희 내용이에요@@@" },
  //   { number: 3, writer: "훈이", title: "훈이 제목입니다~~", contents: "훈이 내용이에요@@@" },
  // ]
  const result = await Board.find()

  // 2. 꺼내온 결과 응답 주기
  res.send(result)
})

해당 Board collection을 가져와 사용할 수 있도록 result 라는 변수에 담아 응답으로 내보내 주는 코드를 추가로 작성한다.

find는 보통 모든 데이터를 조회할 때 사용되며, findOne특정 데이터만 조회할 때 자주 사용된다.

mongoose의 스키마는 mongoDB에 저장되는 document의 Data 구조 즉 필드 타입에 관한 정보를 JSON 형태로 정의한 것이다.

Mongoose Schema는 다음의 Data type을 지원한다는 것을 참고해두자.


POST 데이터 등록

//index.js

app.post('/boards', async (req, res) => {
  console.log(req.body);

  // 1. 데이터를 등록하는 로직 => DB에 접속해서 데이터 저장하기
  const board = new Board({
    writer: req.body.writer,
    title: req.body.title,
    contents: req.body.contents,
  });
  await board.save(); // 저장해주기

  // 2. 저장 결과 응답 주기
  res.send('게시물 등록에 성공하였습니다!!');
});

/boardendpoint를 지정해서 POST 요청을 받았을 때 JSON 데이터를 담은 BODY에서 각각의 요소를 하나하나 빼와서 연결해 놓은 mongoDB의 boards collection에 저장해 준다.

실습

Postman을 사용해서 직접 통신을 해보자

그전에 docker를 이용해서 서버를 실행시켜야 한다.

  1. docker-compose build 를 입력해 docker image를 생성한다.
  2. docker-compose up을 입력해 container를 실행시켜 준다.

실습을 위해 Postman을 실행한다.

먼저 데이터를 등록하려면

POST메서드를 선택한 다음, localhost:3000/board 를 입력한다.

Body를 입력해 주기 위해서 raw를 선택하고 다음과 같이 JSON 데이터를 입력해 준다.

{
    "writer": "철수",
    "title": "제목입니다~",
    "contents": "내용!!"
}

Send를 클릭해서 요청을 보낸다.

코드에 적은대로 응답 메시지를 받았다면 성공적인 통신이다.

이제 등록된 데이터를 조회해 보자

GET메서드를 선택하고 localhost:3000/boards 를 입력한다.

Send를 클릭해서 요청을 보내 데이터를 받아오면

위 사진과 같이 아까 POST 메서드로 요청을 보낸 데이터가 정상적으로 조회되면 성공적으로 데이터를 저장하고 불러왔다.

마지막으로 mongoDB-compass를 실행해서 생성한 DB와 collention에 저장한 데이터를 확인해 보자

다음과 같이 mongoDB-compass 를 연결하고

다음과 같이 DB가 조회됩니다. mydocker DB를 선택한다.

생성한 boards collection을 확인할 수 있다. boards collection을 선택해서 확인할 수 있다.

저장한 데이터가 다음처럼 잘 보이면 성공적으로 통신이 이루어진 것이다.

profile
Temporary Acoount

0개의 댓글