개발

Mongo DB 왜 쓰는지와 셋팅방법

pizzaYami 2023. 9. 6.

웹사이트 운영하려면 유저아이디, 유저의 글 이런걸 어디 저장해둬야하는데

유저의 데이터를 영구적으로 안전하게 저장하고 싶으면 Database에 저장합니다.

 

데이터베이스 종류는 여러가지가 있는데

대표적으로 관계형, 비관계형 데이터베이스가 있습니다.

 

관계형 데이터베이스는 데이터를 엑셀처럼 표에 저장합니다.

데이터 입출력시 SQL이라는 언어를 사용해야하고 미리 스키마 정의(표만들기)도 해야하고 데이터 중복저장을 피하기 위해 정규화해야하고 여러가지 귀찮은 점들을 신경써야합니다. 

주로 안정적인 데이터저장과 운영이 필요한 곳에서 쓰면 좋습니다. 

 

비관계형 데이터베이스는 자료를 조금 더 자유로운 형식으로 저장할 수 있고

SQL 언어, 스키마 정의(표 만들기), 정규화 이런게 대부분 필요없습니다. 

분산처리를 기본적으로 잘해서 주로 SNS 서비스처럼 많은 데이터 입출력이 필요할 때도 강점을 보입니다. 

 

우리는 그 중에 비관계형 데이터베이스MongoDB를 사용합시다.

데이터를 자바스크립트 object자료형과 똑같은 모양으로 저장할 수 있어서 편리하고 

mongodb.com 들어가면 500mb 정도 용량의 DB 무료 호스팅도 받을 수 있습니다. 

 

MongoDB의 데이터 저장 방식

 

collection을 하나 만들어서 그 안에 document 를 만들어서 데이터를 기록하는 식으로 데이터들을 저장합니다.

비유하자면 collection은 폴더, document는 파일이라고 생각합시다.

{ 데이터이름1 : 값1, 데이터이름2 : 값2 ... }

document에 데이터를 기록할 때는 자바스크립트 object 자료형과 똑같이 저장

 

 

 초기셋팅 방법

1. mongodb.com 회원가입

2.Database Access 메뉴에서 DB 접속용 아이디/비번을 생성 (비번 꼭 기억할 것!!)

Edit Passwrod눌러서 비번설정

built-in Role에서 Atlas admin으로 역할 변경 (그 아이디로 DB접속시 다 할 수 있다.)

 

3. Network Access에서 Allow access from anywhere을 누르시거나 0.0.0.0/0 을 추가합니다. 

위의 IP를 추가하면 어디서든 코딩가능 but 신뢰있는 IP만 추가하는게 좋긴하다.

 

4. Browse Collections 들어가면 데이터 수정창이 뜬다.

INSERT DOCUMENT로 들어가면 데이터 수정가능

 

5.url를 가져온다.

Database -> Connect -> Drivers 들어가면 url이 있다.

이 url로 데이터를 가져올 수 있다.

 

6. util/database.js만들기

 

다시 vscode로 돌아와서 app폴더안에 util폴더만들고 그안에 database.js를 만든다.

 

코드는 그냥 외우면된다. -> 대충 monbgo에서 데이터 가져온다는 뜻 

아까 가져온 url에 아까 기억해둔 비밀번호를 넣으면 데이터를 가져올 수 있다.

// util/database.js

import { MongoClient } from "mongodb";
const url =
  "mongodb+srv://admin:비밀번호@pizzayami.1kluvmr.mongodb.net/?retryWrites=true&w=majority";
const options = { useNewUrlParser: true };
let connectDB;

if (process.env.NODE_ENV === "development") {
  if (!global._mongo) {
    global._mongo = new MongoClient(url, options).connect();
  }
  connectDB = global._mongo;
} else {
  connectDB = new MongoClient(url, options).connect();
}
export { connectDB };

이제 이걸 import해와서 db, result를 그대로 복붙해서 자신에게 알맞은 collection명과 documnet명을 입력하면 완성

이제 result를 해오면 올바르게 출력되어 오는걸 알 수 있다.

import { connectDB } from "../util/database.js";

export default async function List() {
  let db = (await connectDB).db("{collection명}");
  let result = await db.collection("{document명}").find().toArray();
  console.log(result);

  return (
    <div className="list-bg">
      <div className="list-item">
        <h4>{result[0].title}</h4>
        <p>1월 1일</p>
      </div>
      <div className="list-item">
        <h4>{result[1].title}</h4>
        <p>1월 1일</p>
      </div>
      <div className="list-item">
        <h4>{result[2].title}</h4>
        <p>1월 1일</p>
      </div>
    </div>
  );
}

collection명과 documnet명은

아래 사진에서 next는 collection명

documnet는 post명이다.

명칭은 자신이 설정할 수 있다.

 

이제부터는 mongoDB에 있는 데이터를 가져올 수 있다.

댓글