본문 바로가기
카테고리 없음

React 렌더링 최적화 코드 분할 프로파일링

by 디디이 2025. 6. 24.

렌더링 최적화 React

React는 빠르고 효율적인 사용자 인터페이스 구축을 위한 라이브러리로 널리 사용되지만, 프로젝트가 커질수록 렌더링 성능과 리소스 소비가 문제가 될 수 있습니다. 이를 방지하기 위해 성능 최적화 전략을 제대로 이해하고 적용하는 것이 중요합니다. 이 글에서는 실제 서비스에서 자주 활용되는 React 성능 최적화 방법들을 체계적으로 소개합니다.

React 렌더링 최적화를 위한 핵심 기법

React에서 성능 저하의 가장 큰 원인 중 하나는 불필요한 렌더링입니다. 이를 방지하기 위해 가장 먼저 고려해야 할 도구는 `React.memo`입니다. 이 고차 컴포넌트는 전달된 props가 변경되지 않을 경우 해당 컴포넌트의 재렌더링을 방지해줍니다. 특히 리스트나 반복 요소 내부의 자식 컴포넌트에 적용하면 큰 효과를 볼 수 있습니다. 또한 함수 컴포넌트 내부에서 불필요하게 재생성되는 함수를 방지하려면 `useCallback` 훅을 활용해 의존성 배열을 기준으로 메모이제이션할 수 있습니다. 객체나 배열의 경우 `useMemo`를 사용해 캐시된 값을 유지하는 것이 유리합니다. 그 외에도 `key` 값을 제대로 관리하지 않으면 리렌더링이 예상 외로 발생할 수 있으므로, 리스트 렌더링 시 고유한 `key`를 반드시 설정해야 합니다. Virtual DOM의 비교 알고리즘인 Reconciliation에 익숙해지면 어떤 상황에서 렌더링이 발생하는지 예측할 수 있으며, 렌더링 구조를 최적화하는 데 매우 유용합니다.

React의 코드 분할과 지연 로딩 전략

대규모 SPA에서는 초기 번들 크기를 줄이는 것이 페이지 로딩 속도 향상에 직접적인 영향을 미칩니다. 이를 위해 React의 `React.lazy`와 `Suspense`를 활용한 코드 분할(Code Splitting)은 매우 효과적입니다. 예를 들어 페이지 단위로 컴포넌트를 나누고 필요한 시점에만 로드되도록 설정하면 사용자는 더 빠르게 초기 화면을 볼 수 있습니다. 다음과 같은 방식으로 사용합니다:

const AboutPage = React.lazy(() => import('./AboutPage'));

`Suspense` 컴포넌트로 감싸서 로딩 중 UI를 제공할 수 있습니다:

<Suspense fallback={<LoadingSpinner />}>
  <AboutPage />
</Suspense>

Webpack이나 Vite 등 번들러와 함께 사용하면 자동으로 청크(Chunk) 파일이 생성되어 브라우저가 필요할 때만 해당 리소스를 가져오게 됩니다. 또한 이미지나 외부 리소스는 Lazy Load를 통해 뷰포트 진입 시점에만 로드되도록 하면 네트워크 리소스를 절약할 수 있습니다. 이외에도 React 18 이후에는 `useDeferredValue`, `startTransition`과 같은 새로운 기능을 통해 비급한 렌더링을 지연시켜 주요 작업을 우선 처리할 수 있습니다. 코드 분할은 사용자 경험 향상뿐만 아니라 서버 부하 분산에도 도움이 되는 핵심 전략입니다.

React DevTools와 프로파일링 도구 활용

성능 최적화를 위해서는 현재 문제가 발생하는 위치를 정확히 파악하는 것이 우선입니다. React 개발자 도구(React DevTools)는 브라우저 확장 기능으로 컴포넌트 구조를 시각화하고, 각 컴포넌트의 렌더링 횟수와 원인을 확인할 수 있는 유용한 도구입니다. Profiler 탭에서는 각 렌더링이 얼마나 오래 걸렸는지, 어떤 props가 변경되어 렌더링이 일어났는지를 확인할 수 있습니다. 이를 통해 어떤 컴포넌트가 지나치게 자주 렌더링되는지, 어떤 props가 불필요하게 전달되고 있는지를 실시간으로 분석할 수 있습니다. 또한 `why-did-you-render`와 같은 외부 라이브러리를 설치하면 컴포넌트가 다시 렌더링된 이유를 콘솔에 출력해주어 디버깅이 수월해집니다. Lighthouse, Web Vitals 등 크롬 기반의 측정 도구를 통해 전체 앱의 퍼포먼스를 종합적으로 분석할 수도 있습니다. 최적화를 시도한 후에는 반드시 수치를 기반으로 개선 효과를 확인해야 하며, 정량적인 기준이 있어야만 올바른 기술 선택이 가능합니다. 성능 최적화는 추상적인 개념이 아니라, 도구를 통해 ‘보이는 문제’로 전환해야 진정한 개선이 이루어집니다.

React 성능 최적화는 단발성 작업이 아닌, 구조적인 설계와 반복적인 점검이 필요한 영역입니다. 렌더링 제어, 코드 분할, 성능 분석 도구의 활용까지 체계적으로 접근한다면, 사용자 경험을 크게 개선할 수 있습니다. 지금 프로젝트에 최적화 전략을 적용해보세요!