Koras02
Koras02코딩웹
Koras02
전체 방문자
오늘
어제
  • 분류 전체보기 (299)
    • 백엔드 (59)
      • nestjs (2)
      • Ruby (3)
      • PostgresQL (11)
      • MySQL (5)
      • Haskell (7)
      • Koa (3)
      • Java (3)
      • Python (5)
      • Rust (5)
      • MongoDB (2)
      • PHP (3)
      • Spring Boot (1)
      • redis (5)
      • deno (2)
    • 웹서버 (3)
      • nginx (1)
      • Apache (2)
      • Google Web Server (0)
    • 모바일개발 (5)
      • Figma (0)
      • React Native (2)
      • swift (0)
      • Flutter (3)
      • Kotlin (0)
    • 프론트 엔드 (158)
      • HTML (34)
      • CSS (7)
      • Javascript (35)
      • Angular (0)
      • Typescript (2)
      • React (58)
      • Vue (2)
      • GIT (6)
      • GraphQL (1)
      • Doker (4)
      • Go (8)
      • svelte (1)
      • gatsby (0)
    • etc. (47)
      • Notion (0)
      • TIL (24)
      • Algorithm (17)
      • Algorithm 개념 정리 (2)
      • Wiki (3)
      • Official document (1)
    • 웹개념 (12)
    • 변수정리 (1)
    • VSCode (2)
    • 포트폴리오 분석 (2)
      • React (2)
    • os (5)
      • 윈도우 (4)
      • Mac (0)
      • 가상머신 (0)
      • linux (1)
    • 응용프로그램언어 (2)
      • C (2)
      • C++ (0)
      • C# (0)
    • 블로그 운영관련 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
글쓰기

공지사항

  • [공지사항] 개발 이슈나 공식문서 업데이트 업로드 예정입니⋯

인기 글

태그

  • Java
  • 문자열
  • html
  • 하스켈
  • html5
  • 알고리즘
  • Haskell
  • Til
  • javascript
  • CSS
  • PostgreSQL
  • go
  • Flutter
  • 데이터 타입
  • redis
  • Rust
  • koa
  • React
  • 프로그래머스
  • mysql

티스토리

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.
Koras02

Koras02코딩웹

[MongoDB] mongoDB란?
백엔드/MongoDB

[MongoDB] mongoDB란?

2022. 1. 30. 02:31
728x90

이번시간에는 데이터를 저장하는 데이터베이스 역할을 해주는 mongoDB에 대해 알아보겠습니다. 웹서비스의 역할을 제대로 수행하기 위한 데이터를 저장하고 필요할때 열람해주는 것이 있어야하는데 이번 시간에 배울 

mongoDB를 node.js에서 사용하게 해주는 mongoose라는 노드의 확장모듈을 배워보겠습니다.

 

mongoose란, mongoDB라는 NoSQL, 데이터 베이스를 지원하는 노드의 확장 모듈입니다. mongoose는 mongoDB의

ODM입니다. ODM은 Object Document Mapping의 약자로, 문서를 DB에서 조회할 때 자바스크립트 객체로 

바꿔주는 역할을 해줍니다. mongoDB의 ODM에서는 mongodb-native등 여러가지가 있지만 그중 mongoose가 

가장 많이 사용됩니다. 

 

mongoose가 mongoDB를 사용하는 일종의 npm(node package manager)이기 때문에,mongose를 배우기전 

mongoDB에 대해서 알아보도록 하겠습니다.

 

1.NoSQL

NoSQL(원래 의미: non SQL 또는 non relational) 데이터베이스는 전통적인 관계형 데이터 베이스 보다 

덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다.

 

NoSQL 데이터베이스는 빅데이터와 실시간 웹 애플리케이션의 상업적 이용에 널리 쓰인다.SQL 계열 쿼리 언어를

사용할 수 있다는 사실을 강조한다는 면에서 "Not only SQL"로 불리기도 한다.

 

NoSQL의 분류는 다음과 같다.

  • Wide Columnar Store : 카산드라
  • Document Store : MongoDB
  • Key-Value Store : 다이나모, 레디스
  • Graph Store: Neo4j

그 중에서 유명한 것은 카산드라, MongoDB, Aws의 DynamoDB, Redis 정도로 볼 수 있다.

 

SQL과 NoSQL 비교

MySQL 용어 mongoDB 용어/개념
database database
table collection
index index
row JSON document
column JSON field
join embedding and linking
primary key _id field
group by aggregation

mongoDB에서는 질의문이 모두 JSON(BSON) 객체로 표현된다. 그리고 데이터베이스에 접근하고 

조정하는 구문은 자연어에 가까운 SQL에 비해 자바스크립트 문법에 가까운 모습을 보인다.

SQL 구문 mongoDB 구문
CREATE TABLE USERS(a Number, b Number) db.createCollection("mycoll")
INSERT INTO USERS VALUES(3,5) db.users.insert({a:3, b:5})
SELECT * FROM users db.users.find()
SELECT a,b FROM users WHERE age=20 db.users.find({age:20}, {a:1, b:1})
SELECT *FROM users WHERE age=20 ORDER BY name db.users.find({age:20}).sort({name:1})

성능면과 확장성 면에서 NoSQL이 SQL보다 우수한 편이다. 또한 유연하고 복잡성이 낮은 것이 특징이다.

하지만 마냥 좋은점만 있는 것이 아니다. ACID 트랜젝션(원자성/일관성/고립성/영구성)을 보장받기 위해 

RDBMS를 쓰는 편이 좋다. 가령 은행업무나 회사업무같은 중요한 DB는 RDBMS를 쓰는 것을 권장하고 있다.

 

MongoDB 란?

MongoDB는 C++로 작성된 오픈소스 문서지향(Document-Oriented) 크로스 플랫폼 데이터베이스이다.

 

1. Document

Document는 RDBMS에서의 Row(혹은 Tuple)과 동일한 개념, 예를 들어서 아래와 같은 JSON 형태의 

key-value가 쌍으로 이루어진 데이터 구조를 하나의 Document라고 보면 된다.

{
  "_id": "5d2sd23fd415135e53151355b",
  "username": "홍길동,
  "hashedPassword": "비밀번호",
}

각 Document는 _id를 갖고 있는데 이 값은 유일하다. Primary Key랑 동일한 개념이다.

 

특이하게도 RDBMS처럼 스키마로 정해진 뭔가가 없다. 따라서 username, hashedPassword 밑에다가

email을 추가한 Document를 새로 생성해도 문제 없이 동작한다.

 

2. Collection

Collection은 Document의 그룹이다. RDBMS로 따지자면 Table과 비슷한 개념, 다만 위에서 말했듯이 

스키마를 가지고 있지 않다.

 

3.Database

Database는 Collection들의 물리적인 컨테이너이자 가장 상위 개념이다. RDBMS에서의  Database와 동일하다.

 

Q. MongoDB에서 Join은?

RDBMS에서는 항상 Join이 일반적으로 많이 사용한다. 그렇다면 MongoDB도 Join이란 개념이 있을까?

불가능하지는 않지만 일반적으로 그렇게 쓰지는 않는다.

 

post와 comment가 있다고 가정해보자. post하나에 comment가 여러개 있으니 1대다 관계이다.

따라서 RDBMS를 썻다면 2개의 테이블로 분리시켯을 것이다. 하지만 MongoDB는 분리시키지 않는 

대신 post 내부에 comment를 너흔다. 이를 서브다큐먼트라고 한다.

 

따라서 아래와 같은 형태가 나오게 된다.

{
   _id: POST_ID,
   title: POST_TITLE,
   content: POST_CONTENT,
   username: POST_WRITER,
   tags: [ TAG1, TAG2, TAG3 ],
   comments: [
     { 
        username: COMMENT_WRITER,
        mesage: COMMENT_MESSAGE,
        time: COMMENT_TIME
     },
   ]
}

출처 : https://velopert.com/436

 

참고 자료

 

MongoDB란?

이 시리즈는 유데미의 The Complete Node.js Developer Course (3rd Edition) 강의 중 MongoDB 관련 내용을 듣고 정리한 글입니다.SQL(Structured Query Language)은 관계형 데이터베이스 관리 시스템(RDBM

velog.io

 

구름EDU - 모두를 위한 맞춤형 IT교육

구름EDU는 모두를 위한 맞춤형 IT교육 플랫폼입니다. 개인/학교/기업 및 기관 별 최적화된 IT교육 솔루션을 경험해보세요. 기초부터 실무 프로그래밍 교육, 전국 초중고/대학교 온라인 강의, 기업/

edu.goorm.io

 

'백엔드 > MongoDB' 카테고리의 다른 글

[Ubuntu] MongoDB 설치하기 (ubuntu 20.04)  (0) 2022.04.01
    '백엔드/MongoDB' 카테고리의 다른 글
    • [Ubuntu] MongoDB 설치하기 (ubuntu 20.04)
    Koras02
    Koras02
    현재 사용중인 언어 - next-js,react,vue, typescript

    티스토리툴바