1. MongoDB 연결
먼저 MongoDB의 가입하지 않았을 경우, 가입 후에 mongoDB Atlas 데이터베이스와 Collection을 만들어 주세요.
(저 같은 경우는 오랫동안 MongoDB를 사용안하다가 사용해서 Network Access 에 연결한 IP 가 Inactive 상태여서 연결이 안되었는데, 오랫만에 사용해주시는 분은 IP Adress가 Active 상태인걸 확인해주세요)
그리고 가입해서 DataBase를 만들면 연결할 때 필요한 URI랑 password를 줍니다.
어딘가에 잘 적어두시면 됩니다. URI 형식은 다음과 같습니다.
mongodb+srv://<username>:<password>@<clusername>.xxxxxxx.mongodb.net/<dbname>?retryWrites=true&w=majority
2. NextJS에서 사용하기
기술 스택 : next app router + typescript + mongoose
먼저 next 의 관련 패키지를 설치해준다
npm install mongoose
환경변수 설정
.env.local 에 자신의 username, password, dbname 를 이용한 환경변수를 설정한다.
mongodb+srv://<username>:<password>@<clusername>.xxxxxxx.mongodb.net/<dbname>?retryWrites=true&w=majority
데이터베이스 연동하기
src/lib 디렉토리에 mongodb.ts 파일 생성
import mongoose from 'mongoose';
const MONGODB_URI = process.env.MONGODB_URI as string;
if (!MONGODB_URI) {
throw new Error('Please define the MONGODB_URI environment variable inside .env.local');
}
declare global {
let mongoose: {
conn: typeof mongoose | null;
promise: Promise<typeof mongoose> | null;
} | undefined;
}
let cached = (globalThis as any).mongoose;
if (!cached) {
cached = (globalThis as any).mongoose = { conn: null, promise: null };
}
async function dbConnect(): Promise<typeof mongoose> {
if (cached.conn) {
console.log('Using existing MongoDB connection');
return cached.conn;
}
if (!cached.promise) {
const opts = {
bufferCommands: false,
};
console.log('Creating new MongoDB connection');
cached.promise = mongoose.connect(MONGODB_URI, opts).then((mongoose) => {
console.log('MongoDB connected successfully');
return mongoose;
});
mongoose.connection.on('connected', () => {
console.log('MongoDB connection established');
});
mongoose.connection.on('error', (err) => {
console.error('MongoDB connection error:', err);
});
mongoose.connection.on('disconnected', () => {
console.log('MongoDB connection disconnected');
});
process.on('SIGINT', async () => {
await mongoose.connection.close();
console.log('MongoDB connection closed due to app termination');
process.exit(0);
});
}
try {
cached.conn = await cached.promise;
console.log('MongoDB connection ready state:', mongoose.connection.readyState);
} catch (e) {
cached.promise = null;
console.error('Failed to connect to MongoDB:', e);
throw e;
}
return cached.conn;
}
export default dbConnect;
공식 레포 및 데이터베이스 연결확인을 위한 코드를 추가해준다.
연결확인이 필요 없을 경우, mongoose.connection 코드는 제거해줘도 되다.
요청에 따른 db 접속 구현 (커넥션 만들고 콘솔 출력)
import dbConnect from '@/db/dbConnect';
import mongoose from 'mongoose';
export default async function handler(req, res) {
await dbConnect();
console.log(mongoose.connection.readyState);
...
}
이렇게 하면 db에 연결이 완료됩니다.
정리하자면
1. mongoDB 생성은 Atalas 통해서 mongoose 통해서 코드에서 db 다루기.
2. dbConnect 파일 만들어서, dbConnect함수 만들어 데이터베이스에 접속하고, 필요한 파일에서 해당 함수를 호출해서 데이터베이스에 연동한다.
그리고 자신의 프로젝트 요구사항에 스키마 만들고 모델 생성하면 된다.
'프로젝트' 카테고리의 다른 글
프로젝트 : 리액트 쿼리로 캐시로 인한 서버성능 측정해보기 (2) | 2024.09.04 |
---|---|
프로젝트 : Cannot destructure property 'name' of 'item' as it is undefined. (0) | 2024.08.15 |
1. MongoDB 연결
먼저 MongoDB의 가입하지 않았을 경우, 가입 후에 mongoDB Atlas 데이터베이스와 Collection을 만들어 주세요.
(저 같은 경우는 오랫동안 MongoDB를 사용안하다가 사용해서 Network Access 에 연결한 IP 가 Inactive 상태여서 연결이 안되었는데, 오랫만에 사용해주시는 분은 IP Adress가 Active 상태인걸 확인해주세요)
그리고 가입해서 DataBase를 만들면 연결할 때 필요한 URI랑 password를 줍니다.
어딘가에 잘 적어두시면 됩니다. URI 형식은 다음과 같습니다.
mongodb+srv://<username>:<password>@<clusername>.xxxxxxx.mongodb.net/<dbname>?retryWrites=true&w=majority
2. NextJS에서 사용하기
기술 스택 : next app router + typescript + mongoose
먼저 next 의 관련 패키지를 설치해준다
npm install mongoose
환경변수 설정
.env.local 에 자신의 username, password, dbname 를 이용한 환경변수를 설정한다.
mongodb+srv://<username>:<password>@<clusername>.xxxxxxx.mongodb.net/<dbname>?retryWrites=true&w=majority
데이터베이스 연동하기
src/lib 디렉토리에 mongodb.ts 파일 생성
import mongoose from 'mongoose';
const MONGODB_URI = process.env.MONGODB_URI as string;
if (!MONGODB_URI) {
throw new Error('Please define the MONGODB_URI environment variable inside .env.local');
}
declare global {
let mongoose: {
conn: typeof mongoose | null;
promise: Promise<typeof mongoose> | null;
} | undefined;
}
let cached = (globalThis as any).mongoose;
if (!cached) {
cached = (globalThis as any).mongoose = { conn: null, promise: null };
}
async function dbConnect(): Promise<typeof mongoose> {
if (cached.conn) {
console.log('Using existing MongoDB connection');
return cached.conn;
}
if (!cached.promise) {
const opts = {
bufferCommands: false,
};
console.log('Creating new MongoDB connection');
cached.promise = mongoose.connect(MONGODB_URI, opts).then((mongoose) => {
console.log('MongoDB connected successfully');
return mongoose;
});
mongoose.connection.on('connected', () => {
console.log('MongoDB connection established');
});
mongoose.connection.on('error', (err) => {
console.error('MongoDB connection error:', err);
});
mongoose.connection.on('disconnected', () => {
console.log('MongoDB connection disconnected');
});
process.on('SIGINT', async () => {
await mongoose.connection.close();
console.log('MongoDB connection closed due to app termination');
process.exit(0);
});
}
try {
cached.conn = await cached.promise;
console.log('MongoDB connection ready state:', mongoose.connection.readyState);
} catch (e) {
cached.promise = null;
console.error('Failed to connect to MongoDB:', e);
throw e;
}
return cached.conn;
}
export default dbConnect;
공식 레포 및 데이터베이스 연결확인을 위한 코드를 추가해준다.
연결확인이 필요 없을 경우, mongoose.connection 코드는 제거해줘도 되다.
요청에 따른 db 접속 구현 (커넥션 만들고 콘솔 출력)
import dbConnect from '@/db/dbConnect';
import mongoose from 'mongoose';
export default async function handler(req, res) {
await dbConnect();
console.log(mongoose.connection.readyState);
...
}
이렇게 하면 db에 연결이 완료됩니다.
정리하자면
1. mongoDB 생성은 Atalas 통해서 mongoose 통해서 코드에서 db 다루기.
2. dbConnect 파일 만들어서, dbConnect함수 만들어 데이터베이스에 접속하고, 필요한 파일에서 해당 함수를 호출해서 데이터베이스에 연동한다.
그리고 자신의 프로젝트 요구사항에 스키마 만들고 모델 생성하면 된다.
'프로젝트' 카테고리의 다른 글
프로젝트 : 리액트 쿼리로 캐시로 인한 서버성능 측정해보기 (2) | 2024.09.04 |
---|---|
프로젝트 : Cannot destructure property 'name' of 'item' as it is undefined. (0) | 2024.08.15 |