Next.js는 서버사이드랜더링과 정적 페이지 생성을 제공하는 React프레임워크이다 리엑트를 기반으로 동작하기 때문에 리엑트에서 사용되는 기본적인 상태관리나 스타일 관련 라이브러리, 코드 번들러, babel 등을 동일하게 사용할 수 있어 리액트 개발자들이 쉽게 사용할 수 있다.
Next에 대해 알기 전에는(어깨너머로 알 때는) 서버사이드랜더링을 써야하는 이유에 대해 이해하지 못했다. 어차피 유저 인터렉션 많은 페이지에서는 큰 의미가 없는게 아닌가 라고 생각했기 때문이다.
그러나 실제로 사용해보면서, 단순히 서버에서 페이지를 렌더링하는 것 이상의 다양한 성능 최적화와 기본 설정이 제공된다는 사실을 알게 되었다.
서버-클라이언트 구조가 사용자 경험에 긍정적인 영향을 미치는지를 경험하면서, 왜 많은 회사에서 Next를 사용하게 되었는지 이해했다.
내가 알게된 내용에 대해 요약하고, 코드에 적용한 것을 아래에 정리해봤다.
1.서버사이드 랜더링과 정적 페이지 생성 데이터가 실시간으로 업데이트 되지 않는 경우, 매번 계속 페이지를 생성하는 것은 비효율적이다. 이럴때
ISR 을 사용하면 데이터가 갱신될 때만 페이지가 새로 생성하거나,
SSG를 통해 한 번 생성된 페이지를 정적으로 제공해서 서비스의 성능을 높일 수 있다.
또한 SSR이 기본적으로 제공되기 때문에 서버에서 미리 html을 랜더링해와 초기 로딩속도를 줄일 수 있다. -> SEO최적화에 도움됨.
** ISR과 SSG의 차이**
- ISR (incremental static regeneration):특정 주기(revalidate)로 페이지를 갱신함. 특정 주기마다 데이터가 업데이트 되는 경우 적합하다. e.g) 뉴스 등
- SSG (static site generation) : 빌드 타임에 모든 페이지를 정적으로 미리 생성한다. 페이지가 빌드될 때 한 번 생성하고, 그 이후에는 동일한 정적 파일을 계속 제공한다. 데이터를 업데이트하기위해서는 사이트 전체를 다시 빌드해야한다. 자주 변하지 않는 서비스에 적합. e.g)블로그나 기술 문서 등
2. 파일 기반 라우팅 Next.js의 파일 기반 라우팅(App Routing)은 파일 경로만 설정하면 자동으로 URL이 생성되기 때문에 기존 리액트에 비해 프로젝트의 구조가 훨씬 간결해진다. 폴더명이 url이 되는 형식.
e.g) App/News/Page.js 의 구조일 때 myappUrl/News 로 접속하면 news 폴더 안의 pages.js 내용이 랜더링 된다.
3. 성능 최적화 Next.js는 기본적으로 코드 스플리팅과 이미지 최적화를 제공하기 때문에 로딩 속도 최적화가 가능하다. 단순히 기능을 제공할 뿐만 아니라, 유저 사용성을 높이기 위해서는 next를 쓰는 것이 좋다. 물론 기본 리엑트에서도 스플리팅과 이미지 최적화 모두 가능하지만 설정이 필요하다.