MongoDB 와 Next.JS 연결하기

2024. 5. 1. 20:58·Stack/Next.js
반응형

MongoDB 와 Next.js 를 알기전에 mongoose에 대해 먼저 알아봐야한다.

Mongoose란

Mongoose는 Node.js 와 MongoDB를 위한 ODM(Object Data Mapping) 라이브러리다.

mongoose가 하는 역할은 DB의 데이터를 javascript 객체로 바꿔주는 역할을 해준다.

MongoDB Atlas 설정해주기

1

개발용으로 사용하기 위해 Security - Network Access 부분에서 ALLOW ACCESS FROM ANYWHERE 을 하나 추가 해준다.

2

DEVELOYMENT - DATABASE 부분에 들어가면 위 와 같은 화면이 나오는 여기서 connect로 연결 시켜준다.

3

여기서 Drivers를 선택하면 아래와 같은 화면이 나온다.

4

View full code sample 에는 아래와 같은 형식이 있는데 해당 부분은 .env 파일에 사용된다.

mongodb+srv://[아이디]:[패스워드]@cluster0~~~~~~mongodb.net/[DB이름]~~~~

해당 형식에서 [아이디] 부분을 프로젝트 admin 아이디, [패스워드] 부분을 프로젝트 admin 패스워드로 바꿔준다.

ex) 아이디 admin , 패스워드 1234 일 경우
⇒ mongodb+srv://admin:1234@cluster0.

~

와 같은형식으로 변경시켜준다.

뒤에 [DB] 이름에는 클러스터에 자신이 사용할 데이터베이스 명을 사용하면된다.

MONGODB_URI =
  "mongodb+srv://[아이디]:[패스워드]@cluster0~~~~~~mongodb.net/[DB이름]~~~~";

.env 파일을 반드시 만들어주자.

❗️만약 DB 명을 입력하지 않는 경우 DB명은 test란 이름으로 새롭게 하나가 생성된다.
필자는 이 부분을 설정 하지 않아서 꽤나 고생했다.

Mongodb, Mongoose 설치

npm install mongoose
npm install --save-dev @types/mongoose

npm으로 mongodb 와 mongoose 도 설치가 필요하다.

typescript 형태로 DB 연결하기

src/lib/utils.ts 파일사용

import mongoose from "mongoose";

const DB_URI = process.env.MONGODB_URI || "";

export const connectToDb = async (): Promise<void> => {
  try {
    if (mongoose.connection.readyState === 1) {
      return;
    }
    const db = await mongoose.connect(DB_URI);
    const isConnected = db.connections[0].readyState;
    console.log("몽고디비와의 연결상태:", mongoose.connection.readyState);
  } catch (error) {
    console.log(error);
    throw new Error("몽고디비와 연결이 실패되었습니다.");
  }
};

모델 스키마 만들어주기

5

위의 사진과 같은 데이터를 사용하기위에 아래와 같은 모델 스키마를 만들었다.

import mongoose, { Schema } from "mongoose";

interface IUser {
  username: string;
  email: string;
  password: string;
  createdAt?: Date;
}

const userSchema =
  new Schema() <
  IUser >
  {
    username: { type: String, required: true },
    email: { type: String, required: true, unique: true },
    password: { type: String, required: true },
    createdAt: { type: Date, default: Date.now }
  };

const User =
  mongoose.models.User || mongoose.model < IUser > ("User", userSchema);

export default User;

Next.js API를 이용하여 데이터 불러오기

app/api/users/route.ts

import User from "@/lib/model";
import { connectToDb } from "@/lib/utils";
import { NextApiRequest } from "next";
import { NextResponse } from "next/server";

export const GET = async (request: NextApiRequest) => {
  try {
    connectToDb();
    const users = await User.find();
    console.log(users);
    return NextResponse.json(users);
  } catch (error) {
    console.log(error);
    throw new Error("유저목록을 가지고 오는 것을 실패함");
  }
};

 

 

http://localhost:3000/api/users 에 접속하면 정상적으로 데이터가 오는걸 알 수 있다.

 

6

반응형

'Stack > Next.js' 카테고리의 다른 글

Button으로 Resizable 구현하기  (2) 2024.06.04
Draggable 구현하기  (0) 2024.06.04
Next.js metadata 다루는 방식의 변  (1) 2024.05.14
Next Image 사용하는 방법  (1) 2024.05.14
📘 Next.js 에 markdown 설치 하기  (1) 2024.05.09
'Stack/Next.js' 카테고리의 다른 글
  • Draggable 구현하기
  • Next.js metadata 다루는 방식의 변
  • Next Image 사용하는 방법
  • 📘 Next.js 에 markdown 설치 하기
WHITE_FROST
WHITE_FROST
개발공부리뷰블로그
    반응형
  • WHITE_FROST
    하얀하얀IT
    WHITE_FROST
  • 전체
    오늘
    어제
    • 분류 전체보기 (119)
      • Stack (43)
        • Next.js (7)
        • React (12)
        • React-Native (15)
        • TypeScript (0)
        • Python (2)
        • JavaScript (2)
        • Android (1)
        • DB (2)
        • JAVA (1)
      • Obsidian (1)
      • AI (3)
      • AI Tools (0)
      • Tools (0)
      • Mac (0)
      • Error (7)
      • 알고리즘 정리 (6)
      • 알고리즘 문제풀이 (46)
      • 공부일상 (4)
      • 개발 도구 & 라이브러리 (0)
      • 정보처리기사 (0)
      • 기타 (6)
      • Tip (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ios
    mongodb cloud
    오블완
    ReactHook
    코테
    boj
    Expo
    hooks
    프로그래머스
    java
    Next.js
    React-Native cli
    reactnative
    react-native-maps
    D2
    React Hooks
    백준
    javascript
    코딩테스트
    SWEA
    error
    코테준비
    티스토리챌린지
    Python
    mongoDB Atlas
    리액트네이티브
    알고리즘
    d1
    react
    react-native
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
WHITE_FROST
MongoDB 와 Next.JS 연결하기
상단으로

티스토리툴바