Skip to main content
← 스터디로 돌아가기

Heavy Client Component

전체가 Client Component: 이 페이지의 모든 코드가 JS 번들에 포함됩니다. 필터링, 정렬, 리스트 렌더링 모두 클라이언트에서 처리합니다.

이 페이지는 'use client'로 선언되어 전체가 클라이언트 번들에 포함됩니다. 필터, 정렬, 20개 아이템 렌더링이 모두 클라이언트에서 처리됩니다.

Item 4이것은 아이템 4의 설명입니다. 클라이언트에서 렌더링됩니다.
2,115
Item 2이것은 아이템 2의 설명입니다. 클라이언트에서 렌더링됩니다.
2,258
Item 6이것은 아이템 6의 설명입니다. 클라이언트에서 렌더링됩니다.
2,391
Item 19이것은 아이템 19의 설명입니다. 클라이언트에서 렌더링됩니다.
2,705
Item 16이것은 아이템 16의 설명입니다. 클라이언트에서 렌더링됩니다.
2,729
Item 15이것은 아이템 15의 설명입니다. 클라이언트에서 렌더링됩니다.
2,850
Item 5이것은 아이템 5의 설명입니다. 클라이언트에서 렌더링됩니다.
4,239
Item 17이것은 아이템 17의 설명입니다. 클라이언트에서 렌더링됩니다.
5,628
Item 20이것은 아이템 20의 설명입니다. 클라이언트에서 렌더링됩니다.
5,734
Item 8이것은 아이템 8의 설명입니다. 클라이언트에서 렌더링됩니다.
6,288
Item 10이것은 아이템 10의 설명입니다. 클라이언트에서 렌더링됩니다.
6,684
Item 11이것은 아이템 11의 설명입니다. 클라이언트에서 렌더링됩니다.
7,546
Item 9이것은 아이템 9의 설명입니다. 클라이언트에서 렌더링됩니다.
8,660
Item 18이것은 아이템 18의 설명입니다. 클라이언트에서 렌더링됩니다.
8,940
Item 13이것은 아이템 13의 설명입니다. 클라이언트에서 렌더링됩니다.
8,956
Item 3이것은 아이템 3의 설명입니다. 클라이언트에서 렌더링됩니다.
9,384
Item 7이것은 아이템 7의 설명입니다. 클라이언트에서 렌더링됩니다.
10,046
Item 12이것은 아이템 12의 설명입니다. 클라이언트에서 렌더링됩니다.
10,312
Item 14이것은 아이템 14의 설명입니다. 클라이언트에서 렌더링됩니다.
10,630
Item 1이것은 아이템 1의 설명입니다. 클라이언트에서 렌더링됩니다.
10,655

이 페이지의 소스코드

'use client'  // ← 전체 페이지가 클라이언트 번들에 포함

import { useState } from 'react'

const HeavyClientPage = () => {
  const [filter, setFilter] = useState('')
  const [sortOrder, setSortOrder] = useState('asc')

  // 필터링, 정렬, 리스트 → 모두 클라이언트 JS
  const filtered = ITEMS
    .filter(item => item.title.includes(filter))
    .sort(...)

  return (
    <div>
      <input onChange={e => setFilter(...)} />
      {filtered.map(item => <div>...</div>)}
    </div>
  )
}

문제점: 이 페이지의 모든 코드(20개 아이템 데이터, 필터/정렬 로직, UI)가 JS 번들에 포함됩니다. 번들 크기가 커지면 hydration이 늦어지고, hydration이 완료되기 전에는 Link의 prefetch가 시작되지 않습니다.

← 목록으로 돌아가기