dh_0e

[Node.js] 강의 내용 개념 정리(7) (Database, MongoDB, mongoose) 본문

내일배움캠프/Node.js[입문]

[Node.js] 강의 내용 개념 정리(7) (Database, MongoDB, mongoose)

dh_0e 2024. 5. 16. 00:36

데이터베이스(Database)

- 데이터의 집합, 실제 데이터가 저장되는 저장소

 

데이터베이스의 종류

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

- 데이터의 형식이 정해져있고, 데이터 간의 관계를 맺어 모순이 없는 데이터를 유지할 수 있도록 도와주는 데이터베이스

- 은행과 같이 정확하고 일관된 데이터가 중요한 경우 사용됨 

 

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

- 데이터의 형식이 고정되있지 않음

- 유연하게 확장할 수 있는 데이터베이스

- SNS 서비스, 빅데이터와 같이 다양한 형식의 데이터를 빠르게 저장하고 검색해야하는 경우 사용됨

- 유연하게 저장되는 만큼 저장되는 데이터를 제대로 관리하지 않으면 저장된 데이터를 신뢰할 수 없음

 

MongoDB

- 가장 인기있는 비관계형 데이터베이스 중 하나

- 모든 데이터를 JSON 형태로 저장

- 복잡한 데이터 구조를 쉽게 저장할 수 있음 >> 대용량 데이터를 손쉽게 처리 가능

- 데이터베이스 서버의 확장에 용이함 >> 서버의 부하가 늘어나도 빠르게 대응 가능

 

 

Studio 3T: MongoDB를 더 쉽게 관리할 수 있는 GUI 툴

- API Client처럼 MongoDB를 위한 MongoDB Client

- GUI를 통해 MongoDb에 저장된 데이터를 보여주는 프로그램

 

DB Client vs API Client

- 서버에 연결해 데이터를 보내는 것 까지는 같은 개념, 개념과 기능이 다름

 

DB Client 

- 직접 db에 접근해 데이터를 관리할 수 있음

- SQL, NoSQL 등 db 지원

ex) Studio 3T

 

API Client 

- 웹 서비스의 API에 연결하여 서버와 데이터를 송수신

- REST API, Socket과 같은 다양한 프로토콜 지원

ex) insomnia

 

 

mongoose

- MongoDB에 데이터를 쉽게 읽고 쓰게 해주는 JS 라이브러리

- ODM(Object Document Mapper)라고도 부름  >> JS의 객체와 MongoDB의 문서 사이에서 매핑을 수행하는 도구

- JS코드의 객체(Object) to MongoDB의 문서(Document)로 변환 or 반대로 변환

 

mongoose의 문서(Doc)

- MongoDB의 각 데이터 하나하나를 문서(Doc)라고 정의

- 1개 이상의 Key-Value쌍으로 이루어짐

- JSON 형식

 

mongoose의 컬렉션(Collection)

- 여러 개의 문서를 보유할 수 있는 MongoDB의 구성요소

- JSON 형식의 여러가지 문서를 보유

- 고정된 구성요소 X, 유연하게 구성 가능

- 관계형 db의 Table과 동일한 역할

 

mongoose의 스키마(Schema)

- 컬렉션에 들어가는 문서의 데이터 종류를 정의함

- 데이터의 구조와 제약 사항을 정의하며, 데이터 모델링시 사용

- 어떤 필드가 어떤 데이터 타입을 가져야 하는지 정의

 

ex)

const UsersSchema = new mongoose.Schema({
  name: String, // 문자열 타입입니다.
  age: Number, // 숫자 타입입니다.
  favorites: [String], // 문자열 배열 타입입니다.
  createdAt: { type: Date, default: Date.now }, // 날짜 타입입니다.
  someId: mongoose.Schema.Types.ObjectId // ObjectId 타입입니다.
});
대표적인 스키마의 타입: null, String, Number, Date, Buffer, Boolean, ObjectId, Array

 

mongoose의 모델(Model)

- db에 데이터를 저장하고 읽어오는 데이터 구조

- 스키마 바탕으로 만들어짐, JS 객체와 MongoDB 간의 상호작용을 위해 사용

- MongoDB의 실제 데이터를 다루는 메서드 보유

 

.exec()

- promise를 반환하게 만들어줌

- promise가 필요한 구문에 await과 함께 사용하여 동기적 표현이 가능하게 해줌

- 데이터를 생성(create)할 때는 사용 x, 조회(find)할 때만 사용