HelloMinchan
처음처럼
HelloMinchan
LinkedIn
전체 방문자
오늘
어제
  • 분류 전체보기 (306)
    • Backend (4)
      • NestJS (1)
      • Express (1)
      • Spring (2)
    • Infrastructure (1)
      • AWS (1)
    • Frontend (1)
      • Next.js (1)
    • Language & Runtime (4)
      • Java (2)
      • Node.js (2)
    • Computer Science (8)
      • Computer Networks (3)
      • Operating Systems (4)
      • OOP (1)
    • 독서 (4)
      • 데이터 중심 애플리케이션 설계 (3)
      • 객체지향의 사실과 오해 (1)
    • 회고 (4)
      • Project (2)
      • Career (2)
    • Deprecated (280)

채널

  • GitHub
  • LinkedIn

최근 글

태그

  • programmers
  • 백엔드
  • Algospot
  • 백준Go
  • Database
  • 프로그래머스C++
  • 개발자
  • 프로그래밍
  • 데이터베이스
  • 백준
  • 알고스팟Python
  • 코딩
  • 백준C++
  • back-end
  • Baekjoon Online Judge
  • 알고스팟
  • 프로그래머스Python
  • 백준Python
  • 프로그래머스
  • front-end

최근 댓글

인기 글

hELLO
HelloMinchan

처음처럼

[Next.js] Hydration을 알아보자
Frontend/Next.js

[Next.js] Hydration을 알아보자

2022. 12. 5. 06:08

회사에서 Next.js 기반의 프로젝트를 맡게 되어 태스크를 처리 하던 중,
Hydration의 원리가 궁금해져 공부와 함께 기록을 남긴다.


# Hydration이란?

참조 : Monica Powell article

 

Keeping Server-Side Rendering Cool With React Hydration

The purpose of this article is to share some helpful things to keep in mind to render a seamless experience as a Server-Side Rendered (SSR) site transitions from a window-less (server) environment to a browser.

aboutmonica.com

 

먼저, Hydration란 Next.js의 주요 동작 원리 중 하나로 서버사이드에서 렌더링 된 정적 페이지와 번들링 된 Javascript를 서로 매칭(?)시키는 과정을 의미한다.

 

Hydration는 Next.js에 종속된 개념이 아닌 무려 React의 ReactDOM에 존재하는 모듈이다.
(지금까지 render()만 사용하고 있었다...)
참조 : React 공식문서 ReactDOM

 

ReactDOM – React

A JavaScript library for building user interfaces

reactjs.org

 

좀 더 자세히 알기 위해서는, React의 동작 원리를 이해해야한다.

 

React는 CSR을 하기 위해서 보통, 뼈대가 되는 한 HTML 파일안에 id=”root”인 div 태그를 남겨두고, 오직 그 안에서 Javascript로 모든 것을 처리한다.

 

반면, Next.js는 SSR을 하기 위해서 미리 HTML 구성을 Pre-rendering한 후, 생성된 HTML 파일을 클라이언트로 전송하는데,
이 때 클라이언트가 받은 HTML 파일은 EventListener 등과 같은 각종 Javascript 코드가 적용되지 않은 상태이다.

 

이 문제를 해결하기 위해, Hydration를 적용하는데 Next.js 서버가 Pre-rendering 된 HTMl 파일을 클라이언트에 전송하자 마자, 번들링 된 Javascript 코드들을 곧바로 클라이언트에 전송하고, 이 번들링된 Javascript 코드들이 HTML DOM 위에서 한번 더 rendering되어 각기 제 위치에 매칭이 되게 된다.
이 과정을 통해 정상적으로 웹 페이지가 동작을 하게 되며, 해당 과정을 바로 Hydration이라고 하는 것이다.

위 캡처를 보자,
Next.js 프로젝트인 김캐디 웹사이트이다.
개발자 도구의 Network 탭을 열어 보면 Hydration 과정의 순서를 볼 수 있는데,

 

첫 번째, 빨간 박스를 보면 HTML 파일이 받아졌고,
두 번째, 파란 박스를 보면 CSS 파일이 받아졌고,
마지막, 노란 박스에 번들링 된 Javascript 파일이 받아진 것을 볼 수 있다!

저작자표시 비영리 변경금지
    HelloMinchan
    HelloMinchan
    Though you should not fear failure, You should do your very best to avoid it.

    티스토리툴바