React 프레임워크 이다.
https://nextjs.org/learn/foundations/from-javascript-to-react 공식문서 📌
리액트?
React는 대화형 사용자 인터페이스를 구축하기 위한 JavaScript 라이브러리 이다.
사용자 인터페이스란 ?
- 사용자가 화면에서 보고 상호작용하는 요소 를 말한다.
라이브러리란?
React가 UI 를 빌드하는데 유용한 기능을 제공하지만 애플리케이션에서 해당 기능들을 사용할 위치는 개발자들에게 맡기는 의미이다.
서론이였고 그래서 Next.js 뭔데?
Next.js는 서버 사이트 렌더링, 정적 웹 페이지 생성 등 리액트 기반 웹 애플리케이션 기능들을 가능케 하는
Node.js 위에서 빌드된오픈 소스 웹 개발 프레임워크이다.
리액트 문서는 Next.js를 ‘권고하는 툴 체인들’ 중 하나로 언급하며 개발자들이 Node.js로 서버 렌더링되는 웹사이트를 빌드할 때의 해결책의 하나로 충고하고 있다.
웹 애플리케이션을 만들기 위한 빌딩 블록을 제공하는 React 프레임워크 입니다.
프레임워크란 ?
-
- Next.js가 React에 필요한 도구 및 구성을 처리하고 애플리케이션에 대한 추가 구조, 기능 및 최적화를 제공한다는 의미입니다.
React를 사용하여 → UI를 구축한 다음→ Next.js 기능을 점진적으로 채택하여
라우팅, 데이터 가져오기, 통합과 같은 일반적인 애플리케이션(프로그램) 요구 사항을 해결하는 동시에 개발자와 최종 사용자 경험을 개선할 수 있습니다.
특히, SEO를 위한 SSR를 가능하게 해주는 프레임워크이다
SEO: SEO란, Search Engine Optimization의 약자로, SEO는 구글, 네이버와 같은 검색 엔진들이 서버에 등록된 웹사이트를 하나하나씩 돌아 다니면서 웹사이트의 HTML 문서를 분석해주는 것
SSR이란? Sever Side Rendering( 서버사이드렌더링 )
👩🏻 서버에서 사용자에게 보여줄 페이지를 모두 미리 구성한 뒤 페이지를 렌더링 하는 방식 의미
서버로부터 완전하게 만들어진 html 파일을 받아와서 페이지 전체를 렌더링을 하는 방식이다.
리액트는 대표적으로 CSR(Client Sever Rendering)이다. 클라이언트 서버 사이드 렌더링
이런 리액트 의 CSR 적인 부분에서 SSR적으로 바꿔주기 위해서 Next.js 와 같은 라이브러리를 사용한다 -이유1-
SSR은 페이지 이동시 새로운 페이지를 요청하기 때문에 페이지 이동시 깜빡임이 존재하고 ,
템플릿 중복해 로딩한다면 이는 서버에 부담을 줌으로 성능상 좋지 않는 단점이 있다.
CSR Client Side Rendering
👩🏻 서버에서 전체 페이지(빈 페이지)를 최초 렌더링하고
사용자가 요청 할 때마다 클라이언트 내(브라우저)에서 렌더링 하는 것을 의미한다.
👩🏻 💡CSR의 동작 과정 → 초기 화면수행
사용자가 홈페이지 접속하면 (최초 접속) - 클라이언트는 이걸 확인하고 서버로 → 요청해준다
서버는 빈페이지 (Html cssjs) 를 클라이언트에게 전달한다
전달 받은 클라이언트에서 해당 화면을 그려주고 스크립트를 수행하여 최종적인 화면을→ 사용자에게 보여준다.
사용자가 다음 액션을 수행할 경우 클라이언트 내에서 페이지를 요청하고 수행한다
👩🏻 💡페이지 이동 / 동작이 발생한 경우
브라우저🖥에서 클라이언트로 요청한다.
클라이언트에서 해당정보를 처리하고 브라우저🖥로 전달한다.
(페이지를 이동한 경우 클라이언트 내에서 처리함)
브라우저🖥에서 이를 처리하고 처리된 사항을 그려준다.
Next.js 동작과정 ?
👩🏻 💡 Next.js 동작과정- 초기화면 수행 (SSR 방식 이용)
1. 사용자가 홈페이지를 접속한 경우(최초 접속) 클라이언트는 이를 확인하고 서버로 요청 합니다.(Server-Side)
2. 서버에서는 미리 구성된 HTML, CSS 파일을 클라이언트에게 전달합니다.(Pre-Rendering - init Load)
( Initial Load : JS 동작이 없는 HTML을 먼저 화면에 보여주는것을 의미)*
3. 이 과정에서 동시에 클라이언트에서는 스크립트 파일을 수행하여서 클라이언트에게 전달합니다.(Hydration)
( Hydration : Initial Load 이후 JS 파일을 HTML에 연결하는 과정을 의미)*
💡 Next.js 동작과정- 페이지 이동 / 동작이 발생하는 경우(CSR 방식 이용)
1. 페이지 이동 및 동작이 발생하는 경우에는 CSR 방식을 통해서 서버를 거치지 않고 브라우저에서 페이지를 이동한다.
Next.js 왜 써야하는가?
- Next.js는 초기 페이지를 서버에서 자바스크립트로 로딩하는 방식으로 → Pre-rendering(사전 렌더링) 이용
Pre-rendering(사전 렌더링): 각 페이지들을 사전에 미리 HTML 문서로 생성해서 가지고 있는 것. Next의 pre-rendering 시스템에서는 빌드 타임 때 해당하는 페이지 별로 각각의 HTML 문서를 미리 생성해 가지고 있다가, 서버로 요청이 들어올 때 알맞은 페이지를 반환 해준다.
Pre-rendering 방식은 서버에서 자바스크립트로 HTML 컨텐츠를 채운 완성된 파일을 클라이언트에게 전달하여 처리가 됩니다.
💡 이러한 방식은 이미 구성된 HTML 파일을 사용자에게 보여주기 때문에 초기 페이지 로딩 속도가 빨라집니다.
(해당 처리는 Hydration을 이용하여 처리합니다.)
💡 또한 이 방식은 파일이 로드되기 전에 페이지가 모두 구성되어 있기에 SEO 점수에서도 높은 점수를 받습니다.
( 해당 SEO는 하단에 추가 설명이 되어 있습니다)*
- Next.js는 SEO(Search Engine Optimiztion) 문제를 해결한다.
👩🏻 💡 검색엔진 최적화(SEO: Search Engine Optimization)
- 검색엔진 최적화로 웹 사이트 결과에 더 잘보이도록 최적화하는것을 의미한다.
- 온라인 쇼핑몰의 경우 상단에 노출되는 것을 의미 하는데 CSR을 이용하면 검색엔진 봇들이 초기 HTML 빈 페이지에 아무것도 없기에 데이터 수집을 못하여서 검색엔진 노출이 어렵다.
- 직관적인 페이지 기반 라우팅 시스템 (Auto Routing)
{/* 사용자 관련 URL */}
<Route path={"/user/userAdd"} render={(props) =><UserAddPage {...props} />} />
<Route path={"/user/userAdd:/emailCfmUid:/cfmType"} render={(props) =><UserAddPage {...props} />} />
<Route path={"/user/userAddSucess"} render={(props) =><UserAddSucessPage {...props} />} />
<Route path={"/user/userPwReSetting"} render={(props) =><UserPwReSettingPage {...props} />} />
<Route path={"/user/userPwNewChange"} render={(props) =><UserPwNewChangePage {...props} />} />
<Route path={"/user/userEmailCfm"} render={(props) =><UserEmailCfmPage {...props} />} />
Next.js는 SPA와 SSR의 단점을 해결하기 위해서 리액트에 SSR기능을 더해 + SPA & SSR의 장점을 갖고 있다.
- SPA의 장점을 유지한다.
👩🏻 💡 첫 페이지를 SSR 방식을 이용하여 처리 한 이후 다른 페이지로 이동할 때부터는 CSR 방식으로 브라우저에서 처리하기 때문에 SPA의 장점을 유지 가능하다
장점
- 하나하나 화면 전체를 렌더링할 필요가 없기 때문에 화면이동이 빠르다.
- 화면에 필요한 부분의 데이터만 받아서 렌더링 하기 때문에 처리과정이 효율적이다.
- 유저에 입장해서 사용하기 편리하다.
단점
- 처음 화면을 로딩할 때, 모든 화면이 미리 준비되어 있어야 하기 때문에 로딩에 시간이 걸린다.
- 어플리케이션을 구현하는데 보다 시간이 걸리며 복잡하다.
- 리액트에 SSR 기능을 추가하려면 웹 서버를 만들어 주어야 하고, 웹팩 설정, 데이터 로딩, 코드 스플리팅 등 복잡한 과정을 필요로 한다.
- Next.js를 통해 이러한 것들을 설정하지 않고 사용할 수 있게 된다.
- 이러한 개발 환경을 설정하는 번거로움을 줄일 수 있는 것이 Next.js의 특징 중 하나이다.
👩🏻 내가 원하는 페이지에서 원하는 자바스크립트와 라이브러리를 렌더링 하는 것입니다. 모든 번들(chunk.js)이 하나로 묶이지 않고, 각각 나뉘어 좀 더 효율적으로 자바스크립트 로딩 시간을 개선할 수 있습니다.
Next.js를 사용해야 하는 이유 (수많은 장점!)
1) 사전 렌더링 및 서버사이드 렌더링
- 서버 사이드 렌더링 기능을 제공하여 클라이언트 사이드 렌더링 환경보다 빠른 렌더링을 불러올 수 있.
2) Hot Code Reloading을 지원
- Next 개발 환경에서는 코드 변경 사항이 저장되면 응용 프로그램을 자동으로 다시 로드한다.
3) 자동 코드 분할
- 자동 코드 분할 기능 덕분에 코드의 모든 가져오기각 번들로 묶여 각 페이지와 함께 제공된다.
- 결과적으로, 불필요한 코드가 페이지에 로드 되지 않는다.
4) 추가 설정이 필요 없음
- Next.js는 기본적으로 웹팩과 바벨을 사용하고 있다. 따라서 이미 서버 사이드 렌더링 및 개발에 필요한 설정이 되어 있으므로 빠르게 개발을 시작할 수 있다.
- 사용하고 싶은 플러그인이 있다면 손쉽게 추가하여 사용할 수 있도록 지원을 하고 있다.
5) 타입스크립트가 내장됨
- Next를 타입스크립트와 함께 사용할 때 타입 지원을 통해 편리함과 안정성을 얻을 수 있다.
- Next는 타입스크립트 설정을 따로 할 필요 없이 사용할 수 있으며 타입스크립트를 지원하고 있다.
6) 파일기반 내비게이션 기능
- 리액트에서는 라우트를 위해서 react-dom-router 라이브러리를 사용하여 라우팅 설정을 해주어야 한다. 그로 인해 페이지의 경로에 대하여 직접 설정을 해줘야 한다.
- 하지만 Next.js 파일 시스템 기반 라우팅을 사용한다.
- 폴더의 경로에 따라 페이지의 경로가 설정되어 구축이 빠르고 관리가 편리하다는 장점이 있다.
- (참고로, next.js는 next/link의 <Link /> 컴포넌트를 사용해서 클라이언트 사이드 네이게이션을 사용해야함)