MongoDB
NoSQL 데이터베이스 시스템으로, 문서 지향적 데이터 모델을 사용하며 데이터를 유연하게 저장하고 쿼리할 수 있는
비관계형 데이터베이스.
JSON과 유사한 형식인 BSON(Binary JSON) 문서를 사용하여 데이터를 저장.
BSON은 다양한 데이터 유형을 지원하며, 복잡한 데이터 구조도 표현 가능 → 데이터 모델의 변경/확장에 유용.
수평 확장에 강한 분산 데이터베이스 시스템.
여러 서버에 데이터를 분산하여 저장하고, 이를 통해 높은 가용성과 성능을 제공.
또한, MongoDB는 쉬운 확장성을 가지고 있어 데이터베이스의 용량을 증가시키거나 처리량을 늘릴 수 있음.
많은 애플리케이션에서 MongoDB는 대량의 데이터를 신속하게 처리하고 분석하는 데 사용됨.
예를 들어, 웹 애플리케이션, 게임, 소셜 네트워크, 로그 분석 등에서 활용되며,
개발자가 사용할 수 있는 강력한 쿼리 언어와 풍부한 기능을 제공.
몽고DB를 다룰 예정이므로 branch를 'mongodb'로 새로 생성.
git checkout -b mongodb
몽고db 웹페이지
MongoDB: The Developer Data Platform
Get your ideas to market faster with a developer data platform built on the leading modern database. MongoDB makes working with data easy.
www.mongodb.com
community server를 다운로드
MongoDB Atlas: MongoDB 클라우드 서비스.
MongoDB Atlas는 MongoDB의 관리형 클라우드 서비스입니다. 이 서비스는 MongoDB 데이터베이스를 간편하게 배포, 운영 및 확장할 수 있는 플랫폼을 제공합니다.
MongoDB Atlas를 사용하면 사용자는 자체적으로 MongoDB를 설치하고 관리하는 번거로움 없이 MongoDB 클러스터를 만들고 관리할 수 있습니다. 사용자는 클라우드에서 MongoDB 인스턴스를 프로비저닝하고, 데이터베이스 설정, 보안, 모니터링 등의 작업을 간편하게 수행할 수 있습니다.
MongoDB Atlas는 여러 클라우드 제공 업체(예: AWS, Azure, Google Cloud)와의 통합을 제공하여 사용자가 원하는 클라우드 환경에서 MongoDB를 실행할 수 있도록 합니다. 사용자는 지리적으로 분산된 데이터 센터를 선택하거나, 다중 클라우드 환경을 구축하여 가용성과 성능을 향상시킬 수 있습니다.
또한, MongoDB Atlas는 백업, 복구, 모니터링, 자동 스케일링 등의 고급 기능을 제공하여 데이터베이스 운영을 더욱 편리하게 만듭니다. 이러한 기능들은 안정성과 신뢰성을 확보하면서 개발자들에게 시간과 노력을 절약해줍니다.
MongoDB Atlas는 개발자 및 기업들이 클라우드 환경에서 MongoDB를 손쉽게 관리하고 활용할 수 있도록 하는 클라우드 기반 데이터베이스 서비스입니다.
MongoDB Atlas: Cloud Document Database
Cloud-hosted MongoDB service on AWS, Azure, and GCP
www.mongodb.com
회원가입 필요. (Google과 연동)
현재 Twitter 예제를 교육 간 사용할 예정이므로 JavaScript로 설정. (나중에 변경 가능)
무료버전, 지역 등을 위와같이 설정.
비밀번호는 '특수문자가 없는 조합'으로 자동으로 생성된 것을 사용.
IP주소도 자동으로 추가됨.
Finish and Close 클릭.
Connect 클릭 시 여러가지 연결방법을 제공.
mongoDB Atlas의 project password 변경 방법
twitter 예제와 MongoDB의 연계
1. 우선 아래와 같이 설정
2. cmd에서 설치
3. VS code의 아래 경로에서 이렇게 작성. password쪽은 본인의 mongoDB atlas에서 설정된 비밀번호 입력.
C:\yjcho\Node.js\Project\Server\.env
4. 아래 경로에서 mongodb를 import 후 코드작성
C:\yjcho\Node.js\Project\Server\db\database.js
5. 아래경로에서 코드 작성
C:\yjcho\Node.js\Project\Server\config.js
6. 아래경로에서 코드 작성
C:\yjcho\Node.js\Project\Server\index.js
(router부분을 일시적으로 주석처리 후 실행)
7. 정상적으로 연결됨.
createUser (Object Id의 값을 출력) 방법
8. 연결의 확인이 끝났으므로 아래와 같이 수정.
C:\yjcho\Node.js\Project\Server\index.js
// 사용자 접속시 db의 항시적인 연결. connectDB().then(()=>{ const server = app.listen(config.host.port); initSocket(server); }).catch(console.error) |
9.
아래경로에서 코드 작성
C:\yjcho\Node.js\Project\Server\data\auth.js
import { getUsers } from '../db/database.js'; import MongoDb from 'mongodb'; const ObjectID = MongoDb.ObjectId; // mongodb는 다른 data와 구별하기 위해 objectid를 추가해주어야 함. export async function findByUsername(username){ return null; } export async function createUser(user){ return getUsers().insertOne(user) .then((result)=>{ console.log(result); // result.ops[0]._id.toString(); }) } export async function findById(id){ return null; } |
오류 방지를 위해 해당 경로를 전체 주석처리.
C:\yjcho\Node.js\Project\Server\data\tweet.js
아래경로에서 코드 작성
C:\yjcho\Node.js\Project\Server\db\database.js
import MongoDb from 'mongodb'; import {config} from '../config.js'; let db; // db를 connect. export async function connectDB(){ return MongoDb.MongoClient.connect(config.db.host) // 연결 .then((client)=>{ db=client.db() }); // 연결 후 db의 형태로 client를 return시킴. } // users tb를 불러오기 export function getUsers(){ return db.collection('users'); } // tweets tb를 불러오기 export function getTweets(){ return db.collection('tweets'); } |
아래경로에서 코드 작성
C:\yjcho\Node.js\Project\Server\index.js
import express from 'express' import cors from 'cors' import morgan from 'morgan' // import tweetsRouter from './router/tweets.js' import authRouter from './router/auth.js' import {config} from './config.js' import {initSocket} from './connection/socket.js' import {connectDB} from './db/database.js' const app = express() //미들웨어 app.use(express.json()) app.use(cors()) app.use(morgan('tiny')) // 사용자들이 접속하면 log를 콘솔에 찍음(HTTP 요청 로깅을 간단하게 처리하고자 할 때 사용) // router // app.use('/tweets', tweetsRouter) app.use('/auth', authRouter) app.use((req, res, next) => { res.sendStatus(404) }) // 서버에러 app.use((error, req, res, next) => { console.log(error) res.sendStatus(500) }); // 사용자 접속시 db의 항시적인 연결. connectDB().then(()=>{ const server = app.listen(config.host.port); initSocket(server); }).catch(console.error) |
postman 프로그램을 통해 체크
정상적으로 실행 확인
findByUsername 코드 작성
C:\yjcho\Node.js\Project\Server\data\auth.js
export async function findByUsername(username){ return getUsers().findOne({username}).then(data=>{ console.log(data); }); } |
findById 코드 작성
C:\yjcho\Node.js\Project\Server\data\auth.js
postman에서 로그인 확인
user, twitter