Hydration과 Dehydration은 React와 같은 프론트엔드 프레임워크에서 중요한 개념으로, 서버 사이드 렌더링(SSR) 및 클라이언트 사이드 렌더링(CSR)에서 자주 사용됩니다. 이 두 개념을 이해하면 React 애플리케이션의 초기 로딩 성능과 사용자 경험을 개선하는 데 도움이 됩니다.
Hydration (수화)
Hydration은 서버에서 렌더링된 HTML을 클라이언트(브라우저)에서 React가 다시 활성화하는 과정입니다. 서버 사이드 렌더링(SSR)을 사용하면 초기 HTML이 서버에서 생성되어 클라이언트로 전송되는데, 이 HTML은 React 컴포넌트가 아닌 단순한 HTML입니다. 클라이언트가 이 HTML을 받으면, React는 이 HTML을 '재사용'하고, 이를 기반으로 초기 렌더링을 수행하면서 이벤트 핸들러와 같은 인터랙티브 요소를 활성화합니다.
작동 과정
- 서버 사이드 렌더링: 서버에서 React 컴포넌트가 HTML로 렌더링되고, 이 HTML이 클라이언트로 전송됩니다.
- 클라이언트 수신: 클라이언트는 서버에서 전송된 HTML을 수신하고 초기 화면을 렌더링합니다.
- Hydration: React는 클라이언트에서 서버에서 렌더링된 HTML을 탐색하고, 이를 React 컴포넌트로 변환하면서 이벤트 핸들러와 상태 관리를 추가합니다. 이 과정에서 클라이언트의 초기 렌더링과 서버의 HTML이 일치해야 합니다.
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
// 서버 사이드 렌더링된 HTML을 기반으로 Hydration
ReactDOM.hydrate(<App />, document.getElementById('root'));
❓Rehydration
hydration은 일차적인 과정으로, 페이지 로드 시에 정적 HTML을 동적 앱으로 변환하는 전체 과정을 말합니다. Rehydration은 이 과정 중에서 특히 데이터와 상태의 복원 및 동기화를 강조하는데 사용되는 용어로, 보통은 추가적인 데이터 로딩이나 사용자의 상호작용에 따른 상태 변경 등이 포함될 수 있습니다.
Dehydration (탈수)
Dehydration은 상태를 포함한 클라이언트 측의 애플리케이션 데이터를 서버로 보내거나, 서버 사이드 렌더링 중에 필요한 데이터만 최소화하여 전달하는 과정입니다. 이 개념은 흔히 데이터 페칭과 상태 관리를 최적화하기 위해 사용됩니다. Dehydration은 클라이언트에서 서버로 상태를 전송하여 이후 요청에서 이 상태를 재사용할 수 있도록 하거나, 서버에서 클라이언트로 보내는 HTML과 함께 최소한의 데이터를 포함하여 클라이언트가 이를 사용해 애플리케이션을 재구성하는 것을 의미합니다.
예시: React Query와 같은 라이브러리에서의 사용
React Query와 같은 라이브러리는 Hydration과 Dehydration을 사용하여 클라이언트와 서버 간의 데이터 동기화를 최적화합니다.
import { Hydrate, QueryClient, QueryClientProvider, dehydrate } from 'react-query';
import { ReactQueryCacheProvider } from 'react-query';
const queryClient = new QueryClient();
// 서버 측에서 데이터 페칭 후, Dehydration으로 상태 전달
export async function getServerSideProps() {
await queryClient.prefetchQuery('todos', fetchTodos);
return {
props: {
dehydratedState: dehydrate(queryClient),
},
};
}
function MyApp({ dehydratedState }) {
return (
<QueryClientProvider client={queryClient}>
<Hydrate state={dehydratedState}>
<App />
</Hydrate>
</QueryClientProvider>
);
}
export default MyApp;
주요 차이점 요약
- Hydration: 서버에서 렌더링된 HTML을 클라이언트에서 React 컴포넌트로 변환하여 상호작용을 가능하게 만드는 과정.
- Dehydration: 클라이언트나 서버 측에서 상태를 최소한의 데이터로 변환하여 다른 쪽으로 전달하고, 나중에 이를 재구성하여 애플리케이션을 재구성하는 과정.
이 두 개념은 효율적인 서버 사이드 렌더링과 클라이언트 측 상태 관리를 통해 React 애플리케이션의 초기 로딩 속도와 사용자 경험을 개선하는 데 중요한 역할을 합니다.
'Frontend > React' 카테고리의 다른 글
React) Hook, useState, useEffect (0) | 2024.05.06 |
---|---|
React) state, props (0) | 2024.05.06 |
React) Element, Component 와 Props (0) | 2024.05.05 |
React) JSX (0) | 2024.05.05 |