728x90
반응형
1. React Compiler란 무엇인가?
React Compiler는 React 애플리케이션의 성능을 자동으로 최적화하는 컴파일러입니다. 개발자가 수동으로 작성해야 했던 useMemo, useCallback, React.memo 등의 메모이제이션을 자동으로 처리해줍니다.
주요 특징:
- 자동 메모이제이션: 컴포넌트와 함수를 자동으로 최적화
- 번들 크기 감소: 불필요한 리렌더링 방지
- 개발자 경험 향상: 수동 최적화 코드 작성 불필요
2. 버전 요구사항
React Compiler 사용 가능 버전:
- Next.js: 15.0.0 이상
- React: 18.3.0 이상 (권장: 19.0.0 이상)
- Node.js: 18.17.0 이상
3. Next.js 15로 업그레이드하는 방법
Codemod를 통한 업그레이드 방법:
npx @next/codemod@canary upgrade latest
Next.js 15에서는 Codemod 도구가 함께 제공되어 반복적이고 오류가 생기기 쉬운 코드 수정을 자동으로 처리할 수 있습니다.
수동 방법:
npm i next@latest react@latest react-dom@latest eslint-config-next@latest
4. React Compiler 설정 방법
npm install babel-plugin-react-compiler
그리고 next.config.mjs에 experimental.reactCompile 을 추가한다.
/** @type {import('next').NextConfig} */
const nextConfig = {
experimental: {
reactCompiler: true,
},
};
export default nextConfig;
끝!
잘 적용되었는지 확인해보기
테스트로 Page 만들어서 확인해보기
ReactCompilerTestPage.tsx
"use client";
import { useState } from "react";
import ReactCompilerTest from "@components/ReactCompilerTest";
export default function ReactCompilerTestPage() {
const [count, setCount] = useState(0);
const [name, setName] = useState("");
const handleIncrement = () => {
setCount(prev => prev + 1);
};
const handleNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setName(e.target.value);
};
return (
<div className="container mx-auto p-8">
<p>name: {name}</p>
<p>count: {count}</p>
<ReactCompilerTest handleIncrement={handleIncrement} handleNameChange={handleNameChange} />
</div>
);
}
ReactCompilerTest.tsx
"use client";
type Props = {
handleIncrement: () => void;
handleNameChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
};
export default function ReactCompilerTest({ handleIncrement, handleNameChange }: Props) {
console.log("ReactCompilerTest render");
return (
<div className="p-4 border rounded-lg">
<h2 className="text-xl font-bold mb-4">React Compiler Test</h2>
<div className="space-y-4">
<div>
<label className="block text-sm font-medium mb-2">Name:</label>
<input
type="text"
onChange={handleNameChange}
className="border rounded px-3 py-2 w-full"
placeholder="Enter your name"
/>
</div>
<div>
<button onClick={handleIncrement} className="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600">
Increment
</button>
</div>
</div>
</div>
);
}
React Compiler가 미 적용되어있다면:
input을 입력하든, Increment을 누르면 ReactCompilerTest 컴포넌트가 지속적으로 렌더링 되어 ReactCompilerTest render로그가 계속해서 보여질텐데,
React Compiler가 잘 적용되어있다면:
초기 생성 빼고는 알아서 잘 최적화가 되어있어 로그가 발생하지 않는다!
또 다른 방법은 개발자도구에서 Components를 선택했을때 이미지와 같이 Memo 아이콘이 보이면 최적화가 잘 적용된것입니다.

반응형
'Web' 카테고리의 다른 글
| 리액트 컴포넌트 성능 최적화 (0) | 2025.01.11 |
|---|---|
| [Next.js] - Pages Router 기반 SSR (1) | 2024.10.15 |
| [TS] - 함수 오버로딩(Overloading) (0) | 2024.10.06 |
| 반응형 디자인을 위한 개발자 TIP (0) | 2024.08.16 |
| SOP, CORS 개념 (0) | 2023.03.02 |