28일차 - Node.js 입문(4) 데이터베이스, MongoDB

이상민·2024년 9월 5일

TIL

목록 보기
28/50

데이터베이스와 MongoDB

🎈 저번 시간에 spa-shop폴더를 만들어 상품 등록 API를 구현했으나, 이 API가 서버를 종료하거나 재시작시 등록된 상품 데이터가 모두 사라지는 문제를 겪었다.

  • 그 이유가 뭘까 ? 바로 우리가 데이터를 "인 메모리(In-Memory)"방식으로 저장했기 때문이다. 이 방식은 데이터를 RAM과 같은 임시 저장소에 보관하여 어플리케이션이 종료될 때 이 임시 저장소의 데이터 또한 함께 사라지는 방식이다.

  • 이러한 문제를 해결하기 위해 "데이터베이스(Database)"라는 기술이 등장하게 되었다. 이러한 데이터베이스는 우리가 서비스하는 어플리케이션이 종료된 후에도 데이터가 보존되는 영속성의 특징을 가지고 있음

    🎯 요약하자면, 영속성(Persistence)이 없는 데이터는 상품 등록 API와 같이 인 메모리(In-Memory)에만 존재하며, 프로그램 종료되면 데이터가 사라지게 되는것

데이터베이스 란?

  • 데이터베이스(Database)는 ‘데이터의 집합’이라고 할 수 있으며, 실제 데이터가 저장되는 저장소의 역할을 수행한다.
  • 데이터베이스(Database)를 실제로 운영하고, 관리하는 소프트웨어를 DBMS(Database Management System)라고 부른다.
  • “데이터베이스에 저장한다” 라는 말은 DBMS가 설치된 서버에 데이터를 저장한다는 의미이며, DBMS가 설치된 서버 컴퓨터를 데이터베이스 서버(DB 서버)라고 부른다.( 즉, DB서버의 모든 데이터는 DBMS에서 관리하게됨)

데이터베이스의 종류

관계형 데이터베이스 Relational Database (RDB)

  • 관계형 데이터베이스는 데이터의 형식이 정해져있고, 데이터 간의 관계를 맺어 모순이 없는 데이터를 유지할 수 있도록 도와주는 데이터베이스를 의미한다.
  • 이런 특성 때문에 은행과 같이 정확하고 일관된 데이터가 중요한 경우에 주로 사용.

 비관계형 데이터베이스 Non-relational Database (NoSQL)

  • 데이터의 형식이 고정되어 있지 않고, 유연하게 확장할 수 있는 데이터베이스를 비관계형 데이터베이스라고 부른다.
  • 이런 유연성 덕분에 SNS 서비스, 빅데이터와 같이 다양한 형식의 데이터를 빠르게 저장하고 검색해야 하는 경우에 주로 사용.
  • 비관계형 데이터베이스는 유연하게 저장되는 만큼 저장되는 데이터를 제대로 관리하지 않으면 데이터베이스에 저장된 데이터를 신뢰할 수 없게 되기도 한다.

MongoDB 란?

MongoDB는 국내, 외 수많은 개발자들에게서 사용되고 있는 가장 인기있는 비관계형 데이터베이스 (NoSQL) 중 하나이다.

  • MongoDB에서는 모든 데이터가 JSON 형태로 저장되며, 복잡한 데이터 구조를 쉽게 저장할 수 있어 대용량 데이터를 손쉽게 처리 가능하다.
  • 또한 데이터베이스 서버의 확장을 손쉽게 줄이고 늘일 수 있어 서버의 부하가 늘어나더라도, 빠르게 대응할 수 있다.

Studio 3T

🎈 Studio 3T는 MongoDB의 데이터를 더욱 편리하게 관리할 수 있는 GUI 툴로, Studio 3T는 API의 사용을 도와주는 API Client처럼 MongoDB를 위해서 만들어진 MongoDB Client이다.

DB Client와 API Client의 차이 ?

DB Client와 API Client 모두 서버에 연결해 데이터를 보내는것 까지는 같은 개념이지만, 사용되는 개념과 기능은 크게 다르다.

  • DB Client:
    • 직접 데이터베이스에 접근해 데이터를 조회, 추가, 수정, 삭제하는 기능을 제공
    • SQL, NoSQL과 같은 다양한 유형의 데이터베이스를 지원
  • API Client:
    • 웹 서비스의 API에 연결하여 서버와 데이터를 송수신
    • 저희가 배우는 REST API와 Socket 같은 다양한 프로토콜을 지원

mongoose

mongoose란?

🎈 mongoose는 MongoDB에 데이터를 쉽게 읽고 쓰게 해주는 JavaScript 라이브러리로, ODM(Object Document Mapper)이라고도 부른다.

  • ODM(Object Document Mapper)이란, JavaScript의 객체와 MongoDB의 문서 사이에서 ‘매핑’을 수행하는 도구라고 생각하면 된다.
  • 우리가 JavaScript 코드에서 작업하는 객체를 MongoDB 데이터베이스의 문서로 쉽게 변환하거나, 반대로 문서를 객체로 변환해주는 작업을 수행해준다.(고마운 녀석..😭)

mongoose 설치

yarn add mongoose // 터미널을 열어 입력해 주면 mongoose 설치가능

mongoose의 문서란?

  • MongoDB에서 가지고 있는 각 데이터 하나하나를 문서(Document)라고 정의하며, 1개 이상의 Key-Value의 쌍으로 이루어져 있다.
  • JSON 형식으로 구성되어있으며, 아래의 문서(Document)는 _id와 name이라는 2개의 Key를 가지고 있다.
{
    "_id": ObjectId("6682192a1c155bd2f27881"),
    "name": "lyw",
}

mongoose의 컬렉션(Collection)

컬렉션(Collection)은 여러개의 문서를 보유할 수 있는 MongoDB의 구성요소이며, JSON 형식의 여러가지 문서를 보유할 수 있다.

mongoose의 스키마(Schema)

스키마(Schema)는 컬렉션(Collection)에 들어가는 문서(Document)가 어떤 종류의 값을 가질 것인지 정의하기위해 혹은, 데이터의 구조와 어떤 제약 사항을 가지는지 정의하기 위해 일반적으로 데이터를 모델링할 때 사용한다.

// 사용자(Users) 정보를 정의한 스키마 예시)
const UsersSchema = new mongoose.Schema({
  name: String, // 문자열 타입입니다.
  age: Number, // 숫자 타입입니다.
  favorites: [String], // 문자열 배열 타입입니다.
  createdAt: { type: Date, default: Date.now }, // 날짜 타입입니다.
  someId: mongoose.Schema.Types.ObjectId // ObjectId 타입입니다.
});

웹 서버에서 MongoDB에 연결

spa-shop
├── app.js
├── routes
│   ├── carts.js
│   └── goods.js
└── schemas
    ├── index.js
    ├── cart.js
    └── goods.js

0개의 댓글