사용자가 최초 페이지에 접근한다면, 브라우저가 해당 웹 애플리케이션에 필요한 HTML과 정적자원(css, js, img 등)을 서버에 요청한다. 서버에서 기초적인 HTML과 자원들을 전송해주면, 브라우저는 HTML을 해석하여 DOM을 생성하고 자원들을 다운로드 한다. 이후 자바스크립트 엔진에 의해 js파일들이 실행되고, 페이지에서 보여줄 컴포넌트가 동적으로 생성되고 렌더링 되는 방식이다.
👉 즉, "완성된 페이지"는 네 브라우저 안에서 자바스크립트가 실행되면서 그려지는 거야.
SSR은 서버 사이드 렌더링 말 그대로 HTML 파일을 서버에서 렌더링을 진행한다는 것이다. 각 페이지 URL 마다 보여줄 내용이 미리 결정되어 있다. 사용자가 웹 페이지에 접속하면 브라우저가 해당 URL을 서버에 요청하고, 서버는 이 URL을 기준으로 어떤 페이지를 렌더링할지 결정한다. 즉 pre-rendering된 HTML 파일을 가져온 후 데이터를 담아서 전달한다는 것이다.
👉 즉, "완성된 페이지"를 서버가 미리 만들어서 보내주는 방식이야.
SSG는 Next.js에서 페이지를 생성할 때, 기본으로 적용되는 설정이다. SSG 역시 서버 사이드에서 렌더링을 하지만, SSR과 다른 점은 클라이언트가 요청하는 시점이 아니라 빌드(Build)시에 페이지를 미리 생성해 놓는 것이다. 별다른 설정 없이도 SSG가 생성이 되지만, Data Fetching이 필요한 경우에는 getStaticProps라는 함수를 활용하여 pre-rendering을 진행한다. 실시간 데이터가 아니라는 점도 큰 특징이다.
ISR은 빌드 시점에 페이지를 렌더링 한 후에 설정한 시간마다 즉, 특정 주기마다 페이지를 새로 렌더링한다. ISR로 구분했지만 사실 SSG에 포함되는 개념이라고 할 수 있다. SSG와 차이점은 빌드 시에 페이지를 생성하기 때문에 Data Fetching하는 데이터가 변경되면 다시 빌드해야하는 SSG와는 달리 일정 시간마다 알아서 페이지를 업데이트 해준다.