본문 바로가기

2. MySQL | MongoDB

5/12(금) IT K-DT(50일차) / MongoDB

 

MongoDB

NoSQL 데이터베이스 시스템으로, 문서 지향적 데이터 모델을 사용하며 데이터를 유연하게 저장하고 쿼리할 수 있는

비관계형 데이터베이스.

JSON과 유사한 형식인 BSON(Binary JSON) 문서를 사용하여 데이터를 저장.

BSON은 다양한 데이터 유형을 지원하며, 복잡한 데이터 구조도 표현 가능 → 데이터 모델의 변경/확장에 유용.


수평 확장에 강한 분산 데이터베이스 시스템.

여러 서버에 데이터를 분산하여 저장하고, 이를 통해 높은 가용성과 성능을 제공.

또한, MongoDB는 쉬운 확장성을 가지고 있어 데이터베이스의 용량을 증가시키거나 처리량을 늘릴 수 있음.

많은 애플리케이션에서 MongoDB는 대량의 데이터를 신속하게 처리하고 분석하는 데 사용됨.

예를 들어, 웹 애플리케이션, 게임, 소셜 네트워크, 로그 분석 등에서 활용되며,

개발자가 사용할 수 있는 강력한 쿼리 언어와 풍부한 기능을 제공.

 

 

몽고DB를 다룰 예정이므로 branch를 'mongodb'로 새로 생성.

git checkout -b mongodb

 

 

몽고db 웹페이지

https://www.mongodb.com/

 

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를 손쉽게 관리하고 활용할 수 있도록 하는 클라우드 기반 데이터베이스 서비스입니다.

 

https://www.mongodb.com/cloud/atlas/lp/try4?utm_source=google&utm_campaign=search_gs_pl_evergreen_atlas_core-high-int_prosp-brand_gic-null_apac-kr_ps-all_desktop_eng_lead&utm_term=mongodb%20atlas&utm_medium=cpc_paid_search&utm_ad=e&utm_ad_campaign_id=19628217039&adgroup=146484670740&cq_cmp=19628217039&gad=1&gclid=EAIaIQobChMIoZbopb_u_gIVur-WCh239g-WEAAYASAAEgIIcfD_BwE 

 

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