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 차이점
-
SQL은 컬럼이 있고 NoSQL은 컬럼이 없고..
NoSQL인 MongoDB는 그런게 없음.
MongoDB는 JavaScript, JSON 형식인데 정확히는 JSON에서 자료형이 몇 개 추가된 BSON이라는 자료형임.
여튼 자바스크립트 객체 형식이기만 하면 몽고DB에 자료를 넣을 수 있음.
예상치 못한 컬럼이 생겨도 자료를 넣을 수 있음. -
테이블간 관계
MySQL은 include, JOIN 같은 기능으로 테이블간 관계를 정의.
MongoDB은 자체적으로 JOIN 같은 기능 미지원. -
안정성, 일관성
SQL은 테이블 컬럼이 미리 정해져있음.
그리고 primary key, foreign key - 중복체크도 해주고 다른 테이블에서 사용자 아이디를 지웠을 때 관련있는 테이블에서 지워지는..ON DELETE CASCADE
,ON UPDATE CASCADE
그렇다고 NoSQL이 불안전하다는 것은 아님. 상대적으로 그렇다는 것.
NoSQL은 확장성, 가용성이 좋음. 상대적인 것임. 그렇다고 SQL이 못쓸정도로 확장성 가용성이 안좋은건 아니라는 거. -
용어
SQL에선 테이블 / NoSQL에선 컬렉션
SQL에선 로우 / NoSQL에선 다큐먼트
SQL에선 컬럼 / NoSQL에선 필드
- 몽고DB는 언제사용? -
대부분의 상용 서비스에는 테이블간 관계가 있기 때문에 SQL이 좋음.
NoSQL은 빅데이터, 메시징, 세션 관리 등(비정형 데이터)에는 몽고디비 사용하면 좋음.
메시징은 서로간에 보내는 메시지일 수도 있지만, 프로그램이 어떻게 동작하는지 로그같은거 쌓을 때 좋음.
- 과거에 인기있던 스택 -
-
MEAN: MongoDB, Express, Angular, Node
웹 서비스 모든 것을 자바스크립트로 만들 수 있어서 엄청 인기가 많았음.
현재는 Angular 자리에 React나 Vue. -
그런데 보통 위 처럼 하진 않고 M이 MongoDB가 아니라 MySQL, 오라클, Postgre 같은걸 더 많이씀.