Next.js 란?

Bewell·2024년 3월 13일
0

Next.js

목록 보기
1/1
post-thumbnail

📚 최신 업데이트 24.03.14

Next.js란?

  • React 웹 프레임워크
  • SSR, SSG, ISR과 같은 기능 제공
  • 확장가능, 유지보수가 쉬운 웹 애플리케이션을 위한 방법 제공



Next.js의 탄생 배경

  • 과거 웹 페이지는 SSR기반으로 동작, 페이지가 여러개로 구성된 Multi-Page-Form을 사용
  • 하지만 스마트폰의 등장으로, 모바일에 최적화된 형태의 웹 페이지 필요성 증가
💡 왜 SPA가 등장했을까?

과거)
전통적인 웹사이트는 지금과 달리 하나의 문서(HTML)에 전달되는 정보의 양이 적었고,
버튼을 클릭했을때 일부 영역만 변경되어도 서버에서는 완전히 새로운 페이지를 재렌더링하여 전송해주는 방식

문제)
웹 시장이 발전하면서 한 페이지에 해당하는 정보의 양이 매우 커졌고,
이를 매번 서버에서 새로운 페이지를 전송해주는 것이 버거워지기 시작함

해결방안)
SPA는 웹 사이트의 전체 페이지를 하나의 페이지에 담아 동적으로 화면을 변경해 표시하는 어플리케이션.
브라우저는 최초 한 번 서버에 요청하여 전체 페이지를 로드하고,
이후에 발생하는 변경사항은 ajax같은 데이터 바인딩하는 방식으로 동작.
이를 통해 사용자에게 빠른 인터랙션 제공

CSR이 가능한 SPA 등장

  • SPA는 한 개의 페이지에서 여러 동작이 이뤄진다
  • SPA를 지원하는 React, Angular, Vue와 같은 최신 프레임워크 등장



React는 기본적으로 Client-Side에서만 작동하는 문제점

✅ client-side rendering이란, 서버로부터 빈 HTML과 UI를 구성하기 위한 JS를 전달받아 화면을 렌더링한다.
모든 렌더링 작업이 완료되기 전까지 빈화면이다

✅ pre-rendering이란, 서버에서 각 페이지의 HTML파일을 미리 생성하여 사용자에게
화면을 보여준다. 이후에 Hydration을 통해 동적인 UI로 바뀐다.
Next.js에서는 디폴트로 모든 페이지가 pre-rending된다.

✅ Next.js에서 pre-rendering 방식을 사용하는건 SSR, SSG이다.
  - Server-side Rendering: 각 요청마다 HTML 생성
  - Static Site Generation: 빌드 타임시 생성, pre-rendering된 HTML은 각 요청마다 재사용
  • CSR로 실행되므로 SEO효과를 보기 어렵다
  • 초기 렌더링시 시간이 오래걸린다

    이를 해결하기 위해 Next.js 등장

  • 웹 앱을 서버에서 미리 렌더링해두는 방법으로 Vercel이 Next.js를 만들었다.



Next.js 작동원리

  • 사용자가 처음 서버에 페이지 접속을 요청하면, SSR방식으로 렌더링 될 HTML 전송
  • 브라우저에서 JS 파일을 다운로드, React 실행
  • 사용자와 클라이언트가 상호작용하며, 다른 페이지 이동 시 CSR의 방식으로 브라우저에서 처리



Next.js 장점

  • SEO 장점
    • 사이트의 데이터를 크롤링할 때, 검색 엔진 봇들이 JS를 해석할 수 없어, HTML을 크롤링 한다.
    • CSR은 브라우저에서 페이지를 구성하기 전까지는 HTML에 아무것도 존재하지 않으므로 데이터 수집이 어렵고, 검색엔진 노출이 어렵다
    • SSR은 서버 측에서 화면을 그려 보내주기 때문에 HTML에 이미 컨텐츠들을 포함하고 있어, 크롤링 봇의 데이터 수집이 용이해진다.



코드분할 관점에서의 장점

  • 일반적인 React SPA에서는 초기 렌더링 시 모든 컴포넌트를 내려 받는다
    • 이는 규모가 커지고, 용량이 커지면 로딩 속도가 지연되는 문제를 발생
  • Next.js는 필요에 따라 파일을 불러올 수 있도록 여러 파일로 분리하는 방식으로 문제를 개선
  • webpack, parcel등의 모듈 번들러에서도 지원하는 기는이지만, next.js 사용시 별도의 설정 없이 자동으로 프로젝트에 적용된다.
  • dynamic import를 통해 모듈이 호출될 때만 해당 모듈이 import된다



pre-rendering

  • next.js는 pre-rendering을 통해 미리 데이터가 렌더링된 페이지를 가져올 수 있다
  • 이를 통해 UX를 개선하고, SEO에도 특화된 사이트를 만들 수 있다
  • SSR, SSG를 가능하게 하고, SSR과 CSR의 혼합 사용도 가능하게 한다






참고자료1
참고자료2
참고자료3

0개의 댓글