Next.js App Router course로 만든 프로젝트에서 어느 순간부터 이미지에 엑박이 뜨기 시작했다.
콘솔이나 빌드 과정에서도 에러 메세지가 뜨지 않아서 원인을 찾을 수 없었는데 이미지 src 링크로 들어가 보니 에러 메세지를 발견할 수 있었다.
Unable to optimize image and unable to fallback to upstream image.
검색 결과 이 에러는 middleware
의 matcher
옵션 때문에 발생한다고 한다. 일단 middleware
의 matcher
옵션이 무엇인지 먼저 알아보자.
middleware.ts
(혹은 .js) 파일을 루트 디렉토리에 생성하면 미들웨어를 사용할 수 있다.export const config = {
matcher: '/about/:path*',
}
matcher
옵션을 사용하면 미들웨어를 특정 경로에서만 호출될 수 있도록 설정할 수 있다./about/:path*
경로에서만 미들웨어가 호출될 것이다.export const config = {
matcher: ['/about/:path*', '/dashboard/:path*'],
}
matcher
옵션은 단일 경로뿐만 아니라 배열에 여러 개의 경로를 전달하는 형태로도 사용할 수 있다.export const config = {
matcher: [
'/((?!api|_next/static|_next/image|favicon.ico).*)',
],
}
api
, _next/static
, _next/image
, favicon.ico
으로 시작하는 경로에서는 미들웨어를 호출하지 않는다.export const config = {
matcher: ['/((?!api|_next/static|_next/image|.png).*)'],
};
matcher
옵션이다.http://localhost:3000/_next/image?url=...
이고 경로가 _next/image
로 시작하기 때문에 미들웨어가 호출되지 않아야 하는 거 같긴 한데.. 일단 에러가 발생했으니 수정을 해 본다.export const config = {
matcher: ['/((?!api|_next/static|_next/image|.*\\.png$).*)'],
};
matcher
옵션을 수정했다..png
로 끝나는 경우에도 미들웨어를 호출하지 않도록 설정을 추가하니 사진이 엑박으로 뜨던 문제가 해결되었다.[stackoverflow] NextJS ImageError: Unable to optimize image and unable to fallback to upstream image
Next.js docs > middleware
유익한 자료 감사합니다.