본문 바로가기
개발 Study/Node

[Node.js/MongoDB] 실시간 채팅 구현하기 - MongoDB 설치, 연동 및 모델 생성

by jiyoon_92 2022. 7. 12.
반응형

nodejs + mongoDB

실시간 채팅 구현을 하려면 NoSQL 데이터베이스를 써야하므로 많은 DB 중 Node랑 잘 맞는 그리고 Socket.io와도 잘 맞는 MongoDB로 선택했다.

*NoSQL이란 ? 

NoSQL 데이터베이스(일명 "SQL만을 사용하지 않는 데이터베이스")는 표 형식이 아니며, 관계형 테이블과는 다른 방식으로 데이터를 저장한다. NoSQL 데이터베이스는 데이터 모델에 따라 유형이 다양하다. 주요 유형으로는 문서, 키 값, 와이드 컬럼, 그래프가 있으며, 이들은 유연한 스키마를 제공하고, 대량의 데이터와 높은 사용자 부하에서도 손쉽게 확장이 가능하다.

https://www.mongodb.com/ko-kr/nosql-explained

 

NoSQL이란 무엇입니까? NoSQL Databases 설명

NoSQL은 먼저 구조를 정의할 필요 없이 데이터를 저장 및 검색하는 데이터베이스 유형으로, 보다 견고한 관계형 데이터베이스의 대안이 될 수 있습니다.

www.mongodb.com

 

1. MongoDB 설치

https://www.mongodb.com/try/download/community

 

MongoDB Community Download

Download the Community version of MongoDB's non-relational database server from MongoDB's download center.

www.mongodb.com

처음에 로그인하면 Atlas로 들어가서 클라우드용으로 만들게 되는데 위 링크로 접속하게 되면 Community 버전을 Local에서 무료로 이용할 수 있다. 원하는 OS 버전으로 설치하면 아래와 같이 GUI로 DB를 관리할 수 있는 Mongo Compass를 이용할 수 있다.

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

 

Deprecation Warnings - Mongoose 사용자가 사용하는 MongoDB Node.js 드라이버에는 몇 가지 사용 중단이 있습

 

runebook.dev

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 연결을 시도한다.

DB연결 코드

npm start로 실행시키고 성공 문구가 뜨면 연결 성공!

연결 완료

 

5. Mongoose로 Model 생성하기

실시간 채팅 구현을 위해 데이터베이스의 모델들을 다음과 같이 구성했다. NoSQL이라 FK 의미는 없지만 서로 참조해야할 값이므로 표기했다. (개발 중이므로 추후 변경 시 업데이트 예정)

실시간 채팅 DB 다이어그램

 

이 중 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를 테스트 해본 걸 쓰도록 하겠다~~~ 오늘도 알찬 하루ㅎㅎㅎ

반응형

댓글