
MVC 패턴을 기반으로 데이터베이스 세팅을 해봅시댜
const mongoose = require('mongoose');
// 캐릭터 스키마 정의
const CharacterSchema = new mongoose.Schema({
id: { type: Number, required: true },
name: { type: String, required: true },
characteristic: { type: String, required: true },
signature: { type: String, required: true },
series: { type: String, required: true },
image: { type: String, required: true },
type: { type: String, required: true }
});
// 모델 생성
const Character = mongoose.model('Character', CharacterSchema);
module.exports = Character;
MongoDB에 저장될 데이터들을 정의하는 모델 파일로, 나는 아이디, 이름, 특징, 시그니처, 시리즈. 이미지, 타입 등이 들어가는 데이터를 준비했기 때문에 위와 같이 작성했다.
const Character = require('../models/Character');
// 모든 캐릭터 데이터 조회
const getAllCharacters = async (req, res) => {
try {
const characters = await Character.find();
res.status(200).json(characters);
} catch (error) {
res.status(500).json({ message: '데이터 조회 실패: ' + error });
}
};
// 데이터베이스에 JSON 데이터 삽입 (한 번만 사용)
const insertInitialData = async (req, res) => {
const jsonData = [
// 초기 데이터를 넣어요!!!
];
try {
const count = await Character.countDocuments();
if (count === 0) {
await Character.insertMany(jsonData);
res.status(201).json({ message: '데이터 삽입 완료!' });
} else {
res.status(200).json({ message: '이미 데이터가 존재합니다.' });
}
} catch (error) {
res.status(500).json({ message: '데이터 삽입 실패: ' + error });
}
};
module.exports = {
getAllCharacters,
insertInitialData
};
데이터베이스를 조회하거나, 삽입하는 작업을 처리하는 함수를 작성
const express = require('express');
const router = express.Router();
const { getAllCharacters, insertInitialData } = require('../controllers/characterController');
// 모든 캐릭터 가져오기
router.get('/characters', getAllCharacters);
// 초기 데이터 삽입 (필요시 호출)
router.get('/init-data', insertInitialData);
module.exports = router;
API 엔드포인트를 작성!
const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
require('dotenv').config();
// Express 앱 생성
const app = express();
// 미들웨어 설정
app.use(cors());
app.use(express.json());
// 라우트 불러오기
const characterRoutes = require('./routes/characters');
app.use('/api', characterRoutes);
// 정적 파일 제공 설정 (images 폴더)
app.use('/images', express.static(path.join(__dirname, 'images')));
// MongoDB 연결
mongoose.connect(process.env.MONGO_URL, { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('MongoDB 연결 성공'))
.catch(err => console.error('MongoDB 연결 실패:', err));
// 서버 실행
const PORT = process.env.PORT || 3002;
app.listen(PORT, () => {
console.log(`서버가 http://localhost:${PORT} 에서 실행 중입니다.`);
});
이렇게 작성하면 이제
api/init-data로 들어가면 controller에서 작성했던 초기 데이터들이 데이터베이스로 삽입되고, api/characters로 들어가면 데이터 조회를 할 수 있게 된다!
참고로 이미지 파일을 어떻게 관리하고 데이터베이스에 넣는지 몰라서 backend 폴더 안에 images 폴더를 만들고, 그 안에 이미지를 넣은 후, server.js 에서
// 정적 파일 제공 설정 (images 폴더)
app.use('/images', express.static(path.join(__dirname, 'images')));
를 작성하고 초기 데이터에서 "image": '/images/aloneping.png', 이런식으로 작성하였다.
그리고 위의 MongoDB 연결 부분에서도 process.env.MONGO_URL을 사용하여 내 정보가 코드에 노출되지 않도록 하였다!
이렇게 해서 npm start를 한 뒤, localhost:3002/api/init-data를 하면 데이터가 삽입 되고, (MongoDB Compass에서 확인 가능!) /api/characters를 하면 조회도 가능하다!
우선 기본적인 데이터베이스 세팅 완료!!
이제 다음 단계는 프론트 서버로 넘어가서 UI를 꾸며볼 계획이다.