티스토리 뷰
● 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을 설정)
3-1. 주의 : 역할을 atlas admin으로 설정해야한다. (그래야 해당 ID를 통해 node.js에서 DB 접속 가능)
4. Network Access 메뉴에서 IP 추가
- Database에 접속할 수 있는 IP를 미리 정의해놓는 일종의 보안장치이다.
- 장소를 이동하며 Database를 이용할 수 있으니 Allow access from anywhere 을 누르거나 0.0.0.0/0 추가
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에 들어가야한다.
6. Database / collection 만들기
- Cluster는 하나의 호스팅 공간, Cluster 안에 Database를 만들어야 데이터를 저장할 수 있다.
- 위의 과정을 모두 정상적으로하면 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
- Stream
- Java8
- API
- db
- spring
- 운영체제
- 알고리즘
- git
- node.js
- Phaser
- Phaser3
- 빅데이터
- 빅데이터 분석기사
- MongoDB
- Advanced Stream
- 프로그래머스
- 프로세스
- Spring Boot
- 코딩테스트
- nosql
- DART
- SQL
- OS
- java
- jpa
- SpringBoot
- 코테
- 자료구조
- MySQL
- 메모리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |