Next를 사용하는 이유

React는 페이스북에서 개발한 오픈소스 라이브러리로, '컴포넌트' 를 사용하여 UI(User Interface)를 효율적으로 만들기 위한 프레임워크입니다. 그리고 Next는 React 기반 프레임워크로 개발자에게 뛰어난 생산성과 편의성을 제공합니다.

React의 단점(SPA의 단점)

리액트는 SPA로서 사이트에 접속할 때 하나의 페이지를 불러옵니다. 즉, 페이지를 불러올때 필요한 모든 자바스크립트 파일을 한번에 불러오는데, 만약 페이지 이동을 하게 되면, 받아온 모든 파일을 이용하여 UI를 변화시키고, 필요한 데이터를 JSON 형태로 받아서 UI를 변화시킬수 있는데, 이러한 특징은 사용자 경험(UX)이 좋습니다. 하지만, 모든 자바스크립트 코드를 불어와야 하기 때문에 처음 페이지를 불러올때 시간이 오래 걸린다는 단점이 있습니다.

또한, 검색엔진최적화(SEO)에 좋지 않습니다. 검색 엔진 봇이 사이트를 방문하였을때, 초기에 아무것도 없는 빈 페이지를 크롤링하기 때문에 사이트를 파악하는데 어려움이 있습니다.

이 문제를 서버 사이드 렌더링(SSR)을 사용함으로써 해결할 수 있습니다.

서버 사이드 렌더링 은 사이트에 접속할 때 렌더링된 html을 불러오게 됩니다. 필요한 자바스크립트 파일을 불러올 떄까지 반응은 하지 않지만, 빠르게 화면을 보일수 있기에 속도가 빨라 보이게 됩니다. 검색엔진 봇에 렌더링된 html을 제공하여 SEO에 좋습니다. 하지만 페이지 이동시 새로운 페이지를 요청하기 때문에 페이지 이동 시에 깜박임이 존재합니다. 또한, 페이지 이동시 템플릿을 중복해서 로딩하고, 서버사이드렌더링을 하는 것이 서버에 부담을 주기 떄문에 성능상 좋지 않다는 단점을 가지고 있습니다.

Next는 SPA와 SSR의 단점을 해결하기 위해서 React(SPA)에 서버 사이드 렌더링 기능을 더하여 SPA와 SSR의 장점을 가질 수 있게 됩니다.

Next의 특징

1. 사전 렌더링 및 서버 사이드 렌더링

Next는 기본적으로 빌드 시에 만든 모든 페이지를 미리 렌더링 합니다. 이렇게 만들어진 html은 처음 페이지를 불러올 떄 사용자에게 빠르게 보이게 됩니다. html이 미리 렌더링 되어 seo에도 좋습니다. html을 불러온 후에는 페이지에 필요한 최소한의 자바스크립트 코드를 불러와 페이지를 사용할 수 있게 됩니다. 서버의 데이터를 필요로 하는 페이지에 대해서는 요청시에 서버 사이드 렌더링을 통하여 html을 생성하게 됩니다.

2. Hot Code Reloading을 지원하는 개발환경

개발 중 저장되는 코드는 자동으로 새로고침 됩니다.

3. 설정이 필요없음

Next는 기본적으로 웹팩(webpack)과 바벨(babel)을 사용하여 서버 사이드 렌더링 및 개발에 필요한 설정이 이미 되어 있어 빠르게 개발을 시작할 수 있습니다 또한, 사용하고 싶은 플러그인이 있다면 손쉽게 추가하여 사용할 수 있도록 지원을 하고 있습니다.

4. Typescript 내장

Typescript는 자바스트립트의 슈퍼셋인 오픈소스 프로그래밍 언어입니다. 타입스트립트는 기존의 자바스크립트 문법을 그대로 사용하면서 정적 타입 언어의 장점을 가질 수 있습니다. next를 타입스트립트와 함께 사용할 때 타입 지원을 통해 편리함과 안정성을 얻을 수 있습니다. next는 typescript 설정을 따로 할 필요 없이 사용할 수 있으며 typescript를 잘 지원하고 있습니다.

5. 파일 기반 내비게이션 기능

리액트에서는 route를 위해서는 'ract-router' 라는 라이브러리를 사용하거나 다른 방법으로 라우팅 설정을 해주어야 합니다. 그로 인해 페이지의 경로에 대하여 직접 설정을 해주어야 했지만, next는 파일 시스템 기반 라우팅을 사용합니다. 폴더의 경로에 따라 페이지의 경로가 설정되어 구축이 빠르고 관리가 편리하다는 장점이 있습니다.

6. styled-jsx 지원

next 자체 css-in-js인 styled-jsx를 지원합니다. next에서 기본적으로 제공하는 기능이기 떄문에 스타일을 서버 사이드 렌더링 하기 위한 설정이 필요하지 않습니다.

profile
나는 프론트엔드 개발자다!

0개의 댓글

Powered by GraphCDN, the GraphQL CDN