MongoDB

김재환·2024년 1월 16일

Next.js

목록 보기
10/10

데이터베이스 연동하기

가장 먼저 mongoose.connect() 함수를 사용해서 커넥션을 만들고 사용합니다. 이때 Next.js 환경에서 커넥션을 불필요하게 여러 개 만들 수 있기 때문에, 캐싱 기법을 사용하는데요. 조금은 복잡할 수 있기 때문에 공식 리포지터리에 있는 코드(next.js/examples/with-mongodb-mongoose)를 참고해서 구현하는 걸 권장합니다.

연동이 잘 되었는지 확인하려면 아래와 같이 mongoose.connection.readyState라는 값을 확인할 수 있습니다. 문서에 따르면 접속한 상태에서는 1이라는 값이 출력되어야 합니다. (Connection.prototype.readyState 문서)

import mongoose from 'mongoose';
// ...
await dbConnect();
console.log(mongoose.connection.readyState);

모델 만들기

mongoose.Schema()를 사용해서 스키마를 생성합니다. 스키마는 모델이 어떤 속성을 가질지 정하는 용도입니다. mongoose.model() 을 사용해서 모델을 생성합니다. 이때 모델의 이름을 첫 번째 아규먼트로 넘겨주는데, 이 이름은 mongoose.models[ ... ]로 참조할 수 있기 때문에 잘 지정했는지 반드시 확인해 주세요.

예를 들어서 ShortLink라는 모델은 아래와 같이 만들 수 있었는데요. 참고로 모듈 파일을 import할 때마다 모델을 생성하는 일이 일어나지 않도록 mongoose.models['ShortLink'] || mongoose.model('ShortLink',shortLinkSchema)처럼 작성해 둔 부분도 눈여겨 봐 주세요.



import mongoose from 'mongoose';

const shortLinkSchema = new mongoose.Schema(
  {
    title: { type: String, default: '' },
    url: { type: String, default: '' },
    shortUrl: { type: String, default: '' },
  },
  {
    timestamps: true,
  }
);

const ShortLink =
  mongoose.models['ShortLink'] || mongoose.model('ShortLink', shortLinkSchema);

export default ShortLink;

모델 다루기

생성: Model.create()

아규먼트로 전달한 값으로 도큐먼트를 생성합니다.



const newShortLink = await ShortLink.create({
  title: '코드잇 커뮤니티',
  url: 'https://www.codeit.kr/community/general',
});

여러 개 조회: Model.find()

조건에 맞는 모든 도큐먼트를 조회합니다. 이때 조건으로 쓰이는 객체는 MongoDB의 문법을 따릅니다. 간단하게는 속성과 값을 키와 밸류로 하는 객체를 넣어줄 수 있는데요. 혹시 궁금하신 분들은 MongoDB를 공부해 보세요.



const shortLinks = await ShortLink.find(); // 모든 도큐먼트 조회

const filteredShortLinks = await ShortLink.find({ shortUrl: 'c0d317' }) // shortUrl 값이 'c0d317'인 모든 도큐먼트 조회

아이디로 하나만 조회: Model.findById()

아규먼트로 넘겨준 아이디에 해당하는 도큐먼트를 조회합니다.

const shortLink = await ShortLink.findById('n3x7j5');

아이디로 업데이트하기: Model.findByIdAndUpdate()

첫 번째 아규먼트로 넘겨준 아이디에 해당하는 도큐먼트를 업데이트합니다. 두 번째 아규먼트로는 업데이트할 값을 넘겨줍니다.

const updatedShortLink = await ShortLink.findByIdAndUpdate('n3x7j5', { ... });

아이디로 삭제하기: Model.findByIdAndDelete()

아규먼트로 넘겨준 아이디에 해당하는 도큐먼트를 삭제합니다.

await ShortLink.findByIdAndDelete('n3x7j5');

그 외에 자주 사용하는 함수 소개

아이디 값으로 조회하거나 업데이트하는 것 외에도 조건(MongoDB 문법)으로 사용하는 다양한 함수들이 있습니다. 혹시 더 많은 함수들이 궁금하신 분들은 Mongoose의 Model 문서를 참고해 보세요.

조건으로 하나만 조회

아규먼트로 조건을 넘겨주고 해당하는 도큐먼트를 하나만 조회합니다.

const shortLink = await ShortLink.findOne({ shortUrl: 'c0d317' });

조건으로 업데이트하기

첫 번째 아규먼트로 넘겨준 조건에 해당하는 도큐먼트를 업데이트합니다. 두 번째 아규먼트로는 업데이트할 값을 넘겨줍니다.

await ShortLink.updateOne({ _id: 'n3x7j5' }, { ... }); // 업데이트만 하고 업데이트 된 값을 리턴하지는 않음

const updatedShortLink = await ShortLink.findOneAndUpdate({ _id: 'n3x7j5' }, { ... });

조건으로 삭제하기

아규먼트로 넘겨준 조건에 해당하는 도큐먼트를 삭제합니다.

await ShortLink.deleteOne({ _id: 'n3x7j5' }, { ... }); // 삭제만 하고  기존 값을 리턴하지는 않음

const deletedShortLink = await ShortLink.findOneAndDelete({ _id: 'n3x7j5' }, { ... });
profile
안녕하세요

0개의 댓글