실시간 채팅 구현을 하려면 NoSQL 데이터베이스를 써야하므로 많은 DB 중 Node랑 잘 맞는 그리고 Socket.io와도 잘 맞는 MongoDB로 선택했다.
*NoSQL이란 ?
NoSQL 데이터베이스(일명 "SQL만을 사용하지 않는 데이터베이스")는 표 형식이 아니며, 관계형 테이블과는 다른 방식으로 데이터를 저장한다. NoSQL 데이터베이스는 데이터 모델에 따라 유형이 다양하다. 주요 유형으로는 문서, 키 값, 와이드 컬럼, 그래프가 있으며, 이들은 유연한 스키마를 제공하고, 대량의 데이터와 높은 사용자 부하에서도 손쉽게 확장이 가능하다.
https://www.mongodb.com/ko-kr/nosql-explained
1. MongoDB 설치
https://www.mongodb.com/try/download/community
처음에 로그인하면 Atlas로 들어가서 클라우드용으로 만들게 되는데 위 링크로 접속하게 되면 Community 버전을 Local에서 무료로 이용할 수 있다. 원하는 OS 버전으로 설치하면 아래와 같이 GUI로 DB를 관리할 수 있는 Mongo Compass를 이용할 수 있다.
2. MongoDB 데이터베이스 생성
왼쪽 목록에서 데이터베이스를 클릭하고 Create database를 클릭하면
위에는 데이터베이스 명을 적고 Collection name에는 추가할 테이블 명을 적으면 된다. Collection은 관계형 DB의 Table 또는 Schema와 같다고 보면된다. OpenChatDB라는 데이터베이스를 생성했고 Collection은 코드로 생성할거지만 무조건 최초 생성은 필요해서 임의로 입력하여 생성했다.
3. Node에 Mongoose 설치하기
Node에서 MongoDB와 연동하여 사용할 수 있는 Mongoose 라이브러리를 npm으로 설치한다.
$npm install mongoose
4. Mongoose로 DB 연결하기
DB 경로를 mongoose.connect() 함수에 넣어준다. '27017'은 로컬에서 mongoDB연결 시 기본으로 제공되는 포트번호다. 연결 시 출력되는 경고를 해결하기 위해 connect함수에 옵션을 설정하는데 기본적으로 두 가지 정도 넣으며 때에 따라 옵션을 추가해야 한다.
Connect Option 참조 사이트 : https://runebook.dev/ko/docs/mongoose/deprecations
const mongoose = require('mongoose');
const dbURI = 'mongodb://localhost:27017/OpenChatDB'
const connect = () => {
mongoose.connect(dbURI,
{
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => console.log('MongoDB 연결 성공')).catch((err) => {
console.log(err);
});
}
mongoose.connection.on('error', (error) => {
console.error('MongoDB 연결 에러', error);
});
mongoose.connection.on('disconnected', () => {
console.error('MongoDB 연결이 끊겼습니다. 연결을 재시도 합니다');
connect();
});
module.exports = connect;
app.js 에 connect() 함수를 이용해 mongodb 연결을 시도한다.
npm start로 실행시키고 성공 문구가 뜨면 연결 성공!
5. Mongoose로 Model 생성하기
실시간 채팅 구현을 위해 데이터베이스의 모델들을 다음과 같이 구성했다. NoSQL이라 FK 의미는 없지만 서로 참조해야할 값이므로 표기했다. (개발 중이므로 추후 변경 시 업데이트 예정)
이 중 Group 모델을 생성하는 코드는 아래와 같다.
const mongoose = require('mongoose');
const {Schema} = mongoose;
const {Types: {ObjectId}} = Schema;
/**
* 아이디, 그룹명, 생성일자, 마감기한
*/
const groupSchema = new Schema({
title: {
type: String, // 자료형
required: true, // 필수 여부
},
createAt: {
type: Date,
default : Date.now(),
required : true,
},
deadline: {
type: Date,
default : Date.now(),
required : true,
}
})
module.exports = mongoose.model('Group', groupSchema);
다음 포스팅에서는 모델들을 다루는 Controller.js를 작성하여 CRUD API를 구현하고 Postman을 통해 API를 테스트 해본 걸 쓰도록 하겠다~~~ 오늘도 알찬 하루ㅎㅎㅎ
'개발 Study > Node' 카테고리의 다른 글
[Error] npm i @socket.io/admin-ui 설치 에러 해결 (1) | 2022.08.19 |
---|---|
[Node.js/Mongoose] 실시간 채팅 구현하기 - CRUD API 생성하기 및 Express 라우터 사용 (0) | 2022.07.13 |
[Error] npm start 에러 처리 방법 (1) | 2022.07.06 |
[Node.js] 실시간 채팅 구현하기 - Socket.io, express 설치 (0) | 2022.07.01 |
[Node.js] Node.js 및 npm 설치하기 (0) | 2022.06.29 |
댓글