'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 서비스를 사용하는 것을 추천합니다.