ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [DB연동] nodejs에서 mongoDB 사용하기 (mongoose 모듈 이용)
    Programing/NodeJS 2016. 3. 24. 15:49

    NodeJS에서 MongoDB 연동하기

    (mongoose 모듈 이용)


    저번 포스팅에서 몽고디비의 간략한 설명을 했었다.

    또한 MySql과 NodeJS의 연동방법 역시 포스팅을 했었다.


    그러면 오늘은 NodeJS에서 MongoDB연동 방법에 대해 포스팅할까 한다.



    준비물부터 말해 보겠다.


    1. 서버 - NodeJS

    2. DB - MongoDB

    3. FrameWork - Express FrameWork

    4. NPM Module - mongoose


    이미 전 포스팅에서 대부분 설명했던터라 4번 몽구스빼곤 준비물에 대해서는 다 알 것이다.


    일단 연동하기전에 mongoose에 대해 알아보자


    mongoose 모듈은 MongoDB와 NodeJS를 효과적으로 연동시키기 위한 모듈이다.

    MongoDB 네이티브 모듈이 있긴하지만 더욱 많이 사용되는 몽구스를 사용할 것이다.

    이유인 즉슨 그냥 더 많은 기능이 있으므로..

    (딴거 없다 걍 좋아서)


    사실 그냥 연동만한다고 하면 몽고디비 네이티브 모듈로 해도 무관하지만

    RDB에 익숙한 사람에게는 mongoose가 편할 것이다.


    그럼 시작해보자


    MongoDB는 깔려있다고 가정하겠다.

    (mongod 서버도 켜있다는 가정)


    (package.json)


    일단 mongoose module을 npm install을 해준다.


    그리고 나서 index.js로 가자

    저번 mysql연동에서는 createPool로 풀을 만들어서

    하나씩 꺼내서 커넥션을 이용했다.


    그럼 몽구스는 어떤식으로 될까?

    몽구스는 저절로 풀을 관리해준다고 한다.


    그래서 그냥 커넥션을 일으킨다.


    따라서 


    1
    var con = mongoose.connect('mongodb://localhost:27017/test');
    cs


    요거 한줄이면 커넥션 객체 생성이 완료다.

    물론 몽고디비 URL은 자신의 db 이름으로 적어야한다.


    그리고 나서 사용을 하면되는데, 몽구스는 특이하게 스키마를 설정할 수 있다.

    (몽고디비는 스키마 제약이 없다며?!)


    그렇다 스키마 제약이 없지만 스키마를 명시하여 사용 가능하게 해주는 모듈이다.

    물론 서버에서만 처리만 그렇게 될뿐이지 


    그냥 몽고디비로 접속해서 insert때릴땐 아무값이나 다 들어간다.

    따라서 스키마를 설정한것도 안 설정한것도 아니지만


    그래도 서버에서 처리를 할땐 스키마 제약에 따르므로

    설정 됬다고 보면된다.



    스키마 제약 조건으로는

    String, Number, Boolean, Date 등등 여러가지가 있다.

    (구글링 하면 다 나온다.)


    요렇게 제약을 걸어보았다.

    1
    2
    3
    4
    5
    6
    var schema = mongoose.Schema;
    var model1 = new schema({
        test: String,
        address: String,
        phone: Number
    });
    cs


    model1이라는 모델로 콜렉션을 생성하면


    test,address라는 컬럼은 String형으로

    phone라는 컬럼은 Number형으로 지정되어 콜렉션이 생성될 것이다.


    그럼 이 model1을 사용해보자


    1
    var study = mongoose.model('study', model1, 'study');
    cs


    이렇게 study라는 콜렉션을 몽구스모델중 model1이라는 모델로

    생성하여 study라는 변수에 담았다.


    슬슬 감이 오지 않는가?


    이제 사용하면된다.

    필자는 미리 몽고DB에 study라는 콜렉션을 생성해 두었다

    db.createCollection("study");


    그리고 값을 하나 넣었다.

    db.study.insert({test:"이글이보이면성공",address:"인천",phone:1234});


    이제 다시 index.js로 돌아가서 뽑아 써보자


    (최종 find가 완료된 index.js 페이지)


    이제 index.ejs에서 <%=data%>로 받아주고 서버를 가동시켜 보자!



    (최종 서버에 접속 모습)


    쿄쿄쿄쿄 됬당.

    다른 CRUD 작업 역시 같은 방법으로 하면된다.

    저기 위에보면 _id라는 컬럼으로 입력하지 않은 값이 하나 들어가 있는 것을 알 수 있는데,

    몽고디비 자체에서 primary key를 생성해준다.

    물론 _id값을 따로 지정해주면 그 값으로 들어가므로 걱정말자

    (대부분 auto increment를 이용하여 _id값을 지정하곤 한다.)


    그럼 오늘의 mongoDB와 NodeJs 포스팅 끝!


    질문이나 이상한점은 댓글을 달아주세요.

    저도 사실 공부하는 입장이라 잘모르는게 함정이지만요

    댓글

Designed by Tistory.