포시코딩

Express + mongoose(몽구스) 연결하기 본문

Node.js

Express + mongoose(몽구스) 연결하기

포시 2022. 11. 14. 23:04
728x90

https://www.zerocho.com/category/NodeJS/post/57924d1e8241b6f43951af1a

 

https://www.zerocho.com/category/NodeJS/post/57924d1e8241b6f43951af1a

 

www.zerocho.com

 

기존에 있던 프로젝트를 리뉴얼 하다가 MongoDB Cloud를 통해 쓰던 데이터들을 

MySQL로도 해보자! 해서 AWS RDS도 프리티어로 열어서 호기롭게 시작했다. 

 

처음에는 오랜만에 사용하는 MySQL 쿼리문들에 어색함과 낯설음이 들었지만 차차 적응해갈 무렵 문제가 생겼다. 

프로젝트 특성 때문인지 내가 그렇게 설계한것인지 JSON Object와 JSON Array를 쓸 일이 많았는데

json_array, json_unquote, json_extract 등등 특수한 함수들로 똥꼬쇼를 하며 겨우겨우 문제를 해결해 나가다가

Array 안에 Object 가 여러개 담긴 형태의 JSON 데이터를 다루는데에서 한계를 느꼈다. 

 

주위 현업자분들께 물어보니 그렇게 쓸거면 MySQL을 쓰지 말라고 하면서 

쓸거면 차라리 다 풀어서 Relational 데이터 형태로 쓰라고 하셨다. 

ㅇㅋ 포기

 

 

다시 예전에 썼던 MongoDB 사용하는 코드들 재활용해서 날먹하려고 했는데 

그 때는 Node.js를 막 배우던 시기라 server.js에 모든 백엔드 단을 다 우겨넣어 구현해서

지금의 정리된 프로젝트에는 맞지 않는 코드들이었다. 

 

그렇게 하루가 넘는 삽질 끝에 결국 mongoose를 사용하게 되었다. 

 

좀 알아보니 예전 java로 개발할 때 썼던 MyBatis 사용법과 유사한거 같아 적응이 쉬웠던 것 같다. 

최종적으로 위에 링크한 블로그의 도움을 많이 받아 db.js도 모듈화해서 원하는 그림대로 사용할 수 있었다. 

 

npm i mongoose

mongoose만 받으면 mongodb도 포함되어 있다고 함.

 

(db.js)

const DB_URL = 'mongodb://localhost:27017';

const mongoose = require('mongoose');
module.exports = () => {
  function connect() {
    // mongoose.connect('아이디:비밀번호@주소:포트/admin', { dbName: '데이터베이스' }, function(err) {});
    mongoose.connect(DB_URL, { dbName: DB_NAME }, (err) => {
      if (err) console.error('mongodb connection error', err);
      else console.log('mongodb connected');
    });
  }
  connect();
  mongoose.connection.on('disconnected', connect);

  // mongoose models 연결
  require('../mongoose/User');
  require('../mongoose/Group');
  require('../mongoose/Invite');
};

MongoDB를 local로 쓰고 있기 때문에 위와 같이 해주었다.

접속할 때 아디, 비번이 필요한 환경이면 주석처리한 부분 참고

 

제일 아래 require()로 불러오는 User, Group, Invite들이 model들이다. 

일단 주석처리하고 진행하면된다. 

 

db.js를 만들었으니 app.js에서 호출해주자.

(app.js)

...생략

const db = require('./src/config/db');
db();

...생략

 

이게 다임.

마지막으로 model을 작성해준 뒤 아까 주석처리 했던 db.js 마지막줄에서 호출하면 된다.

(User.js)

const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
    id: String, 
    psword: String, 
    name: String,
});
module.exports = mongoose.model('User', userSchema);

User라는 이름의 Collection을 만들 예정이고 사용할 field와 타입을 지정해준다. 

만약 ObjectId를 써야 한다면 https://4sii.tistory.com/75 참고.

 

저장 후 db.js에서 require로 호출시킨 후 서버를 실행하면 mongoose에서 알아서 복수형으로 만들어주기 때문에

DB에 Users라는 Collection이 만들어지는걸 볼 수 있다.

 

이렇게 연결이 완료되었고 사용할 때는 Storage 등에서 바로 위 User.js model을 호출해 사용하면된다. 

Express에서 Mongodb를 호출할 때의 문법과는 살짝 다른 방식을 사용하는데

다음 포스팅에서 실제로 내가 써본 몇가지 예제를 다뤄볼 예정이다. 

 

728x90