nodejs + mongodb 연동 (mongoose)

·2022년 9월 3일
0

Mongoose

nodejs를 사용해 mongodb로부터 데이터를 가져오거나 조작하기 위해서는 mongoose 모듈을 사용해야 한다. 물론, mongoose 없이도 mongodb와 연결할 수 있지만, 굳이 그럴 필요는 없다.

우선 이렇게 npm i mongoose로 mongoose 모듈을 깔아야 사용할 수 있다.

먼저 데이터베이스를 연동하기 전에 데이터베이스와 함께 스키마를 생성해야 하는데, Mongodb 공식홈페이지에 들어가서 mongodb cluster를 생성 후, Mongodb Compass를 다운 받아서 써도 되고, 아니면 Mongodb Atlas 브라우저로 사용해도 된다. 보통은 Atlas를 사용하는 것 같다.

위와 같이 cluster가 생성됐으면 mongodb를 사용할 수 있게 된 것이다. collection 생성 후, 필요한 데이터를 생성하여 테스트해 볼 수 있다.

mongodb 연결

우선, cluster 창에서 connect를 누르면 위와 같은 창이 뜰텐데,

connect your application을 누르면,

위와 같은 코드가 주어지는데, 저 코드를 복사한 뒤 mongoose.connect()의 인자로 넣어줘야 한다.

mongoose.connect()

const mongoose = require('mongoose')

mongoose.connect(mongodb+srv://<username>:<password>@mongodbtuto.v81f0.mongodb.net/<database>?retryWrites=true&w=majority

주어진 application code를 복사해서 mongoose.connect()의 인자로 넣어준 뒤, <>칸 안에 자신의 username, password, database를 각각 넣어주면 연결된다.

스키마 생성

이제 연결이 되었으니, 자신이 사용할 데이터 형식을 지정해주면 된다. 예를 들어, 편의점 과자를 데이터베이스에서 나타낼 때 우리는 과자의 이름, 가격, 재고 수량 등이 필요할 것이다.

const itemSchema = new mongoose.Schema({
  name: {
    type: String,
    required: [true, "Why no name?"]
  },
  price: Number,
  stock: Number
});

그렇게 된다면 스키마를 위와 같이 생성하면 된다. 기본적으로는, price와 stock처럼 데이터명과 데이터타입을 명시하면 되는데, 정보를 더 넣어주고 싶다면 name과 같이 중괄호 안에 추가 정보를 작성하면 된다.
예로, 위의 required는 name필드에 값이 없으면 안 되는 것을 의미한다.

모델 설정

우리는 위에서 스키마를 만들었다. 스키마를 생성한 건 단순히 데이터의 틀을 짠거고, 스키마를 사용하기 위해서는 모델로 지정해줘야 한다.

const Item = mongoose.model("Item", itemSchema);

위와 같이 코드를 작성하면 되는데, 쉽게 설명하자면 Item이라는 이름의 모델을 쓸 거라는 거고, 첫 번째 인자는 모델을 생성하면서 실제 데이터베이스의 컬렉션(스키마)명을 저걸로 하겠다는 뜻이다. 그리고 두번째 인자는 아까 만든 itemSchema를 해당 모델의 스키마로 사용하겠다는 뜻이다.

즉, 위의 만든 스키마는 틀이고, 모델은 조작 장치 같은 거라고 보면 이해하기 쉬울 것 같다.

mongoose로 데이터 생성

mongoose로 데이터베이스를 조작할 수 있는데, 그 중 생성 기능을 사용해 보겠다.

const item = new Item({
  name: "양파링",
  price: 1500,
  stock: 14
});

item.save();

item이라는 변수에 모델의 인스턴스를 할당하여 데이터베이스에 저장하는 식이다.

사실, 위의 코드는 의미없다. 왜냐하면, 데이터를 직접 mongoose로 생성할 이유가 없기 때문이다.

실제로 db를 활용할 때는, 이유 없이 데이터를 작성하는 게 아니라, 어떤 조건을 따라 데이터를 생성하기 때문에 코드가 조금 더 복잡하다.
물론, 그렇게 어렵지는 않으며 Mongoose 공식문서를 보고 데이터 갖고 놀아보면 금방 익힐 수 있다.

0개의 댓글