docker-compose(Express, MongoDB)

SSAD·2023년 2월 15일
0

BackEnd

목록 보기
22/44
post-custom-banner

docker-compose.yaml


version: "3.7"

services:
  my-backend:
    build:
      context: .
      dockerfile: Dockerfile
    # 양측 파일을 동기화 해주는 옵션
    volumes:
      - ./index.js:/myfolder/index.js
      - ./email.js:/myfolder/email.js
    ports:
      - 3000:3000

  my-database:
    image: mongo:5
    ports:
      - 27017:27017
  • Express는 Dockerfile을 이용
FROM node:14

WORKDIR /myfolder/
COPY ./package.json /myfolder/
COPY ./yarn.lock /myfolder/
RUN yarn install

COPY . /myfolder/
CMD yarn dev
  • MongoDB는 image로 사용

mongoose 사용

  • Node.js와 MongoDB를 위한 ODM(Object Data mapping) 라이브러리

  • 호환성이 없는 JavaScript와 MongoDB의 데이터를 Mapping하여 간편한 CRUD를 가능하게 함

backend Express에 mongoose 설치

yarn add mongooes

1. Express index.js

import express from "express";
// mongoose 
import mongoose from "mongoose";

const port = 3000;
const app = express();

app.use(express.json());

// 몽고DB 접속
// 앱이 하나의 db만 사용하는 경우 connect
// 추가 연결해야 하는 경우 createConnection 사용
// 네임 리졸루션 - compose.yaml에 사용된 이름을 이용할수 있음
// mydocker : 생성된 db이름
mongoose.connect("mongodb://my-database:27017/mydocker");

// backend API 서버 오픈
app.listen(port, () => {
  console.log(`Example app listening on port ${port}`);
}); // 3000번 포트에서 실행

import mongoose from 'mongoose'

  • 몽구스 모듈을 가져옴

네임 리졸루션

  • docker-compose.yaml 파일에 작성된 각 컨테이너 명을 사용해

  • 두개의 컨테이너를 엮어 줄수 있음


2. 모델 정의

board.model.js

//  moogoose 라이브러리를 사용하기 위해 임포트
import mongoose from "mongoose";

// mongoose.schema메서드를 사용하여 mongoose 스키마를 정의
const BoardSchema = new mongoose.Schema({
  writer: String,
  title: String,
  contents: String,
});

// mongoose.model 메서드를 사용하여 스키마를 전달하여 모델 생성
// 첫 번째 인자 : mongoDB내에서 collection 이름을 의미
export const Board = mongoose.model("Board", BoardSchema);

3. GET 데이터 조회

Express index.js

import { Board } from "./models/board.model.js";

app.get("/boards", async (req, res) => {
  // find : 모든 데이터를 조회할 때
  // findOne : 특정 데이터만 조회
  const result = await Board.find();

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

4. POST 데이터 등록

Express index.js

import { Board } from "./models/board.model.js";

app.post("/boards", async (req, res) => {
  const board = new Board({
    writer: req.body.writer,
    title: req.body.title,
    contents: req.body.contents,
  });

  await board.save();
  res.send("게시물 등록에 성공하였습니다.!!");
profile
learn !
post-custom-banner

0개의 댓글