리액트를 위해 만든 오픈소스 자바스크립트 웹 프레임워크로 서버사이드렌더링 server side (SSR), 정적 사이트 생성 static site generation(SSG), 중분 정적 재생성incremental static regeneration(ISR)과 같은 풀스택으로서의 기능을 제공한다
서버에서 페이지를 그려 클라이언트(브라우저)로 보낸 후 화면에 표시하는 기법

검색 엔진 최적화
빠른 페이지 렌더링
클라이언트(브라우저)에서 웹 페이지를 렌더링
모든 로직, 데이터 가져오기, 템플릿, 라우팅은 서버가 아닌 클라이언트에서 처리
주로 Google, Bing 등의 검색 엔진에서 운영하는 일종의 봇
이들의 목적은 인터넷 전반에 걸쳐 웹 사이트의 컨텐츠를 색인화하여 해당 웹 사이트를 검색 엔진 결과에 나타내도록 하는 것
시간이 지남에 따라 많은 양의 데이터를 수집, 저장 및 분석할 수 있도록 일관된 방식으로 구조화된, 다른 데이터를 설명하는 데이터
서버의 HTML로 렌더링 하는 방식.
브라우저에서 응답을 받기 전에 데이터 패칭 및 템플릿 작성이 처리되므로 클라이언트에서 위 행위에 대한 추가 왕복이 발생하지 않는다
TTI란?
웹 페이지가 사용자와 상호작용할 수 있는 상태가 되기까지 걸리는 시간을 나타내는 성능 지표
즉, 웹 페이지가 로드되고 모든 컨텐츠가 표시되어 사용자가 실제로 페이지와 상호작용할 수 있는 상태가 되는 시점
CDN이란?
Content Delivery Network의 약자, 컨텐츠 전송 네트워크를 의미
전 세계적으로 분산된 서버 네트워크로 구성되어 있으며, 컨텐츠를 빠르고 안정적으로 사용자에게 전달할 수 있음
일반적으로 사용자가 웹 페이지나 애플리케이션에 접속하면, 해당 콘텐츠는 사용자와 물리적으로 가장 가까운 CND 서버로부터 제공됨
정적 콘텐츠뿐만 아니라 동적 콘텐츠, 비디오 스트리밍 등 다양한 형태의 콘텐츠를 제공할 수 있음
서버 호스팅이란?
인터넷을 통해 웹사이트나 애플리케이션을 접속할 수 있도록 서버를 제공하는 서비스
SSR처럼 서버로부터 완성된 HTML을 받아오지만, HTML파일의 생성시점이 빌드타임이다 Static이라는 용어가 들어간 것은 HTML이 정적이라는 것이지 페이지가 정적이라는건 아님
<Next.js에서 권장하는 렌더링 방식>


edge caching이란?
최종 사용자에게 더 가까운 컨텐츠를 저장하기 위해 캐싱 서버를 사용하는 것. CDN을 많이 사용
빌드 타임에 HTML 파일이 생성되서 빠른 FP, FCP, TTI를 제공. 매 요청마다 생성하는 것이 아니여서 SSR과 달리 일관성 있게 빠른 TFB를 달성
이미 생성된 HTML파일을 받아서 SEO친화적
FP(First Paint)
- 웹 페이지의 첫 번째 픽셀이 화면에 렌더링되기 시작하는 시간
- 사용자가 페이지가 로딩되고 있는지를 파악하는데 유용
FCP(First Contentful Paint)
- 웹 페이지에 첫 번째로 컨텐츠가 렌더링되어 사용자에게 표시되는 시간(텍스트, 이미지, 배경색 등 실제 컨텐츠가 화면에 표시되기 시작하는 시점)
- 사용자가 페이지의 실질적인 내용을 보기 시작하는 시점을 측정하여 페이지 로딩의 빠르기를 나타냄.
빠른 FCP는 사용자의 대기 시간을 줄여주고 페이지의 인상을 높일 수 있음
TTI(Time to Interactive)
- 웹 페이지가 사용자와 상호작용이 가능한 상태가 되는 시간. 페이지가 로딩된 후에 사용자가 입력을 받고 응답할 수 있는 상태가 될 때까지 걸리는 시간
- 사용자가 페이지와 상호작용할 수 있는 시점을 측정하여, 페이지가 완전히 사용 가능한 상태가 되는 속도. 빠른 TTI는 사용자 경험을 향상시키고 페이지의 대화형 요소에 대한 대기 시간을 최소화
TFB(Time to First Byte)
- TFB는 클라이언트가 요청한 리소스의 첫 번째 바이트를 수신하는데 걸리는 시간. 서버가 요청을 받아들이고 응답을 시작하는 시점부터 클라이언트가 첫 번째 바이트를 수신할 때 까지의 시간
- TFB는 서버 응답의 빠르기를 측정하여 웹 페이지의 로딩 시간을 결정. 빠른 TFB는 페이지 로딩 전체에 긍정적인 영향을 미치며, 서버의 성능과 네트워크 지연 시간을 개선하는데 중요
모든 URL에 대해 개별 HTML 파일을 생성해야 함.
URL을 미리 예측할 수 없거나 URL을 예측할 수 없으면 적용이 어려움
속도는 SSG보다 느릴 수 있어도, SSR은 SSG에서 가능한 것보다 더 많은 '실시간' 데이터를 가져와 보다 완전한 요청에 대한 응답을 하는 장점이 있음
그래도 SSG에 비해 성능은 좋지 않아 반드시 필요한 경우에만 사용하는 것을 권장
SSR을 통해 빠른 FCP를 구현한 다음 클라이언트에서 rehydration 이라는 기술을 통해 다시 렌더링하는 방식
초기 로딩시엔 SSR처럼 작동하고 그 이후에는 CSR로 작동하는 방식
Next.js / Nuxt.js, angular universal 등이 이를 지원

SSR을 통해 빠른 FCP를 구현하여 CSR의 단점을 개선
별도의 서버가 필요, 구현 또는 구현을 위한 프레임워크 학습에 들어가는 비용이 큼
페이지가 빨리 로드되며 인터렉션이 가능한 것처럼 보이지만, 실제로 클라이언트에서 자바스크립트가 실행되고 이벤트 핸들러가 적용될 때까지 입력에 응답할 수 없어, 사용자 경험이 안좋아질 수 있음
ISR(증분 정적 재생성)은 런타임 중에 정적 페이지를 만들거나 업데이트 할 수 있도록 해주는 SSG와 SSR의 하이브리드 솔루션
Next.js에서 제공하는 기능이기도 하며, 전체 사이트를 다시 빌드할 필요 없이 페이지 별로 정적 생성을 사용할 수 있게 해줌
SSR과 달리 페이지가 즉시 제공되며(fallback page), 빠른 경험으로 사용자 경험도 좋아짐
성능 오버헤드란?
시스템이나 프로그램이 일반적으로 실행되는 데 필요한 추가적인 자원 또는 시간을 소비하는 현상. 이는 일반적으로 효율성을 감소시키고 전체적인 성능을 저하시키는 결과를 초래