mongodb samplemongodb sample이란Mongoose sampleMongoDB aggregatemongodb 기술블로그

[MongoDB] 랜덤 데이터 가져오는 API 만들기

KUKJIN LEE
KUKJIN LEE
2024년 10월 10일
144

$sample 연산자를 사용하면 데이터베이스에서 무작위 데이터를 쉽게 가져올 수 있습니다.

 

1. Next.js에서 MongoDB 연동하기

먼저, MongoDB 클러스터와 Next.js를 연결해야 합니다.

 

1.1 MongoDB 클라이언트 설정 (lib/mongodb.ts)

MongoDB와의 연결을 효율적으로 관리하기 위해 별도의 파일을 생성하여 클라이언트를 설정합니다.

import { MongoClient } from 'mongodb';

const uri = process.env.MONGODB_URI; // 환경 변수에서 MongoDB 연결 URI 가져오기
const options = {};

let client;
let clientPromise: Promise<MongoClient>;

if (!process.env.MONGODB_URI) {
  throw new Error('Please add your Mongo URI to .env.local');
}

if (process.env.NODE_ENV === 'development') {
  // 개발 환경에서는 전역 클라이언트 인스턴스를 사용합니다.
  if (!global._mongoClientPromise) {
    client = new MongoClient(uri, options);
    global._mongoClientPromise = client.connect();
  }
  clientPromise = global._mongoClientPromise;
} else {
  // 프로덕션에서는 새로운 클라이언트를 생성합니다.
  client = new MongoClient(uri, options);
  clientPromise = client.connect();
}

export default clientPromise;

2. MongoDB $sample 연산자를 사용해 랜덤 데이터 가져오기

MongoDB에서 랜덤 데이터를 가져오기 위해서는 $sample 연산자를 사용할 수 있습니다. $sample은 지정된 size수만큼 무작위로 문서를 선택하는 Aggregation 연산자입니다.

db.collection('kakao').aggregate([{ $sample: { size: 6 } }])

 

3. 실제 예시

아래 예시는 kakao 라는 collection에서 size가 6, 즉 6개의 데이터를 랜덤으로 가져오는 API입니다.

import { NextResponse } from 'next/server';
import clientPromise from '@/lib/mongodb';

export async function GET() {
  try {
    const client = await clientPromise; // MongoDB 클라이언트 연결
    const db = client.db(); // 데이터베이스 가져오기
    const collection = db.collection('kakao'); // 'kakao' 컬렉션 사용

    // Aggregation으로 랜덤 6개의 데이터 가져오기
    const randomData = await collection.aggregate([{ $sample: { size: 6 } }]).toArray();

    return NextResponse.json({ success: true, data: randomData }); // 성공적으로 데이터를 반환
  } catch (error) {
    return NextResponse.json({ success: false, error: error.message }); // 에러 처리
  }
}

MongoDB의 Aggregation 프레임워크는 대규모 데이터에서 랜덤 데이터를 쉽게 선택할 수 있습니다.

관련 글

[SQL 입문] 필요한 데이터만 콕 집어 가져올 수 있는 WHERE 절

사용자는 테이블에 있는 모든 데이터를 다 보고 싶어 하지는 않습니다. 오히려 특정 항목에 대한 데이터만 가져오고 싶을 때가 훨씬 많습니다. 예를 들어, 어떤 사용자의 이메일이나 ID는 알고 있는데, 그 사람이 언제 우리 앱에 가입했는지 확인하고 싶다고 가정해 봅시다...

2026년 1월 27일10

SQL에서 SELECT란 무엇인가?

데이터베이스를 거대한 서류 보관함이라고 생각하면 됩니다. 보관함 안에는 수많은 데이터가 차곡차곡 쌓입니다. SELECT는 이 보관함에서 "내가 원하는 정보를 찾아줘!"라고 요청하는 명령어입니다. 이 과정을 전문 용어로 '쿼리(Query)'라고 부릅니다. &amp;nbs...

2026년 1월 26일10

[SQL 기초] "언제 하나씩 다 넣어?" 데이터 한 번에 넣기

개발을 하다 보면 데이터베이스(DB)에 샘플 데이터를 대량으로 넣어야 할 때가 있습니다. 메뉴 100개를 추가해야 하는데 INSERT 문을 100번 쓰고 있다면? 너무 비효율적이죠! 오늘은 SQL에서 여러 데이터를 한 번에 넣는 '다중 삽입(Multiple Inse...

2026년 1월 21일13

SQL 데이터 삽입하기

데이터가 없는 데이터베이스는 연료 없는 로켓과 같습니다. 이제 'Missions' 테이블에 새로운 행(row)을 추가하는 방법을 알아보겠습니다. "삽입(Inserting)"은 '데이터 추가'를 의미합니다. 기존 Missions 테이블 ...

2026년 1월 20일12