티스토리 뷰
1. 개요
노마드 코더의 캐럿마켓 클론코딩 강의를 수강하던 중 처음 보는 에러를 만났다.
이 꽃은 pixabay에서 다운로드 한 꽃 이미지이다. 학습을 위해 다운로드한 이 이미지를 이용해 상품을 간단히 등록한 후, 상품 상세 페이지로 이동해보았다.
Error: Invalid src prop (https://upload.wikimedia.org/wikipedia/commons/thumb/f/f1/2ChocolateChipCookies.jpg/250px-2ChocolateChipCookies.jpg) on `next/image`, hostname "upload.wikimedia.org" is not configured under images in your `next.config.js` See more info: https://nextjs.org/docs/messages/next-image-unconfigured-host
그랬더니 이런 에러가 발생했다. 무슨 에러인지 검색해보니, 이 에러는 next/image 컴포넌트가 이미지 URL의 호스트네임을 허용된 도메인으로 인식하지 못했을 때 발생한다는 것을 알게 되었다.
2. 원인
Next.js의 next/image 컴포넌트는 성능 최적화를 위해 이미지를 특정 호스트에서만 로드하도록 구성하도록 되어 있다. 그래서 이를 위해서는 외부 호스트 이미지를 허용하기 위해, 이에 대한 명시적인 설정이 필요하다. 그리고 현재 프로젝트에서는 test01이라는 유저의 avatar 이미지 url이 위키피디아의 쿠키 이미지로 설정되어 있고, 이 도메인이 next.config.js 파일의 설정에 포함되어 있지 않았기에 발생한 문제였다.
3. 해결
/** @type {import('next').NextConfig} */
const nextConfig = {
images: {
remotePatterns: [
{
hostname: "avatars.githubusercontent.com",
},
{
protocol: "https",
hostname: "upload.wikimedia.org",
},
{
hostname: "imagedelivery.net",
},
],
},
};
export default nextConfig;
위 코드처럼 next.config.js 파일에 에러에서 알려준 도메인(upload.wikimedia.org)을 추가하였다. hostname에 upload.wikimedia.org를 추가한 후 서버를 다시 시작하는 것으로 Next.js가 이 도메인의 이미지를 로드할 수 있도록 허용할 수 있었다. 이 때, protocol을 별도로 설정하지 않으면 기본적으로 모든 프로토콜(http, https)을 허용하게 된다. 그렇기에 보안상 필요하다면 protocol을 명시하는 것이 좋다.
4. 결론
- Next.js의 next/image 컴포넌트를 이용할 때 외부 이미지를 불러오기 위해서는 도메인 설정이 필요
- 이를 통해 성능 최적화 및 보안을 유지하며 외부 이미지를 효율적으로 사용 가능
- 도메인 설정은 next.config.js 파일에서 설정 가능
'기록' 카테고리의 다른 글
Next.js에서 API 요청 결과를 캐싱하는 방법: unstable_cache, revalidate, revalidatePath, revalidateTags (Legacy API) (0) | 2024.11.02 |
---|---|
Next.js의 Soft/Hard Refresh, Intercepting Routes, Parallel Routes 간단하게 기록 (0) | 2024.10.27 |
Next.js의 params, loading (1) | 2024.10.20 |
Prisma에서 발생하는 에러 중 하나인 PrismaClientKnownRequestError 처리하기 (0) | 2024.10.19 |
zod의 refine과 superRefine (0) | 2024.10.06 |
- Total
- Today
- Yesterday
- Redux
- 비트마스킹
- 알고리즘
- async
- typescript
- BFS
- 자바스크립트
- 브루트포스
- 구현
- 순열
- NextJS
- 햄버거버튼
- 타입스크립트
- 프로그래머스
- Next.js
- 다이나믹프로그래밍
- CSS
- themoviedb
- 동적계획법
- react
- aws
- 스택
- 완전탐색
- 리액트
- SQL
- 백준
- 코드스테이츠
- C++
- 카카오맵
- 넥스트js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |