[Node] 7. mongoDB

BBaeng·2022년 2월 26일
0

nodejs 공부하기 위해 사용되는 데이터베이스인 mongoDB에 대해서 공부하고 nodejs에 적용하는 몽구스를 직접 해볼 예정이다.

1. NoSQL vs SQL

MySQL은 SQL의 대표적인 데이터베이스다. 그렇다면 NoSQL의 대표적인 데이터베이스는 무엇일까?

위에 보이는 몽고디비는 NoSQL의 대표 주자이다.

그렇다면 NoSQL과 SQL의 차이점은 무엇일까?

위에 보이는 표는 SQL과 NoSQL의 차이점을 정리한 표이다.

하나하나 차례대로 설명해보자.

  • NoSQL에는 고정된 테이블이 없다.

예를 들어 MySQL은 users 테이블을 생성할 때 name, age 등의 칼럼과 자료형, 옵션 등을 정의하짐나, 몽고디비는 users 컬렉션(Mysql기준 테이블)을 만들고 어떠한 데이터든 들어간다.

  • mongoDB에는 JOIN 기능이 없다.

JOIN기능이 없는 대신 aggregate를 통해 join과 비슷한 역할을 수행할 수 있다.
하지만 동시에 쿼리를 수행하는 경우 쿼리가 섞여 예상치 못한 결과를 낼 수 있다는 단점이 있다.

  • 확장성과 기용성이 뛰어나다.

MySQL과 달리 안정성과 일관성을 보장해주는 기능이 약한 대신 데이터를 빠르게 넣을 수 있고 쉽게 여러 서버에 데이터를 분산해서 넣을 수 있다는 장점이 있다.

  • 용어가 다르다.

이것은 표에 있는 것들을 매치해서 비교해보자!!

❓그렇다면 어떤 데이터베이스를 써야할까??

개발을 할 때 꼭 한가지 데이터베이스를 사용해야하는 것은 아니지만 각각의 특징에 맞게 알맞은 데이터베이스를 사용하면 된다.

예를들어 상용적인 서비스같은 경우는 일관성 있게 전달이 되어야하므로 SQL를
빅테이터, 메시징, 세션 관리등 빠르게 전달이 필요할 때는 NoSQL을 사용한다. (비정형 데이터를 사용할 때!)

MEAN스택

2. 데이터베이스, 컬렉션 생성하기

데이터베이스를 만들어 보기전에 어드민 설정 후 커넥션을 생성해보자!


어드민 설정 및 연결

mongoDB를 실행하고 있을 때 누구나 mongoDB에 접속하는 것은 보안성이 떨어진다. 그렇기에 관리자 계정을 추가하자.


기본적으로 존재하는 admin이라는 스키마로 변경한다.

db.createUser 메서드를 통해 관리자 계정을 추가한다.
여기서 roles : ['root'] 는 모든 권한이 있는 것으로 나중에 실무에 가게되면 상황에 맞는 역할을 부여하게 된다.

그 후 mongod를 명령 프롬프트로 실행해 위의 명령어로 접속한다.
여기서 --auth는 로그인이 필요하다는 의미이다,


그 후 앞에서 쓴 이름과 비밀번호를 입력하여 관리자 권한으로 들어간다.

이 외에도 맥, 리눅스도 있지만 지금 윈도우로 하고 있으니 나중에 아래의 참고자료를 통해 그 환경에서 해보자!


커넥션 생성하기

mongodb를 실행한 후 컴퍼스로 접속한다.


위의 사진은 실행화면이며 여기에서 Authentication을 Username/Password로 바꾼 후 등록한 몽고비디의 계정 이름과 비밀번호를 입력하여 Connect한다.


연결 중

연결이 완료되면 다음과 같이 기본적으로 존재하는 세 개의 데이터베이스가 화면에 표시된다.


데이터베이스 생성하기

이제 nodejs라는 데이터베이스를 생성해보자!

명령프롬프트를 사용하여 보여줄 것이지만 compass의 사진도 첨부할 것이다!

위의 그림처럼 use [데이터베이스명] 이렇게 치면 데이터베이스가 생성되고 그 데이터베이스로 이동하게 된다.

하지만 show dbs를 실행할 때에는 데이터베이스 목록에 뜨지 않는다.

그 이유는 아직 nodejs라는 데이터베이스가 아무 데이터도 들어있지 않기 때문이다. 그렇기에 현재 위치를 확인하기 위해 db를 눌러보았을 때 nodejs가 뜨면서 생성이 잘 되었음을 확인할 수 있다.

아래는 compass에서 만드는 방법이다!

이 버튼을 누르면 아래의 그림처럼 데이터베이스를 쉽게 생성할 수 있다!


컬렉션 생성하기

이제 컬렉션을 생성해보자!
컬렉션은 SQL로 따지면 테이블이라고 생각하면 편하다.

사실 다큐먼트(row)를 넣는 순간 컬렉션이 자동으로 생성되기에 따로 생성할 필요가 없다.

하지만 생성하는 방법은 알아두자.

이렇게 db.createCollection 이라는 명령어를 통해 collection을 생성할 수 있다.

중간에 잘못 만들어서 삭제를 해야한다면 db.[collction name].drop()을 하면 해당 collection을 삭제할 수 있다.

compass로도 살펴보자!

nodejs 데이터 베이스를 들어가서 보면 위의 버튼이 있을 것이다. 이걸 이용해서 삭제하면된다.

위의 그림은 명령 프롬프트를 이용해서 생성한 collection들이다.

compass가 편하지만 지원이 안 되는 부분들도 있으니 명령 프롬포트를 이용해서 하는 방법에 익숙해지자!

3. CRUD 작업하기

mongoDB는 필드(컬럼)을 정의하지 않아도 된다!

mongoDB는 자유로움이 장점이기에 json 형식이면 알아서 데이터가 들어가게 된다.

Create

설명의 편리성을 위해 compass로 json형태의 데이터를 만들어보자!

+09 로 해야 대한민국 시간

_id 란?
odject id 라고 겹치지않는 고유한 값. 날짜 포함 -> 시간순정렬 가능

몽고디비는 자유롭게 다양한 데이터 형식 받을 수 있다는 의미!


kang 의 object 아이디

comments와 user 연결 -> kang의 댓글

다만, mongoDB는 mysql과 달리 검사를 하지 않는다. 오타 시 취약.

콘솔 나중에
CRUD 콘솔로 한번 정리후 나중에 위에 내용 정리

4. 몽구스 사용하기

몽구스 ODM

  • 몽구스란?

몽고디비 작업을 쉽게 할 수 있도록 도와주는 라이브러리 (javascript로 구성)

❓ 왜 몽고디비도 javascript로 되어있는데 한 번더 쓰는 이유

💡 몽고디비에 없어 불편한 기능들을 몽구스가 보완을 해준다!
ex) 테이블과 유사한 기능, JOIN 기능 Update시 set 빼먹는 행위 방지해주는 기능, 추가
즉, SQL과 비슷한 방식으로 만들어서 기능을 보완해준다.

BUT! sql과 비슷해져서 확장성 가용성 제한되는 단점이 존재

그래서 사실상 몽구스를 사용하는건 모순이 존재하지만 db마저 javascript로 하고 싶은 개발자들이 만든 것이라고 보고, 공부하자!!

0개의 댓글