티스토리 뷰
● 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. 오타 확인
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
- node.js
- MongoDB
- Phaser3
- Phaser
- Java8
- OS
- SpringBoot
- 코테
- 코딩테스트
- 프로세스
- jpa
- 빅데이터 분석기사
- git
- Spring Boot
- DART
- API
- db
- 자료구조
- spring
- 메모리
- java
- 빅데이터
- Advanced Stream
- 알고리즘
- 프로그래머스
- MySQL
- 운영체제
- Stream
- SQL
- nosql
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |