본문 바로가기
STUDY/Project

MongoDB연결 파일 작성 및 서버 실행하기

by Y.Choi 2025. 4. 29.
728x90
반응형

 

앞서 server.js 파일을 작성 했다면 다음으로 db연결을 하고 서버를 실행해보자.

 

여기에서는 MongoDB를 로컬에서 설치해서 사용하는 방법으로 한다. ( 아직 미설치시 )

설치가 되었다고 보고 진행한다.

 

 

 

| MongoDB 연결

backend/config/db.js

 

// backend/config/db.js

const mongoose = require('mongoose');

const connectDB = async () => {
  try {
    const conn = await mongoose.connect(process.env.MONGO_URI);
    console.log(`✅ MongoDB Connected: ${conn.connection.host}`);
  } catch (error) {
    console.error(`❌ MongoDB Connection Error: ${error.message}`);
    process.exit(1);
  }
};

module.exports = connectDB;

 

 

.env에 저장한 MONGO_URI를 이용해 MongoDB에 연결된다.

연결 성공/실패를 로그로 출력되도록 작성한다.

 

 

| .env 파일 수정하기 ( MongoDB주소 입력 )

 

 

PORT=5000
MONGO_URI=mongodb://127.0.0.1:27017/myapp
JWT_SECRET=your_jwt_secret_key

 

 

127.0.0.1:27017은 기본 로컬 MongoDB 포트이다.

myapp은 사용할 데이터베이스 이름을 적으면 된다. (없는 이름이면 Mongo가 알아서 만들어줌)

 

 

 

 

| MongoDB 서버 켜기

MongoDB는 설치할 때 기본적으로 "MongoDB Server" 라는 서비스를 등록되서 자동으로 백그라운드에서 실행된다. 

만약, MongoDB Server 실행 상태 확인하려면 여기 참고.

 

 

 

| 서버 실행 테스트 ( 에러 해결 )

 

npm run dev

 

 

기대와 달리 성공적으로 서버가 실행되지 않았다.

 

 

문제1)

TypeError: argument handler must be a function at Function.use .... 이런 에러 메시지가 뜬다.

app.use()에 함수 대신 잘못된 타입(예: undefined나 객체 등) 을 넣었다는 뜻이다.

 

해결1)

postRoutes에서 module.exports = router 안 했거나,
라우터 파일이 아예 없거나,
라우터가 아닌 객체를 내보냈을 경우 이런 에러가 난다.

 

지금의 경우는 라우터 파일만 만들어두고 아직 안에 아무것도 작성하지 않아서이다.

server.js에 라우트를 등록했으니 불러올 수 있게 코드를 작성해야 한다.

 

backend/routes/authRoutes.js

const express = require('express');
const router = express.Router();

router.post('/login', (req, res) => {
  res.send('로그인');
});

module.exports = router;

 

 

 

backend/routes/postRoutes.js

const express = require('express');
const router = express.Router();

// 예시 라우터
router.get('/', (req, res) => {
  res.send('게시글 목록');
});

module.exports = router;

 

 

임시로 기본 라우터를 작성하고 다시 서버를 실행해 보았다.

 

 

문제2) 

TypeError: app.use() requires a middleware function at Function.use ... 이런 메시지가 뜬다.

app.use()를 호출할 때 "함수" 가 와야 하는데, 다른 데이터가 오고 있다는 뜻이다.

 

해결2)

역시, server.js에 등록된 미들웨어 관련 파일작성을 하지 않아서이다.

 

backend/middleware/errorHandler.js

// backend/middleware/errorHandler.js

const errorHandler = (err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({ message: err.message || 'Server Error' });
};

module.exports = errorHandler;

 

 

 

성공!!

node server가 정상적으로 실행되어 MongoDB도 연결되었음을 알 수 있다.

 

 

 

728x90
반응형