[Next.JS] next/link

리였·2023λ…„ 4μ›” 1일
0

Next.JS

λͺ©λ‘ 보기
1/1

πŸ’‘ NextJS둜 κ°œλ°œν•˜λ©΄μ„œ <a> λŒ€μ‹ μ— Link μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμ—ˆλŠ”λ°, Link의 세뢀적인 κΈ°λŠ₯κ³Ό, <a>μ™€μ˜ 차이λ₯Ό λͺ…ν™•νžˆ μ„€λͺ…ν•  수 μ—†μ—ˆλ‹€. 이번 κΈ°νšŒμ— κ³΅μ‹λ¬Έμ„œλ₯Ό 읽고 NextJS의 Link μ»΄ν¬λ„ŒνŠΈλ₯Ό μ •λ¦¬ν•΄λ³΄μ•˜λ‹€.

NextJS의 Link

Next.jsμ—μ„œ μ œκ³΅ν•˜λŠ” Link μ»΄ν¬λ„ŒνŠΈλŠ” ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ λΌμš°νŒ…μ„ μ‚¬μš©ν•˜μ—¬ νŽ˜μ΄μ§€ 이동을 μˆ˜ν–‰ν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.

μ‚¬μš©λ°©λ²•

κ³΅μ‹λ¬Έμ„œμ— λ”°λ₯΄λ©΄, pages λ””λ ‰ν† λ¦¬μ˜ ꡬ쑰가 λ‹€μŒκ³Ό 같을 λ•Œ,

pages/index.js
pages/about.js
pages/blog/[slug].js

λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

import Link from 'next/link'

function Home() {
  return (
    <ul>
      <li>
        <Link href="/">Home</Link>
      </li>
      <li>
        <Link href="/about">About Us</Link>
      </li>
      <li>
        <Link href="/blog/hello-world">Blog Post</Link>
      </li>
    </ul>
  )
}

export default Home

<a> νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 이유

<a> νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ›Ή κ°œλ°œμ—μ„œ 일반적인 λ°©λ²•μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ Next.jsμ—μ„œ <a> νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜κ²Œ 되면 μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§μ— λŒ€ν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§μ— λŒ€ν•œ 문제
Next.jsλŠ” μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§μ„ μ§€μ›ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€. μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§μ„ μ‚¬μš©ν•˜λŠ” 경우 일반적인 <a> νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ λΌμš°νŒ…μ΄ μ μš©λ˜μ§€ μ•Šμ•„μ„œ νŽ˜μ΄μ§€ 이동 μ‹œ μ„œλ²„μ—μ„œ μƒˆλ‘œκ³ μΉ¨μ΄ λ°œμƒν•©λ‹ˆλ‹€. μ΄λŠ” μ‚¬μš©μž κ²½ν—˜κ³Ό 검색 엔진 μ΅œμ ν™”(SEO)에 뢀정적인 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€.

반면 Link μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜λ©΄ SPA의 κ²½ν—˜μ„ μ œκ³΅ν•˜λ©΄μ„œλ„ 검색 엔진 μ΅œμ ν™”(SEO)에 μœ λ¦¬ν•œ 이점도 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹€μ‹œκ°„ 탐색 κΈ°λŠ₯

Link μ»΄ν¬λ„ŒνŠΈλŠ” νŽ˜μ΄μ§€ 이동을 μœ„ν•΄ νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜μ§€ μ•Šκ³ , λΈŒλΌμš°μ €μ˜ νžˆμŠ€ν† λ¦¬ μŠ€νƒμ— μƒˆλ‘œμš΄ ν•­λͺ©μ„ μΆ”κ°€ν•˜μ—¬ 이전 νŽ˜μ΄μ§€λ‘œ λŒμ•„κ°ˆ 수 μžˆλŠ” μ‹€μ‹œκ°„ 탐색기λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, Link μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ /about νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜λŠ” 경우, λΈŒλΌμš°μ €μ˜ νžˆμŠ€ν† λ¦¬ μŠ€νƒμ— μƒˆλ‘œμš΄ ν•­λͺ©μ΄ μΆ”κ°€λ˜κ³ , 이전 νŽ˜μ΄μ§€λ‘œ λŒμ•„κ°ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ‚¬μš©μžκ°€ λ’€λ‘œ κ°€κΈ° λ²„νŠΌμ„ μ‚¬μš©ν•˜μ—¬ 이전 νŽ˜μ΄μ§€λ‘œ λŒμ•„κ°ˆ 수 있게 ν•΄μ£ΌλŠ” κ²ƒμž…λ‹ˆλ‹€.

μ΄λŸ¬ν•œ κΈ°λŠ₯은 UXλ₯Ό ν–₯μƒμ‹œν‚€λŠ”λ° 큰 도움이 λ©λ‹ˆλ‹€.

검색 엔진 μ΅œμ ν™”(SEO)

Next.js의 Link μ»΄ν¬λ„ŒνŠΈλŠ” 검색 엔진 μ΅œμ ν™”(SEO)에 맀우 μœ λ¦¬ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

일반적인 ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λΌμš°νŒ…μ€ νŽ˜μ΄μ§€λ₯Ό λ‘œλ“œν•˜λŠ” λ™μ•ˆ JavaScript μ½”λ“œκ°€ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— 검색 엔진 ν¬λ‘€λŸ¬κ°€ νŽ˜μ΄μ§€μ˜ λ‚΄μš©μ„ μΈμ‹ν•˜μ§€ λͺ»ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§(SSR)을 μ‚¬μš©ν•˜μ—¬ νŽ˜μ΄μ§€κ°€ λ‘œλ“œλ  λ•Œ μ„œλ²„μ—μ„œ HTML μ½”λ“œλ₯Ό 미리 μƒμ„±ν•˜μ—¬ λΈŒλΌμš°μ €μ— μ „μ†‘ν•˜λŠ” 방법을 μ‚¬μš©ν•©λ‹ˆλ‹€.

Next.js의 Link μ»΄ν¬λ„ŒνŠΈλŠ” ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λΌμš°νŒ…μ„ μ‚¬μš©ν•˜λ©΄μ„œλ„ 검색 엔진 μ΅œμ ν™”(SEO)λ₯Ό μœ„ν•œ μž₯점을 μ œκ³΅ν•©λ‹ˆλ‹€. 이 μ»΄ν¬λ„ŒνŠΈλŠ” νŽ˜μ΄μ§€ 이동에 ν•„μš”ν•œ JavaScript μ½”λ“œλ₯Ό 미리 λ‘œλ“œν•˜κ³ , νŽ˜μ΄μ§€ 이동 μ‹œ λΈŒλΌμš°μ €μ˜ νžˆμŠ€ν† λ¦¬ μŠ€νƒμ— μƒˆλ‘œμš΄ ν•­λͺ©μ„ μΆ”κ°€ν•˜μ—¬ 이전 νŽ˜μ΄μ§€λ‘œ λŒμ•„κ°ˆ 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
이λ₯Ό 톡해 검색 엔진 ν¬λ‘€λŸ¬λŠ” νŽ˜μ΄μ§€ 이동에 ν•„μš”ν•œ λͺ¨λ“  μ½”λ“œλ₯Ό 인식할 수 μžˆμœΌλ―€λ‘œ νŽ˜μ΄μ§€μ˜ μ½˜ν…μΈ λ₯Ό μ μ ˆν•˜κ²Œ 인식할 수 있게 λ©λ‹ˆλ‹€. μ΄λŠ” SEO에 맀우 μœ λ¦¬ν•œ λ°©μ‹μž…λ‹ˆλ‹€.

SEO κ΄€μ μ—μ„œ Router, Link, a νƒœκ·Έ κ°„μ˜ 차이점
Router: RouterλŠ” URL을 κ΄€λ¦¬ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€. 일반적으둜 ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ λΌμš°νŒ…μ— μ‚¬μš©λ©λ‹ˆλ‹€. λΈŒλΌμš°μ €μ˜ μ£Όμ†Œμ°½μ— URL을 μž…λ ₯ν•˜κ±°λ‚˜ λ’€λ‘œ κ°€κΈ°/μ•žμœΌλ‘œ κ°€κΈ° λ²„νŠΌμ„ 클릭할 λ•Œλ§ˆλ‹€ λΈŒλΌμš°μ €μ—μ„œ URL이 λ³€κ²½λ©λ‹ˆλ‹€. 검색 엔진 ν¬λ‘€λŸ¬λŠ” μ΄λŸ¬ν•œ URL을 μ½μ–΄μ„œ ν•΄λ‹Ή νŽ˜μ΄μ§€μ˜ μ½˜ν…μΈ λ₯Ό μƒ‰μΈν™”ν•©λ‹ˆλ‹€.
Link: LinkλŠ” ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ λΌμš°νŒ…μ„ μ²˜λ¦¬ν•˜λ©΄μ„œ SEO에 μœ λ¦¬ν•©λ‹ˆλ‹€. 이 μ»΄ν¬λ„ŒνŠΈλŠ” 클릭 μ΄λ²€νŠΈμ— μ‘λ‹΅ν•˜μ—¬ νŽ˜μ΄μ§€λ₯Ό μ „ν™˜ν•©λ‹ˆλ‹€. Link μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜λ©΄ νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜μ§€ μ•Šκ³  URL을 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 검색 엔진 ν¬λ‘€λŸ¬κ°€ νŽ˜μ΄μ§€μ˜ μ½˜ν…μΈ λ₯Ό 읽을 수 있게 ν•©λ‹ˆλ‹€.
a νƒœκ·Έ: <a> νƒœκ·ΈλŠ” ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ λΌμš°νŒ…μ„ μ²˜λ¦¬ν•˜μ§€ μ•ŠμœΌλ©°, νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•©λ‹ˆλ‹€. μ΄λŠ” 검색 엔진 ν¬λ‘€λŸ¬κ°€ νŽ˜μ΄μ§€μ˜ μ½˜ν…μΈ λ₯Ό 읽을 수 μ—†κ²Œ ν•©λ‹ˆλ‹€. a νƒœκ·ΈλŠ” 보톡 μ™ΈλΆ€ 링크λ₯Ό μ²˜λ¦¬ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

λ”°λΌμ„œ, Link μ»΄ν¬λ„ŒνŠΈλŠ” ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λΌμš°νŒ…μ„ μœ„ν•œ μ»΄ν¬λ„ŒνŠΈλ‘œ, 초기 λ‘œλ”© 속도λ₯Ό ν–₯μƒμ‹œν‚€λŠ” λ™μ‹œμ— 검색 엔진 μ΅œμ ν™”(SEO)에도 이점을 μ œκ³΅ν•©λ‹ˆλ‹€.

λ‹€μ–‘ν•œ props 제곡

Link μ»΄ν¬λ„ŒνŠΈλŠ” λ‹€μ–‘ν•œ 속성(props)을 μ œκ³΅ν•˜μ—¬ νŽ˜μ΄μ§€ 이동을 μ„Έλ°€ν•˜κ²Œ μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, as 속성을 μ‚¬μš©ν•˜μ—¬ λΈŒλΌμš°μ €μ˜ URL 경둜λ₯Ό λ³€κ²½ν•  수 있고, replace 속성을 μ‚¬μš©ν•˜μ—¬ μƒˆλ‘œμš΄ νŽ˜μ΄μ§€λ‘œ 이동할 λ•Œ κΈ°μ‘΄ νŽ˜μ΄μ§€λ₯Ό λŒ€μ²΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, prefetch 속성을 μ‚¬μš©ν•˜μ—¬ 미리 νŽ˜μ΄μ§€λ₯Ό λΆˆλŸ¬μ™€ μΊμ‹œν•΄ λ‘λŠ” 것도 κ°€λŠ₯ν•©λ‹ˆλ‹€.

이외에도 Link μ»΄ν¬λ„ŒνŠΈλŠ” λ‹€μŒκ³Ό 같은 속성(props)을 κ°€μ§‘λ‹ˆλ‹€.

href: μ΄λ™ν•˜κ³ μž ν•˜λŠ” νŽ˜μ΄μ§€μ˜ URL을 μ§€μ •ν•©λ‹ˆλ‹€.
as: λΈŒλΌμš°μ €μ—μ„œ URL의 경둜λ₯Ό λ³€κ²½ν•  λ•Œ μ‚¬μš©λ˜λŠ” 가상 경둜(virtual path)λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
replace: 이동할 λ•Œ νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜μ§€ μ•Šκ³  기쑴의 νŽ˜μ΄μ§€λ₯Ό λŒ€μ²΄ν•˜λŠ” μ˜΅μ…˜μž…λ‹ˆλ‹€.
scroll: μƒˆλ‘œμš΄ νŽ˜μ΄μ§€λ‘œ 이동할 λ•Œ 슀크둀 μœ„μΉ˜λ₯Ό μ‘°μ ˆν•˜λŠ” μ˜΅μ…˜μž…λ‹ˆλ‹€.
shallow: λΈŒλΌμš°μ €μ˜ νžˆμŠ€ν† λ¦¬ μŠ€νƒμ—μ„œ μƒˆλ‘œμš΄ ν•­λͺ©μ„ μƒμ„±ν•˜μ§€ μ•Šκ³  이전 νŽ˜μ΄μ§€λ‘œ λŒμ•„κ°€λŠ” μ˜΅μ…˜μž…λ‹ˆλ‹€.
passHref: a νƒœκ·Έμ— href 속성을 μΆ”κ°€ν•  지 μ—¬λΆ€λ₯Ό κ²°μ •ν•˜λŠ” μ˜΅μ…˜μž…λ‹ˆλ‹€.
prefetch: 미리 νŽ˜μ΄μ§€λ₯Ό λΆˆλŸ¬μ™€ μΊμ‹œν•΄ λ‘λŠ” μ˜΅μ…˜μž…λ‹ˆλ‹€.

λΆˆν•„μš”ν•œ <a> νƒœκ·Έ

Link μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜λ©΄ κ°œλ°œμžκ°€ λ³„λ„λ‘œ a νƒœκ·Έλ₯Ό μž‘μ„±ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ Link μ»΄ν¬λ„ŒνŠΈλŠ” λ‚΄λΆ€μ μœΌλ‘œ μ•Œλ§žμ€ a νƒœκ·Έλ₯Ό μƒμ„±ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžλŠ” νŽ˜μ΄μ§€ 이동을 κ΅¬ν˜„ν•  λ•Œ λΆˆν•„μš”ν•œ μ½”λ“œ μž‘μ„±μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ, Link μ»΄ν¬λ„ŒνŠΈλŠ” μ›Ή 접근성에 λŒ€ν•œ μ΅œμ‹  κ·œμΉ™μ„ μ€€μˆ˜ν•©λ‹ˆλ‹€.

μ›Ή μ ‘κ·Όμ„±(Web Accessibility)은 λͺ¨λ“  μ‚¬λžŒμ΄ μΈν„°λ„·μ΄λ‚˜ λͺ¨λ°”일 λ””λ°”μ΄μŠ€ λ“±μ˜ 디지털 κΈ°κΈ°λ₯Ό 톡해 μ œκ³΅λ˜λŠ” μ›Ή μ½˜ν…μΈ μ™€ κΈ°λŠ₯에 λ™λ“±ν•˜κ²Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ 보μž₯ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

Link μ»΄ν¬λ„ŒνŠΈλŠ” μ΄λŸ¬ν•œ μ›Ή μ ‘κ·Όμ„± κ·œμΉ™μ„ μ€€μˆ˜ν•˜μ—¬, λͺ¨λ“  μ‚¬μš©μžκ°€ μ‰½κ²Œ νŽ˜μ΄μ§€λ₯Ό 이동할 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€. λ”°λΌμ„œ, κ°œλ°œμžλŠ” Link μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ μ›Ή 접근성을 κ³ λ €ν•˜μ§€ μ•Šκ³  μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ„ λ©λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ

Link μ»΄ν¬λ„ŒνŠΈλŠ” Next.jsμ—μ„œ μ œκ³΅ν•˜λŠ” 핡심 κΈ°λŠ₯ 쀑 ν•˜λ‚˜μ΄λ―€λ‘œ, Next.jsλ₯Ό μ‚¬μš©ν•˜λŠ” 개발자라면 이λ₯Ό 잘 ν™œμš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. νŽ˜μ΄μ§€ 이동이 λΉ λ₯΄κ³  λΆ€λ“œλŸ¬μš΄ UXλ₯Ό μ œκ³΅ν•˜λ©΄μ„œ, 검색 엔진 μ΅œμ ν™”(SEO)κΉŒμ§€ κ³ λ €ν•  수 μžˆλŠ” Link μ»΄ν¬λ„ŒνŠΈλŠ” Next.js κ°œλ°œμ„ μœ„ν•œ ν•„μˆ˜μ μΈ μš”μ†Œμž…λ‹ˆλ‹€.

profile
μ˜€λŠ˜λ„ 승승μž₯ꡬλ₯Ό μœ„ν•΄ μ—°μŠ΅ 쀑

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보