[ MongoDB + Mongoose ] mac os에서 사용하기 ( DB연결 및 모델 생성 )


     

    mongo

    not sql based로 document based이다.

     

     

    시작하기

    1. mongodb 설치하기

     

    MongoDB Atlas: Cloud Document Database

    Cloud-hosted MongoDB service on AWS, Azure, and GCP

    www.mongodb.com

     

    2. 터미널에 mongod 입력해 실행이 되는 지 확인해보기

    아래와 같은 문구가 뜨면 설치가 제대로 안된 것으로 다시 설치해야한다.

    mongod command not found
    mongod is not a command

     

    3. mongosh 입력하여 db 클라이언트 켜기

     = > connecting to에서 mongodb:// 주소 ~ 가 나올텐데 /?전까지 복사

     

    만약 실행 시에 아래와 같은 오류가 난다면 

    MongoDB shell version v5.0.0
    connecting to: mongodb://127.0.0.1:/?compressors=disabled&gssapiServiceName=mongodb
    Error: couldn't connect to server 127.0.0.1:, connection attempt failed: SocketException: Error connecting to 127.0.0.1:27017 :: caused by :: Connection refused :
    connect@src/mongo/shell/mongo.js:372:17
    @(connect):2:6
    exception: connect failed
    exiting with code 1

    intell mac : mongod --config /usr/local/etc/mongod.conf --fork
    m1 : mongod --config /opt/homebrew/etc/mongod.conf --fork

    의 명령어를 입력하면 된다.

     

     

    mongod: MongoDB 시스템의 기본 데몬 프로세서로

                    데이터 요청을 처리하고 데이터 액세스를 관리하며 백그라운드 관리 작업을 수행한다.

                    여기서 데몬(daemon)은 멀티태스킹 운영 체제에서 사용자가 직접적으로 접근하지 않고,
                    백그라운드에서 여러 작업을 수행하는 프로그램을 의미한다.
    mongosh: MongoDB에 대한 쉘 인터페이스

     


     

    Mongoose

    MongoDB와 함께 Mongoose를 사용할텐데 mongodb를 자바스크립트로 사용할 때 필요하다.

    즉 js와 db사이의 다리역할을 한다고 생각하면된다. 

    이외에도 유효성 검사도 해준다.

    ( 유효성과 관련된 이야기는 아래 모델 생성에서 이어진다. )

     

    mongoose를 사용하기위해선 아래와 같이 설치를 해줘야한다.

    npm i mongoose

     

     


     

    내 프로젝트와 DB 연결하는 방법

    아래와 같은 내용으로 코드를 작성한 db.js를 만들어주고 서버를 연결하는 js에 import만 해주면된다!

     

    connect()에선 위에서 복사한 주소(mongosh를 실행해 복사해둔 주소)와 생성할 DB명을 입력해주면된다.

    아래에선 mongodb://127.0.0.1:~~~~가 주소고 test가 DB명이다.

     

    import mongoose from "mongoose";
    
    mongoose.connect("mongodb://127.0.0.1:~~~~/test")
    // mongoose.connect(process.env.DB_URL);
    
    const db = mongoose.connection;
    
    //db연결 실패할때마다 
    db.on("errer",(error)=>console.log(`DB Error`));
    //최초로 db연결이 되었을 떄
    db.once("open",()=>console.log("Connected DB"));

    *이 주소는 .env파일에 넣어 깃헙에 올릴 때 남들이 알 수 없도록 하기 

     

     


     

    모델 생성하기

    mongoose와 db에 데이터의 생김새를 알려줘야하기에 모델을 생성해야한다.

     

    아래의 코드를 보면 mongoose를 import한 후

    userSchema를 정의하는 것을 볼 수 있다.

     

    mongoose의 장점은 이러한 스키마를 정의할 수 있다는 것이다.

    sql 베이스가 아니여서 테이블이 없기에 사실 다큐먼트에 어떠한 데이터를 넣어도 에러가 안생긴다.

    하지만 이렇게 되버리면 들어가선 안될 데이터가 들어가거나 같은 필드이지만 데이터 타입이 다른 경우도 발생해 문제가 된다.

     

    그래서 mongoose에선 스키마를 도입하여 사용자가 정의한 스키마를 기준으로 데이터를 DB넣기 전에 검사를 하도록 하였다.

    만약 스키마에 어긋나는 데이터가 존재한다면 에러를 발생시키기도 한다.

     

    //user.js
    
    import mongoose from "mongoose"; 
    
    const userSchema = mongoose.Schema({ 
       socialOnly : {type:Boolean,default:false},
       id:{type:Number,required:true,unique:true},
       password:{type:Number,required:true,unique:true},
    
    }) ;
    
    const User = mongoose.model("User",userSchema); 
    
    export default User;

     

    스키마를 통해 아래의 내용들을 정의할 수 있다.

      type : 데이터의 타입으로 String,Number,Date등이 존재한다.

      default : 데이터의 기본값을 지정할 수 있다.

      required : true or false , false가 기본이며 true일 경우 해당 데이터에 대한 값이 무조건 필요로하다

      unique : true or false , false가 기본이며 true일 경우 다른 데이터와 값이 일치하지않아야한다. 

     

    -> string 값에 숫자를 넣으면 숫자를 string으로 형변환시켜준다.

    -> number 값에 string을 넣으면 문제를 발생시켜 doc데이터에 포함시키지않음 

     

     

     

    모델 사용하기

    모델을 정의한 파일에선 export를 해줘야하며

    모델을 사용할 모든 js에 해당 모델파일을 import 해야한다.

     

     

     

    댓글