Node 강의/입문

2-1 데이터베이스와 MongoDB

kagan-draca 2024. 9. 2. 16:23

1. 데이터베이스 란?

 

데이터베이스(DataBase)는 '데이터의 집합'이라고 할 수 있습니다.

실제 데이터가 저장되는 저장소의 역할을 수행합니다.

 

DBMS(DataBase Management System) : 데이터베이스(DataBase)를 실제 운영하고, 관리하는 소프트웨어입니다.

 

"데이터베이스에 저장한다"라는 말은 DBMS가 설치된 데이터를 저장한다는 의미입니다.

 

DBMS가 설치된 서버 컴퓨터를 데이터베이스 서버(DB 서버)라고 부릅니다.

즉, DB 서버의 모든 데이터는 DBMS가 관리하게 됩니다.

 

2. MongoDB 란?

 

MongoDB는 국내, 외 수 많은 개발자들에게서 사용되고 있는 가장 인기있는

비관계형 데이터베이스(NoSQL) 중 하나 입니다.

 

모든 데이터가 JSON 형태로 저장됩니다.

 

복잡한 데이터 구조쉽게 저장할 수 있는 장점이 있습니다.

→ 대용량 데이터를 손쉽게 처리할 수 있습니다.

 

데이터베이스 서버의 확장을 손 쉽게 줄이고 늘일 수 있습니다.

→ 서버의 부하가 늘어나더라도, 빠르게 대응할 수 있습니다.

 

3. 코드에서 MongoDB 적용하기

 

1. 코드에서 MongoDB 연결 방법

 

 

- JavaScript 코드에서도 DB Client 역할을 하는 무언가가 있어야 데이터베이스에 연결을 할 수 있는데,

  mongoose라는 도구를 이용해 데이터베이스에 연결할 예정입니다.

 

 

2. mongoose라는 라이브러리 개념

 

 

mongoose는 MongoDB에 데이터를 쉽게 읽고 쓰게 해주는 JavaScript 라이브러리입니다.

mongooseODM(Object Document Mapper)이라고도 부릅니다.

 

ODM(Object Document Mapper) : JavaScript의 객체(Object)와 MongoDB의 문서(Document) 사이에서

                                                          "매핑"을 수행하는 도구입니다.

- 객체(Object)를 MongoDB 데이터베이스의 문서(Document)로 쉽게 변환하거나,

  반대로 문서를 객체로 변환해주는 작업을 수행합니다.

 

 

3. mongoose 설치

 

 

yarn add mongoose

 

로 설치가 가능하다.

 

mongoose

Mongoose MongoDB ODM. Latest version: 8.6.0, last published: 4 days ago. Start using mongoose in your project by running `npm i mongoose`. There are 18804 other projects in the npm registry using mongoose.

www.npmjs.com

 

 

4. mongoose의 문서(Document)란?

 

- MongoDB에서 가지고 있는 각 데이터 하나하나를 문서(Document)라고 정의한다.

- 1개 이상의 Key - Value의 쌍으로 이뤄져 있다.(JSON 형식이라)

 

- 아래의 문서(Document)는 _id와 name이라는 2개의 Key와 Value를 가지고 있습니다.

 

{
    "_id": ObjectId("6682192a1c155bd2f27881"),
    "name": "lyw",
}

 

 

5. mongoose의 컬렉션(Collection)이란?

 

 

- 컬렉션(Collection)은 여러개의 문서(Document)를 보유할 수 있는 MongoDB의 구성요소입니다.

- JSON 형식의 여러가지 문서(Document)를 보유할 수 있습니다.

- 컬렉션(Collection)은 고정된 구성요소가 존재하지 않고, 유연하게 구성할 수 있습니다.

- 이후에 설명할 관계형 데이터 베이스(RDB)Table과 동일한 역할을 합니다.

 

6. mongoose의 스키마(Schema)란?

 

논리적 스키마(Schema) 데이터의 구조와 어떤 제약 사항을 가지는지 정의하기 위해 사용하며,

일반적으로 데이터를 모델링할 때 사용합니다.

 

기능적 스키마(Schema) 어떤 필드있어야 하는지, 필드는 어떤 데이터 타입

가져야 하는지를 정의합니다.

 

물리적 스키마(Schema)컬렉션(Collection)에 들어가는 문서(Document)

어떤 종류의 을 가질 것인지 정의하기 위해 사용합니다.

 

아래는 사용자(User) 정보를 정의한 스키마의 예시입니다.

 

const UsersSchema = new mongoose.Schema({
  name: String, // 문자열 타입입니다.
  age: Number, // 숫자 타입입니다.
  favorites: [String], // 문자열 배열 타입입니다.
  createdAt: { type: Date, default: Date.now }, // 날짜 타입입니다.
  someId: mongoose.Schema.Types.ObjectId // ObjectId 타입입니다.
});

 

스키마의 종류 )

 

null : null 값과 존재하지 않는 필드

ex ) null

 

String : 문자열

ex ) "mongoDB", "abcd"

 

Number : 숫자

ex) 3.14, 467812

 

Date : 날짜

ex) new Date()

 

Buffer : 파일을 담을 수 있는 버퍼, UTF-8이 아닌 문자열

ex) 0x65

 

Boolean : true or false

ex) true, false

 

ObjectId(Schema.Types.ObjectId) : 객체 ID, 주로 다른 객체를 참조할 때 넣음

ex) Object()

 

Array : 배열 형태의 값

ex) ["a", "b", "c"]

 

7. mongoose의 모델(Model)이란?

 

- 모델(Model)은 데이터베이스에 데이터를 저장하고 읽어올 때 사용되는 데이터의 구조입니다.

 

- 스키마를 바탕으로 만들어지고, JavaScript의 객체와 MongoDB간의 상호작용을 하기 위해 사용합니다.

 

- MongoDB의 실제 데이터를 다룰 수 있는 메서드를 지니고 있습니다.

 

- 만약, 사용자의 데이터를 저장하려면, 사용자(Users) 모델을 사용하여 데이터를 생성하고,

   데이터베이스에 저장할 수 있습니다.

 

8. 웹 서버(코드)에서 MongoDB 연결하기

 

위와 같이 디렉토리가 구성 돼 있고,

 

VScode로는 위와 같이 구성된다.

 

먼저, 터미널에

 

yarn add mongoose

 

를 작성해 mongoose 패키지를 가져온다.

 

그 후,

 

mongoose를 사용할 .js 파일에

 

import mongoose from "mongoose";

로 mongoose를 import 받는다.

 

const connect = () => {
  mongoose
    .connect(
      "mongodb+srv://아이디:비밀번호@expressmongo.egahk.mongodb.net/?retryWrites=true&w=majority&appName=ExpressMongo",
      {
        dbName: "ExpressMongo",
        // 내가 사용한 DB 이름
      }
    )
    .catch(err => console.log(err)) // 에러가 발생할 경우 에러 출력
    .then(() => console.log("몽고디비 연결 설공")); // 성공하면 연결 알림
};

 

connect 함수를 만들어 그 내부에

 

mongoose.connect()로 mongoDB와의 연결을 시도할 것인데 매개변수로

 

mongoose.connect

(

"mongoDB 주소", // 아이디 : 비밀번호가 필요합니다.

{

    dbName : "데이터베이스 이름" // 데이터베이스 이름

}

)

이 필요합니다. 그리고,

 

.catch(err => console.log(err)) // 에러 발생 경우 로직 처리나 문구

.then(() => // 정상 연결 됐을 경우 작업)

 

해줍니다.

'Node 강의 > 입문' 카테고리의 다른 글

2-3 미들웨어(Middleware)(실습에서 추가 및 수정)  (0) 2024.09.03
2-2 웹 서버 + MongoDB 실습  (0) 2024.09.02
1-15 REST API 개발하기  (0) 2024.09.02
1-14 Express.js의 req, res 객체  (0) 2024.09.02
1-13 Request와 Response  (0) 2024.09.01