MongoDB Atlas를 사용해 Node.js로 데이터베이스 연결하기

MongoDB-Community (로컬 컴퓨터에 설치하는 데이터베이스) 외에도
MongoDB를 이용할 수 있는 방법이 있습니다.
바로 클라우드 서비스인 MongoDB-Atlas입니다.
1.Atlas로 데이터베이스 설정하기
Try MongoDB Products
Try MongoDB products free. Download locally, or use in the cloud. Our software makes it easy for developers to work with data.
www.mongodb.com
Cloud, On-Premises, Tools 중 Cloud로 들어가
회원가입을 하고 Get started free를 클릭합니다.

저는 공부하는 단계이니 공짜인 Shared Clusters를 선택하겠습니다.
Create a cluster를 클릭합니다.

다음 페이지로 넘어가면 다음과 같은 화면이 뜹니다.
기본적으로 아마존 웹 서비스, 노스 버지니아 지역이 디폴트로 지정되는데,
저는 이 설정을 건드리지 않고 그냥 넘겼습니다.

클러스터 티어 역시 공짜인 M0 Sandbox!
지금 당장 실제 서비스를 제공할 일은 없으니까요.

버전을 선택하고 Cluster Name을 설정합니다.
그리고 맨 아래 Create Cluster를 누르면...

아래와 같은 화면이 뜹니다.

왼쪽 메뉴 중 Security의 Database Access로 들어갑니다.
여기서 이 데이터베이스에 접근할 수 있는 user를 생성해줍니다.
Add New Database User를 클릭해주세요.

생성할 user에 대한 옵션 설정 창이 뜹니다.

Authentication Method는 M0에서는 Password밖에 안됩니다.

Autogenerate Secure Password를 클릭하면
랜덤으로 강력한 비밀번호를 생성해줍니다.
만약 이 옵션을 사용할 계획이라면, 꼭 비밀번호를 복사해서 저장해둡시다.

생성될 유저의 role를 지정해줍니다.
기본적으로 admin, read and write to any database, only read가 있습니다.
admin과 read and write to any database 중
어느 걸 선택해도 상관은 없지만
데이터베이스를 이용한 CRUD를 공부 중이므로
저는 read and write to any database를 선택하겠습니다.

유저가 생성된 모습

다음, 다시 Security 목록 중 Network Access에 들어갑니다.
여기서, 해당 데이터베이스에 접근할 수 있는 IP address를 등록합니다.
Add IP Address 버튼을 클릭하세요.

Current IP address를 등록할 수도 있고,
anywhere에서의 접속을 허용할 수도 있습니다.
저는 제 IP address를 넣었지만,
anywhere 옵션을 선택하면 0.0.0.0/0로 등록됩니다.

IP 주소가 등록되었습니다.

다시 왼쪽의 Data Storage에서 Clusters로 들어가면
해당 샌드박스가 정상적으로 생성된 걸 확인할 수 있습니다.

connect 버튼을 클릭합니다.

Node JS의 app.js와 연결하기 위해
Connect your application을 선택하겠습니다.

드라이버(Node.js)와 그 버전을 선택하면
그에 알맞은 url 코드를 생성합니다.
해당 url 코드를 복사해줍니다.

2. Node.js로 연동하기
작업하고 있는 application이 있는 폴더에서
npm 패키지 모듈 중 mongodb를 설치합니다.

설치한 mongodb 모듈을 활용해
아래와 같이 데이터베이스에 연결합니다.
const url에 있는 내용은 아까 복사한 url입니다.
기존 복사 코드에서 <password>, <dbname>이라고 되어 있는 부분을
아까 발급받은(혹은 직접 작성한) 비밀번호,
접속할 데이터베이스 이름(없다면 자동으로 생성합니다)
로 변경하면 됩니다.
const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;
const url = `mongodb+srv://moonimooni:<password>@cluster0.9tapk.mongodb.net/
<dbname>?retryWrites=true&w=majority`
MongoClient.connect(url)
.then(client => {
console.log('mongo connected');
console.log(client);
})
.then(app.listen(3000, () => {
console.log('3000 port on');
}))
.catch(err => console.log(err));

엄청난 양의 JSON 타입 데이터가 콘솔에 찍힙니다.
MongoDB 데이터베이스와 application 연결에 성공했습니다.
(+주의)
만약 비밀번호를 직접 설정할 때 특수기호를 포함한다면
This password contains special characters which will be URL-encoded.
이런 안내문이 나옵니다.
해당 비밀번호를 그대로 url password 란에 입력하면
MongoParseError: Incomplete key value pair for option
이런 오류가 뜨며 연결에 실패합니다.