문서
App Router 사용하기
정적 리소스

'public'의 정적 리소스

Next.js는 루트 디렉토리의 public이라는 폴더 아래에 이미지와 같은 정적 파일을 제공할 수 있습니다. public 내부의 파일은 기본 URL(/)부터 시작하여 코드에서 참조할 수 있습니다.

예를 들어, public/avatars/me.png 파일은 /avatars/me.png 경로를 방문하여 볼 수 있습니다. 해당 이미지를 표시하는 코드는 다음과 같을 수 있습니다:

avatar.js
import Image from "next/image";
 
export function Avatar({ id, alt }) {
  return <Image src={`/avatars/${id}.png`} alt={alt} width="64" height="64" />;
}
 
export function AvatarOfMe() {
  return <Avatar id="me" alt="A portrait of me" />;
}

캐싱

Next.js는 public 폴더의 에셋을 안전하게 캐시할 수 없습니다. 왜냐하면 이들이 변경될 수 있기 때문입니다. 적용되는 기본 캐싱 헤더는 다음과 같습니다:

Cache-Control: public, max-age=0

로봇, 파비콘 및 기타

robots.txt, favicon.ico 등과 같은 정적 메타데이터 파일의 경우, app 폴더 내의 특별한 메타데이터 파일을 사용해야 합니다.

알아두면 좋은 점:

  • 디렉토리 이름은 반드시 public이어야 합니다. 이름을 변경할 수 없으며 정적 에셋을 제공하는 데 사용되는 유일한 디렉토리입니다.
  • 빌드 시간public 디렉토리에 있는 에셋만 Next.js에 의해 제공됩니다. 요청 시간에 추가된 파일은 사용할 수 없습니다. 영구적인 파일 저장을 위해 Vercel Blob과 같은 third-party 서비스를 사용하는 것을 추천합니다.