본문 바로가기
React

React에서 CSR(Client-Side Rendering) 개념 이해하기

by 굿센스굿 2024. 12. 13.
반응형

 

웹 애플리케이션 개발의 방식은 시대와 기술의 발전에 따라 끊임없이 변화해 왔습니다. 그중에서도 React를 활용한 CSR(Client-Side Rendering)은 현대 웹 애플리케이션의 필수 개념으로 자리 잡았습니다. 이번 글에서는 CSR이 무엇인지, 어떻게 작동하는지, 그리고 이를 React에서 어떻게 활용할 수 있는지를 깊이 있게 알아보겠습니다.


1. CSR(Client-Side Rendering)이란 무엇인가?

CSR은 클라이언트(즉, 사용자의 브라우저)에서 애플리케이션의 UI를 렌더링하는 방식을 의미합니다. 전통적인 서버 기반 렌더링(Server-Side Rendering, SSR)과 달리, CSR은 다음과 같은 특징을 가집니다:

  • HTML 전달 방식: 서버는 빈 HTML 파일과 최소한의 자바스크립트 번들 파일만 클라이언트로 전달합니다.
  • 렌더링 위치: 클라이언트의 브라우저가 전달받은 자바스크립트를 실행하여 화면에 콘텐츠를 렌더링합니다.
  • 상호작용 최적화: 초기 로딩 이후, 클라이언트에서만 데이터를 갱신하거나 화면을 다시 그립니다.

2. CSR의 동작 방식

CSR의 작동 원리를 간단한 흐름으로 살펴보겠습니다.

  1. 초기 요청: 사용자가 브라우저에서 웹 애플리케이션 URL에 접근합니다.
  2. 서버 응답: 서버는 빈 HTML 파일과 자바스크립트 번들을 응답으로 전달합니다.
  3. 자바스크립트 실행: 브라우저는 전달받은 자바스크립트를 다운로드하고 실행하여 애플리케이션의 UI를 생성합니다.
  4. 동적 데이터 로딩: 자바스크립트 실행 후 필요한 데이터를 서버에서 요청하고 받아와 화면에 렌더링합니다.
  5. 상호작용: 사용자와의 상호작용은 클라이언트에서 처리됩니다. 화면 갱신은 서버와의 추가 요청 없이 이루어질 수도 있습니다.

3. CSR의 장점

CSR을 적용했을 때 얻게 되는 이점은 다음과 같습니다:

  1. 사용자 경험 개선: 페이지 간 전환이 매끄럽고 빠릅니다. 새로고침 없이 데이터 갱신이 가능합니다.
  2. 더 나은 인터랙션: 사용자의 상호작용에 대해 즉각적인 반응을 제공합니다.
  3. 유연한 UI 상태 관리: 클라이언트에서 UI 상태를 관리하기 때문에 다양한 동적 기능 구현이 용이합니다.
  4. 캐싱 및 성능 최적화: 자바스크립트와 데이터를 효율적으로 캐싱하여 성능을 향상시킬 수 있습니다.

4. CSR의 한계

CSR은 뛰어난 기술이지만 모든 상황에 적합한 것은 아닙니다. 다음과 같은 단점도 존재합니다:

  1. 초기 로딩 시간 증가: 초기 로드 시, 브라우저가 자바스크립트 번들을 다운로드하고 실행하기까지 시간이 더 걸릴 수 있습니다.
  2. SEO 최적화의 어려움: HTML이 빈 상태로 전달되기 때문에 검색 엔진이 콘텐츠를 인덱싱하는 데 어려움을 겪을 수 있습니다.
  3. 자바스크립트 의존성: 클라이언트에서 자바스크립트가 비활성화되어 있으면 애플리케이션이 제대로 작동하지 않을 수 있습니다.

5. React에서의 CSR 구현

React는 CSR을 기본으로 설계된 라이브러리입니다. React에서 CSR을 구현하는 기본적인 구조는 다음과 같습니다:

  1. React 앱 생성:위 명령어를 실행하면 기본적으로 CSR 방식으로 작동하는 React 애플리케이션이 생성됩니다.
  2. npx create-react-app my-app cd my-app npm start
  3. CSR을 지원하는 주요 코드: React는 브라우저에서 ReactDOM.createRoot를 통해 루트 DOM 요소에 컴포넌트를 렌더링합니다:
  4. import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <React.StrictMode> <App /> </React.StrictMode> );
  5. 데이터 가져오기: API 호출을 통해 데이터를 클라이언트에서 가져오고 화면에 렌더링합니다. 예를 들어:
  6. import React, { useState, useEffect } from 'react'; function App() { const [data, setData] = useState(null); useEffect(() => { fetch('https://api.example.com/data') .then((response) => response.json()) .then((data) => setData(data)); }, []); return (

    데이터 목록

    {data ? (
      {data.map((item) => (
    • {item.name}
    • ))}
    ) : (

    로딩 중...

    )}
    ); } export default App;

6. CSR을 활용한 최적화 팁

CSR을 효과적으로 사용하기 위해 React 애플리케이션을 최적화하는 방법을 알아봅시다:

  1. 코드 스플리팅: 필요할 때만 코드를 로드하도록 설정하여 초기 로딩 시간을 단축합니다. React의 React.lazySuspense를 활용할 수 있습니다.
  2. const LazyComponent = React.lazy(() => import('./LazyComponent')); function App() { return ( <React.Suspense fallback={<div>로딩 중...</div>}> <LazyComponent /> </React.Suspense> ); }
  3. 캐싱과 서비스 워커 활용: PWA(Progressive Web App) 설정을 통해 오프라인에서도 애플리케이션이 작동하도록 할 수 있습니다.
  4. SEO 보완: CSR 기반 애플리케이션의 SEO 문제를 해결하기 위해 React의 서버 사이드 렌더링(SSR) 또는 정적 사이트 생성(SSG) 방식(Next.js 등)을 병행하여 사용할 수 있습니다.

7. CSR의 대안: CSR vs SSR vs SSG

CSR은 훌륭한 기술이지만, 다른 렌더링 방식과의 비교를 통해 상황에 맞는 기술 선택이 필요합니다:

기술장점단점사용 사례

CSR 빠른 인터랙션, 유연한 상태 관리 초기 로드 느림, SEO 문제 SPA, 사용자 중심 앱
SSR SEO 친화적, 초기 로드 빠름 서버 부하 증가, 느린 상호작용 콘텐츠 중심 애플리케이션
SSG 최고의 성능, SEO 최적화 동적 콘텐츠 관리 어려움 블로그, 마케팅 사이트

결론

React에서 CSR은 현대적인 웹 애플리케이션 개발의 핵심 기술로, 사용자 경험을 극대화하고 상호작용이 풍부한 UI를 구현할 수 있는 강력한 도구입니다. 그러나 SEO 문제나 초기 로딩 시간 증가와 같은 한계도 존재하므로, 프로젝트의 요구사항에 맞는 최적의 렌더링 방식을 선택하는 것이 중요합니다.

React와 CSR을 깊이 이해하고 활용하여 더 나은 웹 애플리케이션을 개발해 보세요!

반응형