[TIL/React] 2024/07/15

원민관·2024년 7월 15일
0

[TIL]

목록 보기
144/159

reference:
1) https://www.youtube.com/watch?v=_7UQPve99r4&t=257s
(MERN Stack CRUD API Tutorial, 50분 수강)

✅ Insomnia

Insomnia는 HTTP 및 RESTful API를 테스트하고 디버깅할 수 있는 도구이다. 요청과 응답 데이터를 보기 쉽게 포맷팅한 뒤 표시해주어, API의 동작을 쉽게 이해하고 디버깅할 수 있도록 도와준다.

✅ Dependencies(+CLI)

1. npm init -y 🚀

프로젝트를 초기화하는 CLI이다. 기본값이 설정된 형태의 package.json 파일이 생성된다.

2. npm i express 🚀

Express를 설치하는 CLI이다. Express는 Node.js에서 웹 애플리케이션 및 API를 구축하기 위한 프레임워크이다. Express를 사용하면 다양한 HTTP 요청을 쉽게 처리하고, 미들웨어를 통해 애플리케이션의 기능을 확장할 수 있다.

1. 간단한 라우팅

  • 요청 및 응답 객체를 쉽게 다룰 수 있다.

2. 플러그인 가능

  • 미들웨어를 통해 기능을 쉽게 확장할 수 있다.

3. 빠른 서버 설정

  • 간단한 설정으로 웹 서버를 빠르게 구성할 수 있다.

3. npm i nodemon 🚀

Nodemon은 파일의 변경 사항을 감지하여 자동으로 서버를 재시작해주는 도구이다. 개발 과정에서 서버를 수동으로 재시작할 필요 없이, 코드 변경 사항을 자동적으로 반영할 수 있어 개발 효율성을 높일 수 있다.

1. 자동 재시작

  • 파일 변경 시 서버를 자동으로 재시작한다.

2. 개발 편의성 향상

  • 개발 중에 코드 변경을 빠르게 테스트할 수 있다.

4. npm i dotenv 🚀

Dotenv는, 환경 변수를 .env 파일에 저장하고 이를 애플리케이션에서 사용할 수 있도록 도와주는 모듈이다. 환경 변수를 통해 중요한 설정값을 코드와 분리하여 관리할 수 있게 된다.

1. 환경 변수 관리

  • .env 파일을 사용하여 환경 변수를 쉽게 관리할 수 있다.

2. 보안 향상

  • 민감한 정보(ex: 데이터베이스 URL)를 코드에서 분리하여 보관할 수 있다.

3. 설정의 유연성

  • 개발, 테스트, 프로덕션 등 환경에 따라 다른 설정을 적용할 수 있다는 유연성을 갖는다.

5. npm i mongodb 🚀

MongoDB 모듈은, MongoDB 데이터베이스와 직접 상호작용하기 위한 공식 Node.js 드라이버이다. MongoDB 모듈을 사용하면 MongoDB 데이터베이스에 연결되어 CRUD 작업을 수행할 수 있게 된다.

1. 데이터베이스 연결

  • MongoDB 데이터베이스와의 연결을 관리한다.

2. CRUD 작업 지원

  • 데이터베이스에서 데이터에 대해 Create, Read, Update, Delete 작업을 수행할 수 있게 한다.

3. 풍부한 기능 제공

  • 인덱싱, 집계 프레임워크 등 MongoDB의 다양한 기능을 활용할 수 있다.

6. npm i mongoose 🚀

Mongoose는 MongoDB를 위한 객체 데이터 모델링 라이브러리이다. 스키마를 정의하고, 데이터를 모델링하며, 데이터 검증 및 관계 설정 등의 기능을 제공한다.

1. 스키마 정의

  • MongoDB 문서 구조를 스키마로 정의할 수 있다.

2. 데이터 모델링

  • 스키마를 기반으로 데이터 모델을 생성하고 조작할 수 있다.

3. 유효성 검사

  • 데이터의 유효성을 검증하는 기능을 제공한다.

4. 쿼리 빌더

  • 간단하고 강력한 쿼리 빌더를 제공한다.

5. 미들웨어 지원

  • 문서의 생성, 업데이트, 삭제 등 다양한 시점에 미들웨어를 추가할 수 있다.

✅ index.js 파일 분해

1. module, model 불러오기 🚀

const mongoose = require("mongoose");

const ProductSchema = mongoose.Schema(
  {
    name: {
      type: String,
      required: [true, "Please enter product name"],
    },
    quantity: {
      type: Number,
      required: true,
      default: 0,
    },
    price: {
      type: Number,
      required: true,
      default: 0,
    },
    image: {
      type: String,
      required: false,
    },
  },
  {
    timestamps: true,
  }
);

const Product = mongoose.model("Product", ProductSchema);
module.exports = Product;
const express = require("express");
const mongoose = require("mongoose");
const Product = require("./models/product.model");
const app = express();
require("dotenv").config();
  1. express 모듈을 불러온다.
  2. mongoose 모듈을 불러온다.
  3. Product 모델을 불러온다.
  4. Express 애플리케이션을 생성한다.
  5. .env 파일에 설졍된 환경 변수를 불러온다.

2. middleware 설정 🚀

app.use(express.json());

JSON 형식의 요청 본문을 파싱하는 미들웨어를 사용한다.

3. route 설정 🚀

app.get("/", function (req, res) {
  res.send("Hello from Node API Server!!!");
});

app.get("/api/products", async (req, res) => {
  try {
    const product = await Product.find({});
    res.status(200).json(product);
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
});

app.post("/api/products", async (req, res) => {
  try {
    const product = await Product.create(req.body);
    res.status(200).json(product);
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
});
  1. 루트 경로에 대한 GET 요청을 처리한다. 응답으로 문자열을 보낸다.

  2. /api/products 경로에 대한 GET 요청을 처리한다. 데이터베이스에서 find 메서드를 통해 모든 product를 조회한 뒤, 조회된 product에 대해 JSON 형식으로 응답한다. 이때, 발생된 오류에 대해서는, 상태 코드 500과 함께 오류 메세지로 응답한다.

  3. /api/products 경로에 대한 POST 요청을 처리한다. 데이터베이스에서 create 메서드를 통해 요청 본문에 포함된 데이터를 사용하여 새로운 product를 생성한다. 생성된 product에 대해 JSON 형식으로 응답을 처리하며, GET과 마찬가지로, 오류가 발생하면 상태 코드 500과 함께 오류 메세지로 응답한다.

4. DB 연결 + Server 시작 🚀

mongoose
  .connect(process.env.MONGODB_URL)
  .then(() => {
    console.log("Connected to database!");
    app.listen(3000, () => {
      console.log("Server is running on port 3000");
    });
  })
  .catch(() => {
    console.log("Connection failed!");
  });
  1. 환경 변수에 설정된 MongoDB URL로 데이터베이스에 연결한다.

  2. 데이터베이스 연결에 성공하면 서버를 시작한다.

  3. 이때, 데이터베이스 연결에 성공하면, 성공 메세지를 콘솔에 출력한다.

  4. 포트 3000에서 서버를 시작하며, 서버 시작에 대한 메세지를 콘솔에 출력한다.

  5. 만약 데이터베이스 연결에 실패하면, 지정한 오류 메세지를 콘솔에 출력한다.

5. index.js 전체 코드 🚀

const express = require("express");
const mongoose = require("mongoose");
const Product = require("./models/product.model");
const app = express();
require("dotenv").config();

app.use(express.json());

app.get("/", function (req, res) {
  res.send("Hello from Node API Server!!!");
});

app.get("/api/products", async (req, res) => {
  try {
    const product = await Product.find({});
    res.status(200).json(product);
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
});

app.post("/api/products", async (req, res) => {
  try {
    const product = await Product.create(req.body);
    res.status(200).json(product);
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
});

mongoose
  .connect(process.env.MONGODB_URL)
  .then(() => {
    console.log("Connected to database!");
    app.listen(3000, () => {
      console.log("Server is running on port 3000");
    });
  })
  .catch(() => {
    console.log("Connection failed!");
  });
profile
Write a little every day, without hope, without despair ✍️

0개의 댓글