← Back to list

vercel-react-best-practices
by jong-kyung
⭐ 0🍴 0📅 Jan 20, 2026
SKILL.md
name: vercel-react-best-practices description: Vercel Engineering의 React 및 Next.js 성능 최적화 가이드라인. React/Next.js 코드를 작성, 리뷰, 리팩터링할 때 최적 성능 패턴을 보장하기 위해 사용하는 스킬이다. React 컴포넌트, Next.js 페이지, 데이터 페칭, 번들 최적화, 성능 개선 작업에서 트리거된다. license: MIT metadata: author: vercel version: "1.0.0"
Vercel React Best Practice
Vercel에서 유지 관리하는 React 및 Next.js 애플리케이션 성능 최적화 종합 가이드다. 영향도 우선순위에 따라 8개 카테고리, 45개 규칙으로 구성되어 자동 리팩터링과 코드 생성에 참고할 수 있다.
적용 시점
다음 상황에서 이 가이드를 참고한다:
- 새로운 React 컴포넌트 또는 Next.js 페이지 작성
- 데이터 페칭 구현(클라이언트/서버)
- 성능 이슈 코드 리뷰
- 기존 React/Next.js 코드 리팩터링
- 번들 크기 또는 로드 시간 최적화
우선순위별 규칙 카테고리
| 우선순위 | 카테고리 | 영향도 | 접두사 |
|---|---|---|---|
| 1 | 워터폴 제거 | CRITICAL | async- |
| 2 | 번들 크기 최적화 | CRITICAL | bundle- |
| 3 | 서버 측 성능 | HIGH | server- |
| 4 | 클라이언트 측 데이터 페칭 | MEDIUM-HIGH | client- |
| 5 | 리렌더 최적화 | MEDIUM | rerender- |
| 6 | 렌더링 성능 | MEDIUM | rendering- |
| 7 | 자바스크립트 성능 | LOW-MEDIUM | js- |
| 8 | 고급 패턴 | LOW | advanced- |
빠른 참고
1. 워터폴 제거 (CRITICAL)
async-defer-await- 필요한 분기 안으로 await 이동async-parallel- 독립 작업에 Promise.all() 사용async-dependencies- 부분 의존성에는 better-all 사용async-api-routes- API 라우트에서 프라미스는 빨리 시작하고 늦게 awaitasync-suspense-boundaries- Suspense로 콘텐츠 스트리밍
2. 번들 크기 최적화 (CRITICAL)
bundle-barrel-imports- 배럴 파일 피하고 직접 임포트bundle-dynamic-imports- 무거운 컴포넌트에 next/dynamic 사용bundle-defer-third-party- 분석/로깅은 하이드레이션 이후 로드bundle-conditional- 기능 활성화 시에만 모듈 로드bundle-preload- 호버/포커스 시 프리로드로 체감 속도 개선
3. 서버 측 성능 (HIGH)
server-cache-react- 요청 내 중복 제거에 React.cache() 사용server-cache-lru- 요청 간 캐싱에 LRU 캐시 사용server-serialization- 클라이언트 컴포넌트로 전달하는 데이터 최소화server-parallel-fetching- 컴포넌트를 재구성해 페칭 병렬화server-after-nonblocking- 논블로킹 작업에 after() 사용
4. 클라이언트 측 데이터 페칭 (MEDIUM-HIGH)
client-swr-dedup- SWR로 요청 중복 제거client-event-listeners- 전역 이벤트 리스너 중복 제거
5. 리렌더 최적화 (MEDIUM)
rerender-defer-reads- 콜백에서만 쓰는 상태는 구독하지 않기rerender-memo- 비싼 작업을 메모이즈 컴포넌트로 분리rerender-dependencies- effect에 원시값 의존성 사용rerender-derived-state- 연속 값 대신 파생된 불리언에 구독rerender-functional-setstate- 안정적 콜백을 위해 함수형 setState 사용rerender-lazy-state-init- 비싼 초기값은 useState에 함수 전달rerender-transitions- 긴급하지 않은 업데이트에 startTransition 사용
6. 렌더링 성능 (MEDIUM)
rendering-animate-svg-wrapper- SVG 요소 대신 div 래퍼 애니메이션rendering-content-visibility- 긴 목록에 content-visibility 적용rendering-hoist-jsx- 정적 JSX를 컴포넌트 밖으로 추출rendering-svg-precision- SVG 좌표 정밀도 줄이기rendering-hydration-no-flicker- 클라이언트 전용 데이터에 인라인 스크립트 사용rendering-activity- 표시/숨김에 Activity 컴포넌트 사용rendering-conditional-render- 조건 렌더링은 && 대신 삼항 사용
7. 자바스크립트 성능 (LOW-MEDIUM)
js-batch-dom-css- CSS 변경은 클래스/cssText로 묶기js-index-maps- 반복 조회는 Map 생성js-cache-property-access- 루프에서 객체 프로퍼티 캐시js-cache-function-results- 함수 결과를 모듈 레벨 Map으로 캐시js-cache-storage- localStorage/sessionStorage 읽기 캐시js-combine-iterations- 여러 filter/map을 한 루프로 합치기js-length-check-first- 비싼 비교 전에 배열 길이 확인js-early-exit- 함수는 조기 반환js-hoist-regexp- RegExp 생성은 루프 밖으로 끌어올리기js-min-max-loop- 정렬 대신 루프로 min/max 찾기js-set-map-lookups- O(1) 조회에 Set/Map 사용js-tosorted-immutable- 불변성을 위해 toSorted() 사용
8. 고급 패턴 (LOW)
advanced-event-handler-refs- 이벤트 핸들러를 ref에 저장advanced-use-latest- 안정적인 콜백 ref를 위한 useLatest
사용 방법
자세한 설명과 코드 예시는 개별 규칙 파일을 확인한다:
rules/async-parallel.md
rules/bundle-barrel-imports.md
rules/_sections.md
각 규칙 파일에는 다음이 포함된다:
- 왜 중요한지에 대한 간단한 설명
- 잘못된 코드 예시와 설명
- 올바른 코드 예시와 설명
- 추가 맥락과 참고 링크
전체 통합 문서
모든 규칙을 확장한 전체 가이드는 AGENTS.md를 참고한다.
Score
Total Score
45/100
Based on repository quality metrics
✓SKILL.md
SKILL.mdファイルが含まれている
+20
○LICENSE
ライセンスが設定されている
0/10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
○言語
プログラミング言語が設定されている
0/5
○タグ
1つ以上のタグが設定されている
0/5
Reviews
💬
Reviews coming soon