오늘은 Node.js와 MongoDB를 사용해서 데이터를 삽입하고 조회하는 방법에 대해 알아보겠습니다. 실제 코드를 보면서 단계별로 설명드리겠습니다.
프로젝트 설정
먼저 필요한 패키지를 설치해야 합니다.
npm init -y
npm install express mongodb
기본 서버 설정
Express 서버를 설정하고 MongoDB에 연결하는 코드부터 시작해보겠습니다.
아직 MongoDB를 연결해본적이 없다면 Node.js에서 MongoDB를 쉽게 연결하는 방법에대해 포스팅한 글이 있으니 참고해주세요.(링크)
const express = require('express')
const app = express()
app.use(express.static(__dirname + '/public'))
const { MongoClient } = require('mongodb');
const url = 'mongodb+srv://username:password@cluster.mongodb.net/?retryWrites=true&w=majority';
const client = new MongoClient(url);
const dbName = 'forum';
let db; // 전역 변수로 db 선언
async function main() {
await client.connect();
console.log('서버에 연결하였습니다.');
db = client.db(dbName); // 전역 변수에 할당
return '성공';
}
main()
.then(console.log)
.catch(console.error)
app.listen(8080, () => {
console.log('http://localhost:8080 에서 서버 실행중')
})
여기서 중요한 점은 db 변수를 전역으로 선언했다는 것입니다. 이렇게 해야 라우트 핸들러에서 데이터베이스에 접근할 수 있습니다.
db 변수를 전역으로 선언하지 않을경우 에러가 발생하는데 어떤일이 발생하는지 궁금하다면 아래 포스팅을 확인해주세요.
Node.js MongoDB 데이터 삽입 시 흔히 발생하는 문제점들과 해결방법
안녕하세요! 오늘은 Node.js와 MongoDB를 사용할 때 데이터 삽입 과정에서 자주 발생하는 문제점들과 그 해결방법에 대해 이야기해보겠습니다.문제 상황: "db is not defined" 오류많은 개발자들이 처음 M
newstroyblog.tistory.com
데이터 삽입하기
이제 데이터를 삽입하는 라우트를 만들어보겠습니다.
app.get('/news', async (req, res) => {
try {
const result = await db.collection('post').insertOne({
title: '오늘의 날씨',
content: '맑음'
});
res.send('데이터가 성공적으로 추가되었습니다!');
} catch (error) {
console.error('오류:', error);
res.status(500).send('서버 오류가 발생했습니다.');
}
})
이 코드에서 주목할 점들을 살펴보겠습니다.
async/await 사용하기
라우트 핸들러 함수 앞에 async를 붙여야 await을 사용할 수 있습니다. 데이터베이스 작업은 비동기 작업이기 때문에 await을 사용해서 작업이 완료될 때까지 기다려야 합니다.
try-catch로 에러 처리하기
데이터베이스 작업 중에 오류가 발생할 수 있으므로 try-catch 블록으로 감싸서 안전하게 처리합니다. 오류가 발생하면 클라이언트에게 500 에러를 보내고, 성공하면 성공 메시지를 전송합니다.
insertOne 메서드 사용하기
insertOne() 메서드는 하나의 문서를 데이터베이스에 삽입합니다. 반환되는 result 객체에는 삽입된 문서의 ID 정보가 포함되어 있습니다.
첫번째 데이터만 뽑으려면
app.get('/list', async (req, res) => {
try {
const result = await db.collection('post').find().toArray()
console.log(result[0]) # 첫번째 값만 불러옴
console.log(result[0].title) #첫번째 값의 title만 불러옴
res.send(result);
} catch (error) {
console.error('오류:', error);
res.status(500).send('서버 오류가 발생했습니다.');
}
})
console.log를 사용하여 result에 저장된 데이터베이스 값들에서 첫번째 값만 불러오거나 아까 삽입할때 사용했던 title,content중에서 특정자료 예시로 title 값만 불러올 수도 있습니다.
데이터 조회하기
이제 저장된 데이터를 조회하는 라우트를 만들어보겠습니다.
app.get('/list', async (req, res) => {
try {
const result = await db.collection('post').find().toArray()
res.send(result);
} catch (error) {
console.error('오류:', error);
res.status(500).send('서버 오류가 발생했습니다.');
}
})
find() 메서드 사용하기
find() 메서드는 컬렉션의 모든 문서를 조회합니다. 조건을 지정하지 않으면 모든 문서를 가져와요. toArray()를 호출해서 결과를 배열 형태로 변환합니다.
실제 사용후 결과 확인하기
이제 서버를 실행하고 테스트해볼 수 있습니다.
서버 실행: node index.js

데이터 삽입: http://localhost:8080/news 접속

MongoDB 데이터베이스에 값이 3개가 추가된걸 확인할 수 있습니다.
데이터 조회: http://localhost:8080/list 접속

JSON형태로 브라우저에서 확인할 수 있습니다. 서버의 터미널에서 로그를 확인하고 싶다면 console.log를 사용하면 조회결과를 터미널에서 확인할수 있습니다.