8 몽고디비

source: categories/study/nodejs/nodejs8.md

8.1 몽고디비 설치하기

지난시간에 MySQL과 ORM(Object Relational Mapping)인 시퀄라이즈를 살펴봤습니다.
MySQL 예제는 9장부터 자세히 알아볼 예정입니다.
이번 장에선 NoSQL에 대해 알아보도록 하겠습니다.

8.1.1 NoSQL VS. SQL

8.1.1.1 NoSQL

  • MySQL같은 SQL 데이터베이스와는 다른 유형의 데이터

    • NoSQL의 대표주자인 mongoDB(몽고디비) 사용
      NoSQL에선 점유율이 가장 높습니다.

    • JOIN: 관계가 있는 테이블끼리 데이터를 합치는 기능(몽고디비 aggregate로 흉내 가능, JOIN만큼 사용성이 좋진않음)
      시퀄라이즈에선 include로 제공.
      몽구스라는 걸 배울텐데 몽구스에선 populate 기능을 사용해서 JOIN과 비슷한걸 만들 수 있음.

    • 빅데이터, 메시징, 세션 관리 등(비정형 데이터)에는 몽고디비 사용하면 좋음

SQL과 NoSQL 차이점

  1. SQL은 컬럼이 있고 NoSQL은 컬럼이 없고..
    NoSQL인 MongoDB는 그런게 없음.
    MongoDB는 JavaScript, JSON 형식인데 정확히는 JSON에서 자료형이 몇 개 추가된 BSON이라는 자료형임.
    여튼 자바스크립트 객체 형식이기만 하면 몽고DB에 자료를 넣을 수 있음.
    예상치 못한 컬럼이 생겨도 자료를 넣을 수 있음.

  2. 테이블간 관계
    MySQL은 include, JOIN 같은 기능으로 테이블간 관계를 정의.
    MongoDB은 자체적으로 JOIN 같은 기능 미지원.

  3. 안정성, 일관성
    SQL은 테이블 컬럼이 미리 정해져있음.
    그리고 primary key, foreign key - 중복체크도 해주고 다른 테이블에서 사용자 아이디를 지웠을 때 관련있는 테이블에서 지워지는.. ON DELETE CASCADE, ON UPDATE CASCADE
    그렇다고 NoSQL이 불안전하다는 것은 아님. 상대적으로 그렇다는 것.
    NoSQL은 확장성, 가용성이 좋음. 상대적인 것임. 그렇다고 SQL이 못쓸정도로 확장성 가용성이 안좋은건 아니라는 거.

  4. 용어
    SQL에선 테이블 / NoSQL에선 컬렉션
    SQL에선 로우 / NoSQL에선 다큐먼트
    SQL에선 컬럼 / NoSQL에선 필드

- 몽고DB는 언제사용? -

대부분의 상용 서비스에는 테이블간 관계가 있기 때문에 SQL이 좋음.
NoSQL은 빅데이터, 메시징, 세션 관리 등(비정형 데이터)에는 몽고디비 사용하면 좋음.
메시징은 서로간에 보내는 메시지일 수도 있지만, 프로그램이 어떻게 동작하는지 로그같은거 쌓을 때 좋음.

- 과거에 인기있던 스택 -

  • MEAN: MongoDB, Express, Angular, Node
    웹 서비스 모든 것을 자바스크립트로 만들 수 있어서 엄청 인기가 많았음.
    현재는 Angular 자리에 React나 Vue.

  • 그런데 보통 위 처럼 하진 않고 M이 MongoDB가 아니라 MySQL, 오라클, Postgre 같은걸 더 많이씀.