Node.js 환경 구성 - Part.4-2 프로젝트 구조 수정

누군가·2024년 2월 6일
0

Node.js 환경 구성

목록 보기
6/6

※ 다크모드로 읽으시는 것을 추천드립니다.

프로젝트 구조 수정

변경된 프로젝트 구조

  • node_modules: 해당 프로젝트 내에서 사용하는 패키지가 존재하는 디렉터리
  • routes: HTTP Request에 대한 처리 및 응답을 위한 라우터가 존재하는 디렉터리
  • routes/bookRouter.js: MongoDB의 "book" Collection를 HTTP Request로 제어하기 위한 라우터
  • schemas: MongoDB의 Collection에 대한 스키마를 정의하기 위한 디렉터리
  • schemas/book.js: "book" Collection을 정의하기 위한 스키마
  • app.js: Express 서버 및 MongoDB (Mongoose) 커넥션을 위한 소스코드
  • package.json: 프로젝트의 메타 데이터 및 사용되는 패키지 등을 정의하기 위한 문서
  • package-lock.json: package.json을 통해 설치된 패키지의 의존성 트리에 대한 정보를 모두 갖는 문서
    (각 패키지의 정확한 의존성 버전 및 버전 충돌 등의 정보를 포함하기 때문에 설치 당시의 의존성을 재현하고, 다른 개발자와 공유할 때 일관성을 유지할 수 있음)
  • README.md: 프로젝트에 대한 가이드 또는 정보를 제공하기 위한 마크다운 문서

Express 및 MongoDB 연동 설정

  • Express 서버를 사용하기 위해 Express 프레임워크를 설치합니다.
# Express 프레임워크 설치
npm install express
  • Express 서버 및 MongoDB (Mongoose) 연동을 세팅합니다.
    app.js
const express = require("express");
const mongoose = require("mongoose");
const app = express();

// Express 통신 시 JSON 형식으로 데이터 통신
app.use(express.json());

// MongoDB 연결 정보
const MONGO_DB_URL = "mongodb://localhost:27017";
const MONGO_DB_NAME = "mongoTest";

// Express 서버 포트
const EXPRESS_PORT = 7777;

// MongoDB 연결
mongoose.connect(MONGO_DB_URL, {
    // useNewUrlParser: true,
    // useUnifiedTopology: true,
    dbName: MONGO_DB_NAME
}).then(() => {
    console.log("MongoDB Connected...");
}).catch(error => {
    console.error(`MongoDB Connection Error: ${error}`);
});

app.get("/", (req, res) => {
    res.send("Hello!!!");
});

app.listen(EXPRESS_PORT, () => {
    console.log(`Server Started... Port: ${EXPRESS_PORT}`);
});

app.use("/", require("./routes/bookRouter"));
  • 1번 라인: Express 프레임워크를 상수 "express"에 할당합니다.
  • 2번 라인: mongoose 모듈을 상수 "mongoose"에 할당합니다.
  • 3번 라인: Express를 초기화 하며 상수 "app"에 할당합니다.
  • 6번 라인: HTTP 통신 시 JSON 형식으로 통신하기 위해 선언합니다.
  • 9번 라인: MongoDB를 연동하기 위한 MongoDB Host 및 Port를 선언합니다.
  • 10번 라인: MongoDB에서 사용할 데이터베이스 명을 선언합니다.
  • 13번 라인: Express 서버를 접근하기 위한 포트를 선언합니다. (7777 Port)
  • 16 ~ 21번 라인: "mongoose"를 통해 9, 10번 라인에서 선언했던 MongoDB 연결을 시도하며, 연결 성공 시에 대한 처리를 작성합니다.
  • 22 ~ 24번 라인: MongoDB 연결이 실패했을 경우에 대한 처리를 작성합니다.
  • 26 ~ 28번 라인: HTTP 통신 확인 및 테스트를 위해 "GET" 메서드를 선언합니다. (GET /)
  • 30 ~ 32번 라인: 13번 라인에서 선언했던 Port를 통해 Express 서버가 수신할 수 있도록 대기합니다.
  • 34번 라인: routes/bookRouter 경로에 존재하는 라우터를 선언합니다.

"book" Collection 접근 라우터 설정

  • MongoDB "mongoTest" 데이터베이스의 "book" Collection에 대해 조회 및 데이터 삽입을 위한 라우터를 작성합니다.
    routes/bookRouter.js
const express = require("express");
const book = require("../schemas/book");
const routers = express.Router();

// book collection 조회
routers.get("/book", (req, res, next) => {
    book.find().then(result => {
        console.log(result);
        res.json(result);
    }).catch(error => {
        console.error(`Find Error: ${error}`)
    });
});

// book collection 데이터 삽입
routers.post("/book", (req, res, next) => {
    const { name, author, insertDate } = req.body;
    const bookValues = new book({
        name,
        author,
        insertDate
    });

    bookValues.save().then(result => {
        console.log("Insert Success");
        res.json(result);
    }).catch(error => {
        console.error(`Insert Error: ${error}`);
    })
});

module.exports = routers;
  • 1번 라인: Express 프레임워크를 상수 "express"에 할당합니다.
  • 2번 라인: schemas/book 경로에 정의된 "book" Collection 스키마를 상수 "book"에 할당합니다.
  • 3번 라인: Express Router를 초기화하며 상수 "routers"에 할당합니다.
  • 6 ~ 13번 라인: "book" Collection을 조회하기 위한 "GET" 메서드입니다. (GET /book)
  • 7 ~ 9번 라인: "book" Collection을 조회하며, 조회 성공 시에 대한 처리를 작성합니다.
  • 10 ~ 12번 라인: 조회 실패 시에 대한 처리를 작성합니다.
  • 16 ~ 30번 라인: "book" Collection에 데이터를 삽입하기 위한 "POST" 메서드입니다. (POST /book)
  • 17번 라인: Request Body로부터 전달받은 "name", "author", "insertDate" 값을 각각 상수에 할당합니다.
  • 18 ~ 22번 라인: Request Body로 부터 전달받은 값을 schemas/book 스키마와 매핑시킵니다. (Request Body의 Key 값과 Schema의 Key 값이 일치하지 않을 경우 에러 또는 값이 누락되니 주의해야 합니다.)
  • 24 ~ 26번 라인: "book" Collection에 데이터를 삽입하며, 삽입 성공 시에 대한 처리를 작성합니다.
  • 27 ~ 29번 라인: 데이터 삽입 실패 시에 대한 처리를 작성합니다.

Reference

https://dev-ellachoi.tistory.com/65

profile
개발 중에 알게된 내용을 공유합니다 (나도 기억할겸)

0개의 댓글