반면, React의 경우 클라이언트 사이드 렌더링(CRS)으로 사용자의 브라우저에서 JavaScript를 실행하여 렌더링하는 방식입니다. 화면에 보이는 실질적인 내용을 소스코드에서 확인할 수 없어 검색 엔진 크롤러가 데이터를 수집하는 것에 어려움을 가지므로 SEO에 취약하다는 단점이 있습니다.
pre-rendering은 정적 생성과 서버 측 렌더링으로 나뉘게 됩니다.
정적 생성 (Static Generation)
서버 측 렌더링 (Server-side Rendering)
Next.js를 사용하면 각 페이지에 사용할 사전 렌더링 방식을 선택할 수 있습니다.
대부분의 페이지에는 정적 생성을 사용하고 다른 페이지에는 서버 측 렌더링을 사용하여 하이브리드 앱을 만들 수 있습니다.
SSR vs CRS
- SSR
- 브라우저가 서버에 페이지를 요청하면 서버에서 HTML을 렌더링하여 응답합니다.
- 이후 필요한 JS 파일이 로드되고, 이 파일이 실행되면서 사용자의 상호작용을 처리합니다.
- 장점 : 첫 페이지 로딩 속도가 빠름, SEO에 유리
- 단점 : 서버에서 페이지를 렌더링하므로 서버의 부하가 높아질 수 있음
- CSR
- 브라우저가 서버에 HTML, JS 파일 등을 요청하고, 모든 필요한 파일들이 로드된 후 JS가 실행되어 애플리케이션을 렌더링합니다.
- 장점: 초기 로딩이 끝나면 다른 페이지로 이동할 때 추가적인 로딩이 없이 빠른 화면 전환이 가능
- 단점 : 첫 페이지 로딩 속도가 느림, JS가 브라우저에서 실행되기 때문에 사용자의 클라이언트 환경에 크게 의존
리액트의 경우 react-router-dom 패키지를 설치해야 라우터 기능을 사용할 수 있습니다.
(Node 설치를 전제로 진행)
npx create-next-app@latest
Node 업데이트가 필요하다면? -> 참고하기
What is your project named? my-app
Would you like to use TypeScript? No / Yes
Would you like to use ESLint? No / Yes
Would you like to use Tailwind CSS? No / Yes
Would you like to use `src/` directory? No / Yes
Would you like to use App Router? (recommended) No / Yes
Would you like to customize the default import alias (@/*)? No / Yes
// alias 사용 전
import Button from '../components/Button';
import Home from '../pages/Home';
// alias 사용 후
import Button from '@/components/Button';
import Home from '@/pages/Home';
npm run dev
참고
https://nextjs.org/docs
https://velog.io/@hamjw0122/Next.js-Next.js%EB%9E%80
https://velog.io/@syoung125/Next.js-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-1-Next.js-%EB%9E%80-Next.js%EB%A5%BC-%EC%99%9C-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C-Next.js%EC%9D%98-%EC%9E%A5%EC%A0%90%EC%9D%80