엘리스 SW 엔지니어 트랙 30일차
온라인 강의날
MongoDB와 Mongoose
풀스택 개발자가 되어야지 했을 때
배워야지 하는 스킬의 마지막 녀석은
MongoDB였다 벌써 여기까지왔다
이 전까지 내용도 확실치 않지만
뭘 어떻게 숙련시킬지 감은 온다
MongoDB
대표적인 NoSQL, Document DB
huMONGOus에서 만든 말
엄청나게 큰 DB라는 의미 => 대용량 데이터 처리하기 좋게 만들어짐
No SQL vs RDB
RDB
관계형 데이터
데이터 구조화
Non SQL | Not Only SQL
구조화된 질이어 사용 안하는 데이터베이스
자료 간의 관계 초점 X
데이터 구조화하지 않고, 유연하게 저장
NoSQL 사용 이유
SQL
데이터 구조화 하는 것이 필수
DDL 이용이 필수
BUT 스키마에 정의된 데이터가 아니면 저장할 수 없는 제약
NoSQL
사전작업 없이 데이터베이스 사용 가능
=> 데이터베이스 작업에 크게 관여없이 프로젝트 빠르게 진행 가능
MongoDB
- Database
하나 이상의 Collection 갖는 저장소
SQL에서 database와 유사 - Collection
하나 이상의 Document 저장
SQL table과 유사하지만 Document 구조 정의 X - Document
저장되는 자료
SQL row와 유사하지만 구조제약 없이 유연하게 저장
JSON과 유사한 BSON 사용 다양한 자료형 지원
Document - ObjectID
유일한 키 값 ObjectID 갖는다
SQL primary key 유사
document 생성시 자동 생성됨
사용 방법
직접 설치
귀찮지만, 얼마든지 데이터 사용가능
직접 모든데이터 관련 설정 필요
Sharding이나 Replication 등 작업에 운영지식 필요
무료로 사용할 수 있는 Community Version 제공
Cloud
쉽고 빠르지만, 쓰는만큼 요금
모든 데이터베이스 관련 웹에서 관리
특별한 노하우 없이 데이터베이스 운용 가능
MongoDB Compass
Database, Collection, Document 시각화 관리 가능
MySQL Workbench와 유사
MongoDB 설치
여기서 직접 or Cloud로 사용 가능
MongoDB 링크 => https://mongodb.com/
Mongoose ODM
ODM(Object Data Modelling)
데이터를 오브젝트로 모델화해서 관리
Collection에 집중해서 관리
Collection 모델화, 관련 기능들을 쉽게 사용할 수 있도록 도와준다
Mongoose 사용 이유
1. 데이터베이스 연결상태 관리
MongoDB 기본 Node.js 드라이버 연결상태 관리 어렵다
Mongoose 사용하면 간단하게 데이터베이스와 연결상태 관리
2. 스키마 관리
스키마 정의하지 않고 사용하는게 No SQL 장점이지만,
데이터 형식 미리 정의해야 코드 작성과 프로젝트 관리에 유용
Code-level에서 스키마 정의하고 관리할 수 있게 해준다
3. Popluate
MongoDB 기본적으로 Join 제공 X
Join과 유사한 기능 aggregate있지만, 복잡한 쿼리
Mongoose에서 populate으로 간단하게 구현
Mongoose 사용 방법
1. 스키마 정의
2. 모델 만들기
3. 데이터베이스 연결
4. 모델 사용
스키마(Schema)
타입스크립트에서 타입을 정해주는 것처럼 보인다
간단한 CRUD - CREATE
create
Document 생성
생성된 Document 반환
간단한 CRUD - READ
find(query), findOne(query), findById(id)
Document 검색
Query
where과 비슷한 조건절
BSON 형식
Mongoose는 쿼리 값으로 배열이 주어지면 $in 쿼리 생성
다양한 Query Operator 확인 가능
MongoDB 링크 => https://docs.mongodb.com/manual/tutorial/query-documents/
간단한 CRUD - UPDATE
updateOne, updateMany
업데이트 결과 리턴
findByIdAndUpdate, findOneAndUpdate
검색된 결과에 업데이트 반영해서 반환
Document 수정
기본적으로 $set operator 사용 => Document 통째로 변경하지 않는다
간단한 CRUD - DELETE
document 삭제
deleteOne, deleteMany
삭제 결과 리턴
findOneAndDelete, findByIdAndDelete
find된 검색 결과 삭제해서 반환
populate
유용한 기능이라는데 아직 이해 안되네
스키마 생성 예시
author: {
type: Schema.Types.ObjectId,
required: true,
// 모델의 이름 들어간다
ref: 'User'
}
Express.js + Mongoose ODM
어느 부분에 Mongoose ODM 위치시킬지 정하는게 중요
일반적으로 models 디렉터리에 Schema와 Model 같이 위치
app 객체 부분에 데이터베이스 연결하는
mongoose.connect 위치
Express.js 동작 중
데이터베이스가 연결이 잘 되고 있는지 확인 하는게 좋다
연결 관련 이벤트에 대한 처리
MongoDB 외 다른 DB
Sequelize ORM
ORM
Object Relational Mapping
RDBMS 이용하는 간단한 방법
ODM은 모델에 집중
ORM은 테이블 관계, 쿼리 등 기능 단순화 용도
Mongoose는 MongoDB만 연결 가능하지만,
MySQL, PostgreSQL, SQLite 등 다양한 RDBMS 연결 가능
헷깔리니까 Suquelize ORM은 사용전에 까먹자
RDB를 Node.js 프로젝트에 사용할 때 Sequlize ORM 고려
'Web Dev > ELICE' 카테고리의 다른 글
33 :: GraphQL, OAuth, JWT, Passport (0) | 2021.12.09 |
---|---|
31 :: 데이터베이스, SQL, NoSQL, express, Mongoose 실습 (0) | 2021.12.07 |
29 :: 미들웨어, MVC, REST API, Postman (0) | 2021.12.03 |
28 :: Router, 미들웨어, API (0) | 2021.12.02 |
27 (3/3) :: Node.js 웹 프레임워크, 라우팅, Express.js (0) | 2021.12.01 |