CSR (Client-side only rendering)

과정

  1. 브라우저가 빈 HTML Document를 다운받는다
  2. 브라우저가 JS를 다운받고 실행시킨다
  3. 앱이 렌더링 되고 interactive 해진다

장점

  1. 서버와의 호환을 생각할 필요가 없기 때문에 개발 속도가 빠르다.
  2. SSR은 자바스크립트를 지원하는 플랫폼에서 서버를 가동하는데 비용이 들고, CSR은 정적인 HTML, CSS, JS파일들만 호스팅 하는 서버만 필요하기 때문에 상대적으로 비용이 저렴하다.
  3. 전체적으로 코드가 브라우저에서 실행되기 때문에 인터넷이 가능하지 않은 환경에서도 계속 실행이 가능하다.

단점

  1. 브라우저가 다운로드, 파싱, 자바스크립트를 실행 시킬 때까지 기다려야 하기 때문에, 다운로드하는 네트워크와 사용자의 디바이스에 따라 시간이 오래 걸릴 수 있음
  2. search engine이 첫시도에 페이지가 완전히 렌더링 될 때까지 기다릴 수 없기 때문에 SEO가 어렵다.

Universal Rendering

브라우저가 URL을 요청하면 서버는 완전히 렌더링 된 HTML페이지를 브라우저에게 보낸다. 페이지가 미리 생성되었던 캐싱되었던 Nuxt는 서버 환경에서 자바스크립트를 실행 시키고 HTML을 만들어낸다. CSR과 다르게 사용자는 애플리케이션의 내용을 즉각적으로 볼 수 있다. 이 단계는 정통적인 server-side rendering 방식과 비슷하다

CSR의 장점도 함께 가져가기 위해 HTML document가 다운로드 되었을 때 Client는 자바스크립트 코드를 백그라운드에서 실행 시킨다. 브라우저는 코드를 다시 해석하고 vue.js는 애플리케이션을 interactive하게 만든다.

정적 페이지를 브라우저에서 interactive하게 만드는 것을 Hydration이라고 한다.

Universal rendering은 nuxt 애플리케이션이 빠르게 페이지를 다운로드하는 동시에 CSR의 장점도 함께 보존한다. 게다가 애플리케이션의 content가 HTML document에 이미 존재한 채로 브라우저에 전달 되기 때문에 크롤러가 overhead없이 그것을 스캔할 수 있다.

과정

  1. 완전한 HTML이 브라우저로 전달되고 렌더링 된다
  2. 브라우저가 백그라운드에서 자바스크립트를 다운로드하고 실행 시킨다
  3. Hydration step이 완전히 끝나고 애플리케이션이 완전히 interactive해진다

장점

  1. 사용자가 바로 페이지에 접근이 가능하기 때문에 브라우저가 정적 컨텐츠를 더 빨리 보여줄 수 있다.
  2. Universal rendering은 완전한 HTML을 전달 하기 때문에 웹 크롤러가 페이지의 내용을 바로 찾을 수 있기 때문에 SEO가 가능하다.

단점

  1. 서버와 브라우저 환경이 같은 API를 제공하지 않거나, 서버와 브라우저 간 이질감 없이 실행되기 위해 코드를 짜는것이 까다로울 수 있다.
  2. 화면 렌더링을 위해 서버는 가동 되어야 한다. 이는 전통적인 서버와 같이 비용이 들어간다. 그러나 client side rendering navigation을 통해 비용이 많이 감소된다.

자동 라우팅

pages 디렉토리 안에 있는 vue 파일들은 자동으로 라우팅 됩니다 ⇒ router.js 파일이 필요 없습니다.

동시에 code splitting 도 함께 제공합니다.

네비게이션

페이지간 이동에는 NuxtLink를 사용해야 합니다.

page 디렉토리는 view와 route를 담고 있습니다. Nuxt는 page디렉토리안의 모든 .vue파일을 읽고 그 파일에 해당하는 라우터를 만듭니다.

 

 

Nuxt SSR

Nuxt의 Server Side Rendering steps

1. Browser to Server

브라우저가 최초 요청을 보내면 내부 Node.js 서버에 도달합니다. Nuxt는 lifecycle hooks, asyncData, nuxtServerInit, fetch 등 실행된 함수의 결과들과 함께 HTML을 생성하고 이를 다시 브라우저로 돌려보냅니다.

2. Server to Browser

브라우저가 서버로부터 렌더링된 HTML 페이지를 받으면 vue.js hydration 을 적용하여 page를 상호작용할 수 있는 형태로 변경합니다.

3. Browser to Browser

브라우저 안에서 NuxtLink 태그를 이용하여 client side에서 네비게이션 합니다.

Nuxt SSG

Nuxt의 Static Site Generation steps

1. Browser to CDN

브라우저가 CDN으로 최초의 요청을 보냅니다.

2. CDN to Browser

CDN은 이미 만들어진 HTML 과, 자바스크립트, 정적 assets 파일을 브라우저로 보냅니다.

내용이 보여지고 Vue.js hydration이 일어나 상호작용이 가능한 형태로 변경됩니다.

3. Browser to Browser

클라이언트 사이드에서 네비게이팅이 일어나 더이상 CDN으로의 요청은 가지 않습니다. API Call은 이미 캐싱된 정적 폴더에서 로드됩니다.

+ Recent posts