티스토리 뷰

 Database?

- Database는 데이터를 일정한 형식으로 저장할 수 있게 도와주는 곳이다.
- 관계형 Database는 SQL을 사용하여 데이터를 CRUD한다.
- 하지만 Mongodb에서는 NoSQL을 사용할 것이다.(SQL 언어를 쓰지 않고도 DB를 이용할 수 있다.)
- MongoDB의 장점은 아래와 같다.

1. 처음 다룰 때 어려운 셋팅 작업이 필요하지 않다.(스키마 생성 등 필요 없음)
2. SQL을 배우지 않아도 된다.
3. 복잡한 자료형을 몰라도 된다.
4. 평생 무료 호스팅해주는 곳이 있다.
cf) NoSQL DB 종류 몇 개 : Dynamo, Oracle NoSQL, MongoDB, Redis, Cassandra

cf) NoSQL에서 데이터는 대충 아래와 같은 자료형에 담겨있다고 생겼다고 생각하자

- 데이터가 RDB처럼 행과열이 구분되어 담겨져 있는게 아니라 JS의 object(객체) 형태처럼 담겨있다.

- 데이터를 쉽고 자유롭게 CRUD 할 수 있는게 장점이다.


● MongoDB Atlas 가입 후 호스팅받기 / MongoDB 셋팅

- DB를 PC에 직접 설치하기도 하지만 만약 내가 만든 사이트를 실제 배포할 것이라면 클라우드 서비스를 이용해 호스팅하는 것이 안전하다.
- 데이터 백업도 알아서 해주고 갑자기 이용자 수가 폭증할 때 용량 걱정도 없다. 무엇보다 접속 속도가 빠르다. 
- 이러한 것들을 무료로 해주는 MongoDB Atlas 라는 사이트가 있다.(512MB 정도 무료로 호스팅 가능)

- MongoDB를 사용하기 위해 아래의 과정을 따라해보자

 

1. 구글에 Mongodb atlas 라고 검색 & 가입(난 구글 계정으로 가입했다.)

설문조사 같은거니 대충 대답하자


2. 무료 티어 선택 & 서비스를 제공하려는 국가와 가장 가까운 Region 선택(나는 서울 선택)


3. Database Access 메뉴에서 DB 접속용 ID&PW 생성(Database에 접속할 수 있는 ID&PW을 설정)

Add New DataBase User 버튼 클릭

3-1. 주의 : 역할을 atlas admin으로 설정해야한다. (그래야 해당 ID를 통해 node.js에서 DB 접속 가능)

생성완료


4. Network Access 메뉴에서 IP 추가

- Database에 접속할 수 있는 IP를 미리 정의해놓는 일종의 보안장치이다.

- 장소를 이동하며 Database를 이용할 수 있으니 Allow access from anywhere 을 누르거나 0.0.0.0/0 추가

Add IP Address 버튼 클릭

 

5. DB 접속 URL 찾기

- Database connect를 위한 접속 URL을 구하자(connect : 로컬과 Database 연결)

1. 좌측의 Database 메뉴 클릭 후 CONNECT 버튼 누르기

 

2. Connect Your Application 버튼 누르기

 

3. Select your driver and version 에서 버전에 맞는 Node.js 선택

3-1. Add your connection string into your application code에서 나오는 접속 URL(Connection String) 복사해서 저장

3-2. Database Access 메뉴에서 만든 ID&PW가 해당 URL에 들어가야한다.

현재 PC에 설치되어있는 node.js가 v18.15.0.이니까 4.1 or later를 선택

 

6. Database / collection 만들기

- Cluster는 하나의 호스팅 공간, Cluster 안에 Database를 만들어야 데이터를 저장할 수 있다.

강의랑 똑같이 했다. DB 이름은 원하는대로 설정 가능

- 위의 과정을 모두 정상적으로하면 todoapp 이라는 이름의 Database가 하나 생성된다. 
- 앞으로 이 DB를 컴퓨터에서 접속하려면 접속 URL(Connection String)을 코드에 추가하면 된다.
- 접속 URL(Connection String)에는 Database Access 메뉴에서 만든 DB 접속용 ID&PW, DB 이름이 들어가야한다.


● server.js에서 MongoDB 접속

- 접속 URL(Connection String)을 통해 Node.js와 DB의 직접 통신이 가능하다.
- server.js에서 DB에 접속하는 방법을 알아보자

 

1. 터미널에서 아래의 명령어를 입력해서 라이브러리 설치(MongoDB 접속을 쉽게 도와주는 라이브러리)

npm install mongodb@3.6.4

 

2. server.js 상단에 아래 코드 추가

const MongoClient = require('mongodb').MongoClient;

 

3. 2번 코드 하단에 아래 코드 추가

const MongoClient = require('mongodb').MongoClient;
MongoClient.connect('접속 URL', function(error, client) {
    if(error) return console.log(error);
    // 서버띄우는 코드 여기로 옮겨야 함
    // (웹서버를 오픈하고 싶은 포트 번호, 잘 열리면 'listening on 8080'을 출력해라)
    app.listen(8080, function() {
        console.log('server on : listening on 8080');
    });
});

- 서버 띄우는 코드(app.listen)를 위의 코드 안으로 옮기면 된다.
- nodemon server.js 로 서버 실행 후 터미널에 listening on 8080이라고 뜨면 성공

터미널에 메세지가 출력됐다. = 성공
로컬 접속도 잘 된다.

이런 메세지는 무시해도 된다.

(node:14796) Warning: Accessing non-existent property 'MongoError' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
(node:14796) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.

 

cf1)

- 터미널에 warning이 나오는건 상관없는데 에러가 나거나 listening on 8080 글자가 안 나오면 아래의 사항을 확인해보자
1. 접속 URL 양끝에 따옴표 잘있는지 확인
2. URL의 ID&PW란에 Atlas 계정이 아니라 Database Access 메뉴에서 만든 DB 계정 넣었는지 확인
3. 만약 PW에 특수문자가 있다면 아래 링크를 참고해보자
https://www.mongodb.com/docs/atlas/troubleshoot-connection/#special-characters-in-connection-string-password
4. Network Access 메뉴에서 허용한 IP에서 접속하고 있는지 확인
5. app.listen 코드 위치 확인
6. 오타 확인

 

Troubleshoot Connection Issues — MongoDB Atlas

Docs Home → MongoDB Atlas This page outlines common connection issues and possible resolutions.To learn more about connecting to an Atlas cluster, see the Get Started with Atlas tutorial.Your database deployment's Connect button may be disabled if your d

www.mongodb.com

 

cf2) server.js 코드 전체

const express = require('express'); // 첨부
const app = express(); // 사용

app.use(express.urlencoded({extended: true}));

const MongoClient = require('mongodb').MongoClient;
MongoClient.connect('접속 URL', function(error, client) { // callback function
    if(error) return console.log(error);
    // 서버띄우는 코드 여기로 옮겨야 함
    // (웹서버를 오픈하고 싶은 포트 번호, 잘 열리면 'listening on 8080'을 출력해라)
    app.listen(8080, function() {
        console.log('server on : listening on 8080');
    });
}); // MongoClient.connect(DB 접속이 완료되면, callback function 실행)

app
.get("/", (req, res) => { // {"/", (req, res) = 경로, (요청내용, 응답할 방법)}
    res.sendFile(__dirname + '/index.html'); // .sendFile(보낼파일경로)
})
.get('/pet', function(req, res) { // app.get(경로, callback function)
    res.send("펫용품 사라고");
})
.get('/beauty', function(req, res) {
    res.send("뷰티용품 사라고");
})
.get("/write", (req, res) => {
    res.sendFile(__dirname + '/write.html');
})
.post("/add", (res, req) => { // <input>에 담겨있는 정보는 req에 들어있다.
    console.log(res.body);
    console.log(res.body.title);
    console.log(res.body.date);
    req.send("전송완료");
});

'흥미 > Node.js+MongoDB' 카테고리의 다른 글

#12 HTML에 DB data 넣어주기1(EJS)  (0) 2023.04.19
#11 MongoDB에 자료 저장  (1) 2023.04.18
#9 REST API  (0) 2023.04.12
#8 <form>에서 server로 데이터보내기  (0) 2023.04.11
#7 Bootstrap을 이용한 UI 개발  (0) 2023.04.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함