728x90
728x90
Image 컴포넌트
들어가며
- Next.js에서 기본으로 제공하는 Image 컴포넌트에 대해 정리해본다.

Image 컴포넌트
개념
- Next.js에서 다양한 퍼포먼스 기능과 편리한 설정을 지원하는 컴포넌트
- 이미지 컴포넌트를 이용하면 이미지 불러오기 작업을 최적화할 수 있다.
- 또한 이미지 크기 조정, 지연 로딩(Lazy Loading)을 지원하며, WebP와 같은 최신 이미지 형식이 자동으로 처리된다.
- 다양한 기기와 화면 크기에 맞게 이미지 크기를 유동적으로 조절할 수 있다.
사용 방법
기본 사용법
next/image
모듈을 불러와서 사용한다.
import Image from 'next/image'; export default function Home() { return ( <div> <h1>Next.js Image Example</h1> <Image src="/path/to/image.jpg" alt="Example image" width={500} height={300} layout="responsive" /> </div> ); }
로컬 이미지 사용하기
- 이미지 컴포넌트에 이미지 소스(
src
)와 대체 텍스트(alt
)는 필수로 지정해준다. - 너비와 높이를 명시적으로 지정하면 레이아웃 변동이 발생하지 않는다.
priority
속성을 통해 상단의 중요한 이미지를 미리 로드할 수 있다.
import Image from 'next/image'; import mapsImg from '@/images/maps.jpg'; <div className="flex gap-x-4 mt-4"> <div> <Image src={mapsImg} alt="maps" width={192} height={192} objectFit="cover" className="rounded" /> <h2>Local Image</h2> </div> </div>
원격 이미지 사용하기
- 원격 이미지를 사용할 때는
next.config.mjs
파일에서 지원할 URL 패턴을 등록해야 한다.
./next.config.mjs
module.exports = { images: { remotePatterns: [ { protocol: 'https', hostname: 'example.com', pathname: '/images/tours/**', }, ], }, };
- 원격 이미지는 레이아웃 안정성을 위해 너비(
width
)와 높이(height
) 속성을 필수로 지정해야 한다.
<Image src="https://example.com/images/tour.jpg" alt="tour" width={192} height={192} priority objectFit="cover" className="rounded" />
반응형 이미지 사용하기
fill
속성을 이용해 부모 요소에 맞게 이미지를 채운다.- 부모 요소는
position: relative
속성을 포함해야 하고, 고정된 높이를 갖아야 한다. sizes
속성을 통해 화면 크기별로 적절한 이미지 크기를 제공하여 성능을 최적화할 수 있다.
<div className="relative h-48 mb-2"> <Image src={tour.image} alt={tour.name} fill sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw" objectFit="cover" className="rounded" /> </div>
기능
자동 크기 조정
- 이미지를 자동으로 필요에 따라 리사이징하여 다양한 뷰포트와 디바이스에 맞게 최적화된 이미지를 제공한다.
레이아웃 조정
fill
,fixed
,intrinsic
,responsive
등의 레이아웃 옵션을 제공하여 이미지가 페이지 내에서 어떻게 배치될지 결정할 수 있다.
지연 로딩(Lazy Loading)
- 이미지가 화면에 보여질 때까지 로드하지 않아 페이지 로드 속도를 향상시킨다.
웹 최적화
- WebP와 같은 최신 이미지 포맷을 지원하여 더 작은 파일 크기로 고품질 이미지를 제공한다.
Placeholder
- 로딩 중인 이미지 대신, 블러 처리된 placeholder를 표시하여 시각적 경험을 개선한다.
사용 예
import Link from 'next/link'; import Image from 'next/image'; import logoImg from '@/assets/logo.png'; import classes from './main-header.module.css'; export default function MainHeader() { return ( <header className={classes.header}> <Link className={classes.logo} href="/"> <Image src={logoImg} alt="A plaate with food on it" /> NextLevel Food </Link> <nav className={classes.nav}> <ul> <li> <Link href="/meals">Browse Meals</Link> </li> <li> <Link href="/community">Foodies Community</Link> </li> </ul> </nav> </header> ); }
참고 사이트
Components: <Image> | Next.js
Optimize Images in your Next.js Application using the built-in Component.
nextjs.org
728x90
728x90
'Framework > Next.js' 카테고리의 다른 글
[Next.js] 렌더링 방식 정리 (CSR(Client Side Rendering), SSR(Server Side Rendering), SSG(Static Site Generation), ISR(Incremental Static Regeneration)) (14) | 2024.11.14 |
---|---|
[Next.js] 테마 토글 기능 설정하기 (with shadcn/ui) (0) | 2024.11.05 |
[Next.js] 갑자기 "'next'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는배치 파일이 아닙니다." 오류가 발생할 때 해결 방법 (0) | 2024.10.30 |
[Next.js] 환경 변수 사용 방법 (1) | 2024.10.29 |
[Next.js] 폴더 구조 및 동적 경로 설정하기 (0) | 2024.10.16 |
[Next.js] 정적 생성(Static Generation)과 서버사이드 렌더링(Server-side Rendering) (0) | 2024.08.08 |
[Next.js] 메타데이터(Metadata) 추가하기 (0) | 2024.08.07 |
[Next.js] 서버 컴포넌트와 클라이언트 컴포넌트 (0) | 2024.08.05 |