들어가며
최근 Vercel Engineering에서 React/Next.js 성능 최적화 가이드를 공개했습니다. 흥미로운 점은 이 문서가 단순한 개발 가이드가 아니라, AI 에이전트와 LLM이 코드를 생성하고 리팩토링할 때 참고하도록 설계되었다는 것입니다.
Note:
This document is mainly for agents and LLMs to follow when maintaining, generating, or refactoring React and Next.js codebases at Vercel.
총 45개 규칙, 8개 카테고리로 구성되어 있으며, 각 규칙은 영향도(CRITICAL → LOW)에 따라 우선순위가 매겨져 있습니다.
8개 카테고리 한눈에 보기
우선순위 | 카테고리 | 영향도 | 핵심 내용 |
:---: | :--- | :---: | :--- |
1 | Eliminating Waterfalls | CRITICAL | 폭포수 현상 제거, 병렬 처리 |
2 | Bundle Size Optimization | CRITICAL | 번들 크기 최적화, 동적 임포트 |
3 | Server-Side Performance | HIGH | 서버 캐싱, RSC 최적화 |
4 | Client-Side Data Fetching | MEDIUM-HIGH | SWR, 요청 중복 제거 |
5 | Re-render Optimization | MEDIUM | 불필요한 리렌더 방지 |
6 | Rendering Performance | MEDIUM | 렌더링 성능 개선 |
7 | JavaScript Performance | LOW-MEDIUM | JS 마이크로 최적화 |
8 | Advanced Patterns | LOW | 고급 패턴 |
주요 규칙 살펴보기
1. Eliminating Waterfalls (CRITICAL)
폭포수 현상은 성능의 가장 큰 적입니다. 순차적인 await는 전체 네트워크 지연을 누적시킵니다.
// ❌ 순차 실행: 3번의 왕복 const user = await fetchUser() const posts = await fetchPosts() const comments = await fetchComments() // ✅ 병렬 실행: 1번의 왕복 const [user, posts, comments] = await Promise.all([ fetchUser(), fetchPosts(), fetchComments() ])
2-10배 성능 개선이 가능한 가장 임팩트 있는 최적화입니다.
2. Bundle Size Optimization (CRITICAL)
Barrel 파일 import를 피하세요. 대형 라이브러리의 barrel import는 200-800ms의 로딩 비용을 발생시킵니다.
// ❌ 전체 라이브러리 로드 (1,583 모듈) import { Check, X, Menu } from 'lucide-react' // ✅ 필요한 것만 로드 (3 모듈) import Check from 'lucide-react/dist/esm/icons/check' import X from 'lucide-react/dist/esm/icons/x' import Menu from 'lucide-react/dist/esm/icons/menu'
Next.js 13.5+에서는
optimizePackageImports 설정으로 자동 최적화할 수 있습니다.// next.config.js module.exports = { experimental: { optimizePackageImports: ['lucide-react', '@mui/material'] } }
3. Server-Side Performance (HIGH)
컴포넌트 컴포지션으로 병렬 데이터 페칭을 구현하세요.
// ❌ Sidebar가 Header 페칭을 기다림 export default async function Page() { const header = await fetchHeader() return ( <div> <div>{header}</div> <Sidebar /> </div> ) } // ✅ 둘 다 동시에 페칭 export default function Page() { return ( <div> <Header /> <Sidebar /> </div> ) }
React Server Components는 트리 내에서 순차적으로 실행됩니다. 컴포지션으로 재구성하면 데이터 페칭을 병렬화할 수 있습니다.
4. Re-render Optimization (MEDIUM)
함수형 setState를 사용하세요. stale closure 버그를 방지하고 안정적인 콜백을 만들 수 있습니다.
// ❌ items 의존성 필요, 매번 재생성 const addItem = useCallback((newItem) => { setItems([...items, newItem]) }, [items]) // ✅ 의존성 없음, 안정적인 참조 const addItem = useCallback((newItem) => { setItems(curr => [...curr, newItem]) }, [])
장점:
- 안정적인 콜백 참조 - 상태 변경 시 재생성 불필요
- stale closure 방지 - 항상 최신 상태 값 사용
- 의존성 감소 - 메모리 누수 위험 감소
5. JavaScript Performance (LOW-MEDIUM)
O(1) 조회를 위해 Set/Map을 사용하세요.
// ❌ O(n) per check const allowedIds = ['a', 'b', 'c'] items.filter(item => allowedIds.includes(item.id)) // ✅ O(1) per check const allowedIds = new Set(['a', 'b', 'c']) items.filter(item => allowedIds.has(item.id))
1000개 아이템 × 1000개 허용 ID의 경우: 1M ops → 2K ops
Claude Code와 함께 사용하기
이 가이드의 진정한 가치는 AI 코딩 도구와 함께 사용할 때 발휘됩니다. Claude Code는 이러한 규칙들을
.claude/skills/ 폴더에 저장하면 자동으로 참고합니다.설치 방법
1. Claude Code 설치
npm install -g @anthropic-ai/claude-code
2. 프로젝트에 스킬 추가
프로젝트 루트에
.claude/skills/vercel-react-best-practices/ 폴더를 생성하고, Vercel의 가이드 파일들을 추가합니다.your-project/ ├── .claude/ │ └── skills/ │ └── vercel-react-best-practices/ │ ├── SKILL.md # 스킬 정의 │ ├── AGENTS.md # 전체 가이드 (2,250줄) │ └── rules/ # 45개 개별 규칙 │ ├── async-parallel.md │ ├── bundle-barrel-imports.md │ └── ... ├── src/ └── package.json
3. SKILL.md 작성
--- name: vercel-react-best-practices description: React and Next.js performance optimization guidelines from Vercel Engineering. ---
이제 Claude Code가 React/Next.js 코드를 작성하거나 리뷰할 때 이 규칙들을 자동으로 참고합니다.
AI 시대의 개발 가이드
이 문서가 흥미로운 이유는 "AI가 읽기 좋은 형태" 로 작성되었다는 점입니다.
각 규칙의 구조
### 규칙명 **Impact: CRITICAL/HIGH/MEDIUM/LOW** 간단한 설명 **Incorrect: 문제점 설명** 코드 예시 **Correct: 해결책** 코드 예시
이 구조의 장점:
- 명확한 Before/After 비교 - AI가 패턴을 학습하기 쉬움
- 영향도 표시 - 우선순위 판단 가능
- 구체적인 코드 예시 - 즉시 적용 가능
실제 활용 사례
Claude Code에게 다음과 같이 요청하면:
"이 컴포넌트의 성능을 최적화해줘"
Claude Code는 자동으로:
- 폭포수 패턴 감지 →
Promise.all()적용
- barrel import 발견 → 직접 import로 변경
- 불필요한 리렌더 감지 → 함수형 setState 적용
- O(n) 조회 발견 → Set/Map으로 변경
이 모든 것이 Vercel의 Best Practices에 기반합니다.
마치며
AI 코딩 도구가 발전하면서, "AI가 참고할 수 있는 명확한 가이드라인" 의 중요성이 커지고 있습니다. Vercel의 이번 가이드는 그 좋은 예시입니다.
프로젝트에
.claude/skills/를 활용해 팀만의 코딩 규칙을 AI에게 학습시켜 보세요. 일관된 코드 품질과 성능 최적화를 자동으로 얻을 수 있습니다.
