nodejs 공부하기 위해 사용되는 데이터베이스인 mongoDB에 대해서 공부하고 nodejs에 적용하는 몽구스를 직접 해볼 예정이다.
MySQL은 SQL의 대표적인 데이터베이스다. 그렇다면 NoSQL의 대표적인 데이터베이스는 무엇일까?
위에 보이는 몽고디비는 NoSQL의 대표 주자이다.
그렇다면 NoSQL과 SQL의 차이점은 무엇일까?
위에 보이는 표는 SQL과 NoSQL의 차이점을 정리한 표이다.
하나하나 차례대로 설명해보자.
예를 들어 MySQL은 users 테이블을 생성할 때 name, age 등의 칼럼과 자료형, 옵션 등을 정의하짐나, 몽고디비는 users 컬렉션(Mysql기준 테이블)을 만들고 어떠한 데이터든 들어간다.
JOIN기능이 없는 대신 aggregate를 통해 join과 비슷한 역할을 수행할 수 있다.
하지만 동시에 쿼리를 수행하는 경우 쿼리가 섞여 예상치 못한 결과를 낼 수 있다는 단점이 있다.
MySQL과 달리 안정성과 일관성을 보장해주는 기능이 약한 대신 데이터를 빠르게 넣을 수 있고 쉽게 여러 서버에 데이터를 분산해서 넣을 수 있다는 장점이 있다.
이것은 표에 있는 것들을 매치해서 비교해보자!!
❓그렇다면 어떤 데이터베이스를 써야할까??
개발을 할 때 꼭 한가지 데이터베이스를 사용해야하는 것은 아니지만 각각의 특징에 맞게 알맞은 데이터베이스를 사용하면 된다.
예를들어 상용적인 서비스같은 경우는 일관성 있게 전달이 되어야하므로 SQL를
빅테이터, 메시징, 세션 관리등 빠르게 전달이 필요할 때는 NoSQL을 사용한다. (비정형 데이터를 사용할 때!)
MEAN스택
데이터베이스를 만들어 보기전에 어드민 설정 후 커넥션을 생성해보자!
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가 편하지만 지원이 안 되는 부분들도 있으니 명령 프롬포트를 이용해서 하는 방법에 익숙해지자!
mongoDB는 필드(컬럼)을 정의하지 않아도 된다!
mongoDB는 자유로움이 장점이기에 json 형식이면 알아서 데이터가 들어가게 된다.
설명의 편리성을 위해 compass로 json형태의 데이터를 만들어보자!
+09 로 해야 대한민국 시간
_id 란?
odject id 라고 겹치지않는 고유한 값. 날짜 포함 -> 시간순정렬 가능
몽고디비는 자유롭게 다양한 데이터 형식 받을 수 있다는 의미!
kang 의 object 아이디
comments와 user 연결 -> kang의 댓글
다만, mongoDB는 mysql과 달리 검사를 하지 않는다. 오타 시 취약.
콘솔 나중에
CRUD 콘솔로 한번 정리후 나중에 위에 내용 정리
몽고디비 작업을 쉽게 할 수 있도록 도와주는 라이브러리 (javascript로 구성)
❓ 왜 몽고디비도 javascript로 되어있는데 한 번더 쓰는 이유
💡 몽고디비에 없어 불편한 기능들을 몽구스가 보완을 해준다!
ex) 테이블과 유사한 기능, JOIN 기능 Update시 set 빼먹는 행위 방지해주는 기능, 추가
즉, SQL과 비슷한 방식으로 만들어서 기능을 보완해준다.
BUT! sql과 비슷해져서 확장성 가용성 제한되는 단점이 존재
그래서 사실상 몽구스를 사용하는건 모순이 존재하지만 db마저 javascript로 하고 싶은 개발자들이 만든 것이라고 보고, 공부하자!!