Next.js의 middleware는 Edge runtime에서 실행된다는 것을 알게 되었다. 이번 기회에 Edge runtime과 Node.js Runtime에 대해서 정리해보겠다.
Node.js Runtime에서는 모든 Next.js API Routes가 기본적으로 실행된다. Node.js의 모든 모듈과 데이터베이스 연결이 가능하다.
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
export default async function handler(req, res) {
// PrismaClient를 사용한 데이터베이스 조회
const users = await prisma.user.findMany()
res.status(200).json({
message: "Node.js Runtime 사용",
data: users
})
}
Edge Runtime은 Node.js Runtime에 비해 가볍고 빠른 실행 환경이다. 그 댓가로 Edge Runtime에서는 Node.js의 일부 기능이 제한된다.
예를 들어 유저의 정보를 찾기 위해서 db를 참고할 수 없고 아래처럼 쿠키를 활용해야 한다.
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
export function middleware(request: NextRequest) {
// 요청 URL 검사
const isLoggedIn = request.cookies.get('auth')
if (!isLoggedIn) {
return NextResponse.redirect(new URL('/login', request.url))
}
return NextResponse.next()
}