Next.js App Router와 Mongoose 데이터 저장 문제 해결
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

Mongoose와 Next.js App Router의 데이터 저장 문제 해결 방법

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

Next.js App Router와 Mongoose를 사용하는 백엔드 개발자, 특히 MongoDB에 데이터가 제대로 저장되지 않는 문제를 겪는 중급 이상의 개발자

핵심 요약

  • Mongoose 모델 캐싱 문제로 인해 Next.js App Router에서 데이터가 _id만 저장되는 현상 발생
  • 개발 서버 재시작 + .next 캐시 삭제방어적 모델 내보내기( mongoose.models.User || mongoose.model('User', UserSchema) )로 해결
  • 시간戳( createdAt, updatedAt )가 자동으로 생성되도록 timestamps: true 옵션 적용 필수

섹션별 세부 요약

1. 문제 현상

  • Next.js App Router에서 /api/auth/signup 경로로 POST 요청 시, name, email 등 필드가 MongoDB에 저장되지 않음
  • 콘솔 로그 및 MongoDB 연결 상태는 정상이지만, 저장된 문서에 name, email 등이 누락됨
  • __v 필드 외에 _id만 존재하는 문서가 생성됨

2. 실질적인 원인

  • Mongoose 모델 캐싱으로 인한 문제
  • 개발 모드에서 Next.js 서버가 핫 리로드(Hot Reload) 시, 모델 재컴파일로 인해 Mongoose 내부 모델이 손상
  • name, email 등 필드가 제대로 매핑되지 않아 저장되지 않음

3. 해결 방법

  • 1단계: 서버 재시작 및 캐시 삭제

```bash

Ctrl + C

rm -rf .next

npm run dev

```

  • 2단계: 방어적 모델 내보내기

```javascript

export default mongoose.models.User || mongoose.model('User', UserSchema);

```

  • 모델이 중복 선언되지 않도록 방어적 코드 적용

4. 예제 코드

  • 모델 파일( /models/User.js )

```javascript

import mongoose from 'mongoose';

const UserSchema = new mongoose.Schema({

name: { type: String, required: true },

email: { type: String, required: true }

}, { timestamps: true });

export default mongoose.models.User || mongoose.model('User', UserSchema);

```

  • 라우트 파일( /api/auth/signup/route.js )

```javascript

import User from '@/models/User';

export async function POST(req) {

try {

const body = await req.json();

const user = new User({ name: body.name, email: body.email });

await user.save();

return new Response(JSON.stringify(user), { status: 201 });

} catch (err) {

return new Response(JSON.stringify({ error: 'Server error' }), { status: 500 });

}

}

```

결론

  • Mongoose + Next.js App Router 사용 시, 모델 캐싱 문제로 인해 데이터 누락이 발생할 수 있음
  • 방어적 모델 내보내기.next 캐시 삭제를 통해 문제 해결 가능
  • timestamps: true 옵션은 시간戳 자동 생성을 위해 반드시 포함해야 함