Next.js 기본 개념정리 ????

 · 약 11분
심완

Next.js에 대한 기본 개념을 정리합니다.

Next.js 소개 ????

Next.js는 서버 사이드 렌더링(SSR) 및 정적 사이트 생성(SSG) 기능을 추가하여 React의 기본 기능을 향상시키는 React 기반 프레임워크입니다.

Next.js 특징 ????

기본적으로 Next.js는 모든 페이지를 미리 렌더링합니다. 즉, 클라이언트 측 JavaScript가 모든 작업을 수행하는 대신 Next.js가 각 페이지에 대한 HTML을 미리 생성합니다. 사전 렌더링은 성능과 SEO를 개선할 수 있습니다.

생성된 각 HTML은 해당 페이지에 필요한 최소한의 자바스크립트 코드와 연결됩니다. 브라우저에서 페이지가 로드되면 해당 JavaScript 코드가 실행되어, 완전히 인터랙티브한 페이지가 됩니다. 이 과정을 Hydration이라고 합니다.

정보

Hydration

Hydration은 서버 측 렌더링된 HTML에 클라이언트 측 자바스크립트를 추가하는 과정을 말합니다. 이 과정을 통해 초기 페이지 로드 시 클라이언트 측 자바스크립트가 실행되어 페이지가 완전히 인터랙티브한 상태가 됩니다.

Next.js는 2가지 유형의 사전 렌더링을 지원합니다.

  • Static Generation : 빌드 시 미리 HTML을 생성합니다.
  • Server-side Rendering : 매 요청마다 HTML을 생성합니다.

렌더링 방식 이해하기 ????

Next.js를 완전히 이해하려면 CSR, SSR, SSG의 개념을 이해하는 것이 중요합니다.

CSR

React를 사용한 CSR에서 브라우저는 최소한의 HTML 페이지와 페이지에 필요한 자바스크립트를 다운로드합니다. 이후 자바스크립트를 통해 DOM을 업데이트하고 페이지를 렌더링합니다. 애플리케이션을 처음 로드할 때 사용자가 전체 페이지를 보기까지 약간의 지연이 발생할 수 있는데, 이는 모든 자바스크립트가 다운로드, 구문 분석 및 실행될 때까지 페이지가 완전히 렌더링되지 않기 때문입니다.

CSR

출처 : https://medium.com/walmartglobaltech/the-benefits-of-server-side-rendering-over-client-side-rendering-5d07ff2cefe8

페이지가 처음 로드된 후에는 필요한 데이터만 가져오면 되고 자바스크립트가 전체 페이지를 새로 고칠 필요 없이 페이지의 일부를 다시 렌더링할 수 있으므로, 일반적으로 동일한 웹사이트의 다른 페이지로 이동하는 것이 더 빠릅니다.

Next.js에서는 클라이언트 측 렌더링을 구현할 수 있는 두 가지 방법이 있습니다:

  • useEffect를 사용하여 클라이언트 측 데이터 가져오기
  • SWR 또는 TanStack Query를 사용하여 클라이언트 측 데이터 가져오기

장점 ????

  • 사용자 경험 개선: CSR은 사용자 상호 작용에 따라 실시간으로 페이지를 업데이트하여 원활한 사용자 경험을 제공할 수 있습니다.
  • 서버 부하 감소: 모든 렌더링 작업이 클라이언트 측에서 이루어지므로 서버의 부하를 크게 줄일 수 있습니다.

단점 ????

  • 초기 로딩 시간 증가: 모든 자바스크립트를 클라이언트 측에서 로드하고 실행해야 하므로 초기 로딩 시간이 길어질 수 있습니다.
  • SEO 문제: 검색 엔진이 JavaScript를 완전히 해석하지 못하면 페이지의 콘텐츠를 제대로 색인화하지 못할 수 있습니다.

SSR

SSR은 웹 페이지의 콘텐츠를 서버 측에서 생성하고 그 결과 HTML을 클라이언트로 전송하는 방식입니다. 이를 통해 초기 페이지 로드 시 콘텐츠를 더 빠르게 전달할 수 있으며 SEO에 유리합니다.

SSR

출처 : https://medium.com/walmartglobaltech/the-benefits-of-server-side-rendering-over-client-side-rendering-5d07ff2cefe8

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

페이지에 SSR을 사용하려면 getServerSideProps라는 비동기 함수를 내보내야 합니다. 이 함수는 요청이 있을 때마다 서버에서 호출됩니다.

장점 ????

  • 초기 로딩 시간 개선 : 서버에서 페이지를 렌더링하므로 초기 로딩 시간이 단축됩니다.
  • 실시간 데이터 반영 : 서버에서 페이지를 렌더링하므로 사용자 상호 작용에 따라 페이지를 실시간으로 업데이트할 수 있습니다.

단점 ????

  • 서버 부하 증가: 모든 렌더링 작업이 서버에서 수행되므로 서버의 부하가 증가합니다.
정보

SPA에 SSR이 필요한 이유 ????

SPA(단일 페이지 애플리케이션)는 모든 페이지를 한 번에 로드하고 사용자 상호 작용에 따라 페이지를 동적으로 업데이트합니다. 따라서 다른 페이지로 이동할 때마다 전체 페이지를 다시 로드할 필요가 없어 사용자 경험이 향상됩니다. 그러나 SPA는 CSR 접근 방식을 사용하므로 초기 로딩 시간이 길고 SEO 문제가 발생할 수 있습니다. SSR은 이러한 문제를 해결하는 데 사용됩니다.

SSG

SSG는 웹 페이지의 콘텐츠가 빌드 시점에 미리 생성되는 방식입니다. 이를 통해 초기 페이지 로드 시 콘텐츠를 더 빠르게 전달할 수 있으며 SEO에 유리합니다. 또는 CDN에 페이지를 캐시하여 사용자에게 더 빠르게 페이지를 제공할 수도 있습니다.

장점 ????

  • 초기 로딩 시간 단축: 빌드 시점에 모든 렌더링 작업이 수행되므로 초기 로딩 시간을 크게 단축할 수 있습니다.
  • SEO 개선: SSG를 사용하면 검색 엔진이 페이지의 콘텐츠를 적절하게 색인화할 수 있습니다.

단점 ????

  • 사용자 경험: 사용자 상호 작용에 따라 페이지를 실시간으로 업데이트할 수 없으므로 대화형 사용자 환경이 저하될 수 있습니다.
  • 빌드 시간: 빌드 시 모든 렌더링 작업이 수행되므로 특히 규모가 큰 사이트의 경우 빌드 프로세스가 더 오래 걸릴 수 있습니다.
정보

SSR ???? SSG

SSR은 사용자 요청에 따라 서버에서 페이지를 생성하여 사용자 상호 작용에 따라 실시간으로 업데이트할 수 있지만 서버 부하가 증가합니다. 반면 SSG는 빌드 시점에 페이지를 생성하므로 초기 로드 시간이 단축되고 SEO가 개선되지만 사용자 상호 작용에 따라 페이지를 실시간으로 업데이트할 수 없습니다.

npm run dev를 실행하면 어떤 일이 일어나나요?

npm run dev를 실행하면 Next.js 개발 서버가 시작됩니다. 개발 서버는 코드를 변경할 때마다 자동으로 다시 시작(핫 리로드)됩니다.

Next.js Repository 살펴보기 ????

npm run dev를 실행하면 Next.js CLI가 실행됩니다. Next.js CLI는 next-dev라는 Node.js 스크립트를 실행합니다. 이 스크립트는 next 패키지의 next-dev.ts 파일에 정의되어 있습니다.

Next.js Repository를 살펴보면 next-dev.ts 파일을 찾을 수 있습니다

링크 : https://github.com/vercel/next.js/blob/canary/packages/next/src/cli/next-dev.ts

주요기능

  • command line arguments를 파싱합니다.
  • 프로젝트 디렉터리, 포트, 호스트 이름 등 개발 서버 옵션을 설정합니다.
  • turbo 플래그가 설정되어 있는지 확인합니다. 설정되어 있으면 개발 서버에 터보 모드를 설정합니다.
  • 핫 리로드 : 프로젝트의 구성 파일에 변경 사항이 있는지 감시합니다. 변경 사항이 감지되면 서버를 다시 시작합니다.
  • 개발 서버를 시작합니다.
  • 프로세스가 종료될 때, 서버를 정상적으로 종료하기 위해 SIGINT와 SIGTERM 이벤트를 처리합니다.

결론 ????

Next.js를 더 명확하게 이해하기 위해 여러 렌더링 방식을 비교해보았습니다. 또한 npm run dev를 실행하면 어떤 일이 일어나는지 알아보았습니다. 추후에는 실제 Next.js 개발 서버를 구현해보면서 더 자세히 알아보도록 하겠습니다.

 

[출처] https://wannysim.me/blog/next-js-basic/

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
503 [node.js 응용] NodeJS 에서 mqtt 사용하기 file 졸리운_곰 2024.02.23 399
502 [Javascript] Toggle Between Grid and List View in React file 졸리운_곰 2024.02.23 276
» [node.js 응용] Next.js 기본 개념정리 file 졸리운_곰 2024.02.23 432
500 [HTML/JavaScript] Merge neighbouring HTML table cells with same value using JS : html 테이블 셀 자동적으로 가로/세로 합치기 졸리운_곰 2024.02.18 446
499 [웹 어셈블리, WSAM] An example of emscripten with WebSocket. file 졸리운_곰 2023.12.12 462
498 [HTML] DNS 유지한 채 도메인 포워딩 : How to set up URL frame forwarding 졸리운_곰 2023.12.04 373
497 [Javascript] [Javascript] 자바스크립트에서 Class 사용하기-constructor, extends, file 졸리운_곰 2023.11.29 616
496 [Javascript] undefined와 null의 차이점이란 ? 졸리운_곰 2023.11.29 476
495 [node.js 응용] ejs 사용설명서 file 졸리운_곰 2023.11.25 371
494 [웹 어셈블리, WSAM] サーバサイドはWebAssemblyの夢を見るか? – Node.jsでwasmってみた : 서버 측은 WebAssembly의 꿈을 꾸는가? – Node.js에서 wasm 해 보았습니다. file 졸리운_곰 2023.08.27 365
493 [웹 어셈블리 WSAM, webassembly] WebAssembly on the server-side : 서버측 웹어셈블리 file 졸리운_곰 2023.08.27 504
492 [HTML} Vercel을 이용하여 정적사이트를 무료로 운영하기 file 졸리운_곰 2023.07.09 383
491 [HTML] GitHub와 Netlify를 이용한 쉽고 빠른 HTTPS 무료 호스팅 졸리운_곰 2023.07.09 356
490 [HTML] netlify로 정적 사이트 배포하기 졸리운_곰 2023.07.09 329
489 [Javascript/Typescript] TypeScript 간단 정리 졸리운_곰 2023.05.21 570
488 [JavaScript] CORS란? CORS를 해결해보자 졸리운_곰 2023.05.09 467
487 [JavaScript] [JS] CORS 정리 및 오류 해결 졸리운_곰 2023.05.09 454
486 [node.js 응용] Build a Node.js Proxy Server in Under 10 minutes! file 졸리운_곰 2023.05.07 468
485 [node.js 응용] node - pm2로 node.js 프로세스 관리하기 - 기본 명령어, 실행하기 file 졸리운_곰 2023.04.25 407
484 [node.js 응용] Node.js | MySQL과 연동(mysql모듈) - CRUD 2/2 졸리운_곰 2023.03.31 231
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED