개발 공부 기록

나는 무엇을 하는가?

프로젝트/chat-app

채팅 앱 mongoDB 연결하기

진!!!!! 2024. 12. 5. 19:00

채팅 앱을 구현 중인데, DB를 연결하려고 한다.

DB는 어떤걸 쓸까 고민하다가... mongoDB를 쓰기로 결정했다.

 

MongoDB란 무엇인가?

 

채팅 앱에 mognoDB를 사용한 이유

  1. 닉네임과 메세지, 시간만 있으면 되므로 관계를 맺고있는 데이터가 적고, 변경되지 않음
  2. 스키마가 없어서 추후 사진, 파일 전송 등 기능 확장이 용이
  3. 러닝커브가 낮음
  4. 읽기/쓰기가 빠르다

최근 sqld를 공부하면서 sql이랑 조인 연산을 공부했어서 RDBMS를 이용해서 sql를 직접 사용해보고 싶은 마음도 있었지만, 채팅 앱을 구현하기 위해서는 noSQL이 더 나은 선택인 것 같아서 noSQL로 구현하기로 했다. 채팅 메세지는 noSQL, 채팅방 데이터는 SQL로 구현하는 경우가 있다고 하니 우선 개발해보고 확장이 필요하면 그 때 mysql을 도입하면 좋을 것 같다!

 

먼저 MongoDB를 설정해보자.

 

1. MongoDB 설치

Download MongoDB Community Server

 

Try MongoDB Community Edition

Try MongoDB Community Edition on premise non-relational database including the Community Server and Community Kubernetes Operator for your next big project!

www.mongodb.com

 

MongoDB Community Server을 공식 웹사이트에서 설치했다.

따로 커스텀을 하진 않았다.

그냥 다 Next 누름

 

Compass가 설치되었으면 들어가서 New Connection을 connect한다.

사진에서는 기본 URI로 설정되어있는데, 채팅 앱 용 connection을 분리하고 싶어서 뒤에 chat_app을 붙였다.

Connect를 누르면 기본적으로 admin, config, local이 생긴다.

 

2. 패키지 설치

서버 폴더에 패키지를 설치한다.

npm install mongoose dotenv

mongoose와 환경변수를 관리하기 위해dotenv를 설치한다.

 

Mongoose는 MongoDB와 Node.js를 연결해주는 ODM(Object Data Modeling) 라이브러리이다.

  1. 스키마 정의 및 모델 생성
  2. 타입 검증, 데이터 유효성 검사
  3. 미들웨어 기능을 위해 사용한다.

NoSQL은 스키마가 없어서 편하고 확장이 쉽다는 장점이 있지만, 그래도 스키마가 없으면 개발할 때 헷갈리는 경우가 많아 스키마를 만드는 편이 좋다.

 

 prisma만 써보았는데 Mongoose는 처음 사용해본다.

MongoDB에 접속해서 chat_app Connection을 만들었다.

 

//.env
MONGODB_URI=mongodb://localhost:27017/chat_app

 

db.js에서 db를 연결해준다.

//config/db.js
import mongoose from "mongoose";
import dotenv from "dotenv";

dotenv.config();

const connectDB = async () => {
  try {
    await mongoose.connect(process.env.MONGODB_URI);
    console.log("MongoDB Connected");

    mongoose.connection.on("error", (err) => {
      console.error("MongoDB 연결 에러:", err);
    });

    process.on("SIGINT", async () => {
      await mongoose.connection.close();
      process.exit(0);
    });
  } catch (error) {
    console.error(`Error: ${error.message}`);
    process.exit(1);
  }
};

export default connectDB;

 

index.js에서 connectDB를 실행시킨다.

//index.js
import express from "express";
import { createServer } from "node:http";
import { Server } from "socket.io";
import connectDB from "./config/db.js";

const app = express();
app.use(express.json());

connectDB();

const server = createServer(app);

server.listen(3000, () => {
  console.log("server running at <http://localhost:3000>");
});

db 연결 코드를 만들고 서버 코드에 connectDB()를 추가했다.

잘 연결되었다..!

 

Database와 Collection까지 만들었다.

 

Collection이란 RDBMS에서 테이블과 같은 역할을 하는 데이터의 집합이라고 보면 된다.

테이블 내부에 튜플이 있고 컬렉션 내부엔 도큐먼트가 있다.

 

MongoDB Community가 있고 MongoDB Atlas도 있어서 헷갈리는 사람이 많을 것 같다. (내가 제일 헷갈림)

간단하게 말해서, Community는 아까 설치한 Compass 처럼 로컬에서 설치하여 관리할 수 있는 DB고 Atlas는 AWS같이 클라우드에 올려서 DB를 설치한 컴퓨터가 아니라 다른 컴퓨터에서도 활용할 수 있는 것이다.

 

Community를 쓰면 배포할 때 DB알아서 따로 올려야 한다

그래서 나는 우선 Community로 개발을 한 후에, Atlas로 변경하거나 AWS RDS를 사용할 수 있는 방법을 찾아볼 예정이다!

 

끝~