SlideShare una empresa de Scribd logo
1 de 52
Descargar para leer sin conexión
github.com/wan2land/gdg171021-vue-ssr-vs-prerender
Vue SSR vs Prerender
전창완
레거시 PHP Template에서 Vue SPA 까지
전창완 (@wan2land)

- Oponiti

- Allbus 개발자

- 주로 PHP를 사용
발표자 소개
저희 회사 서비스는 PHP 입니다.
PHP 기반의 서비스는

다음과 같이 동작합니다.

(다 아는 이야기지만..)
발단
기존의 동작 방식
Vue + Vue Router + Vuex 



SPA(Single Page Application)으로

리팩토링 하였습니다.
발단
리팩토링 후 동작 방식
github.com/wan2land/gdg171021-vue-ssr-vs-prerender/commit/
d1416f6e92954eeb67c89814397233ccff256bc7
SPA로 리팩토링을 완료된 소스
문제가 발생!
“검색엔진에 노출이 안돼요..”
모든 페이지 소스가 다 이렇게..
“SSR이 필요하겠군요!”
Q. 그런데 SSR이 뭐죠?
Server Side Rendering
Server Side Rendering
동작방식
1.브라우저가 자바스크립트로 그려야 할 내용을 서버에서 미리 그려서 보여줍니다.

2.기존 방식 + SPA(Single Page Application) 두가지 장점을 모두 누릴 수 있습니다.
Server Side Rendering
Server Side Rending이 뭐지?
ssr.vuejs.org/ko
SSR을 하려면 서버에서

자바스크립트를 동작시켜야 합니다.
1.Node.js

1.ssr.vuejs.org/ko 를 보며 한땀한땀 구현

2.Nuxt.js 사용

2.비 Node.js

1.v8 엔진 모듈 사용

2.헤드리스 브라우저 사용
Server Side Rendering
서버에서 자바스크립트를 동작시키는 방법
1.Node.js

1.ssr.vuejs.org/ko 를 보며 한땀한땀 구현

2.Nuxt.js 사용

2.비 Node.js

1.v8 엔진 모듈 사용

2.헤드리스 브라우저 사용 -> 말도 안되는 방식 (...)
Server Side Rendering
서버에서 자바스크립트를 동작시키는 방법
1.Node.js 환경이고 레거시코드가 있을 때 적합한 방식.

2.Frontend만 작업한다고 하면 Nuxt를 바로 도입하는게 더 낫습니다.
Server Side Rendering
ssr.vuejs.org/ko 를 보며 한땀한땀 구현
1.SSR 과 관련된 모든 것이 적용된 Vue Framework.

2.SSR로 한땀한땀 구현하다 보면 결국 최종 종착지가 Nuxt라는 이야기가 많음.

3.신규 프로젝트라면 이 방식을 무조건 추천.
Server Side Rendering
Nuxt.js
1.v8 엔진은 c++로 되어있고 해당 모듈을 구동하는 라이브러리를 이용.

2.과거에는 이 방식이 동작하지 않았지만 vue 2.5 버전 부터 지원.

https://gist.github.com/yyx990803/9bdff05e5468a60ced06c29c39114c6b#environment-agnostic-
ssr

3.PHP의 경우 V8js(github.com/phpv8/v8js)을 통해서 가능.

(위 버전 업데이트가 일주일(2017.10.21 기준) 되었다는 점을 고려하면 적용 사례가 없음)
Server Side Rendering
v8 엔진 모듈 사용
1.Node.js

1.https://ssr.vuejs.org/ko 를 보며 한땀한땀 구현

2.Nuxt.js 사용

2.비 Node.js

1.v8 엔진 모듈 사용

2.헤드리스 브라우저 사용 -> 말도 안되는 방식 (...)
Server Side Rendering
서버에서 자바스크립트를 동작시키는 방법
1.Node.js

1.https://ssr.vuejs.org/ko 를 보며 한땀한땀 구현 -> Node.js로 다 옮겨야함.

2.Nuxt.js 사용 -> Node.js로 다 옮겨야함.

2.비 Node.js

1.v8 엔진 모듈 사용 -> 나온지 일주일 되어서 적용 사례가 없음.

2.헤드리스 브라우저 사용 -> 말도 안되는 방식 (...)
서버에서 자바스크립트를 동작시키는 방법
Server Side Rendering
Q. 우리회사의 요구사항이 뭐였지?
Q. 우리회사의 요구사항이 뭐였지?

A. 검색엔진 노출이 안돼요.
Q. 우리회사의 요구사항이 뭐였지?

A. 메인페이지가 검색엔진 노출이 안돼요.
Q. 우리회사의 요구사항이 뭐였지?

A. 특정 몇 페이지가 검색엔진 노출이 안돼요.
ssr.vuejs.org/ko
Prerendering
이건 또 무엇인가요?
바로 여기를 개선
1.소스를 빌드하고, 소스를 헤드리스 브라우저에서 동작.

2.헤드리스 브라우저(Phantom.js)에서 동작 시키고, 그 결과를 html로 저장.

3.그리고 그 html파일을 서버사이드쪽 템플릿 파일로 사용.

4.이 상태로 서버 운영을 시작.
Prerendering
동작원리
1.소스를 빌드하고, 소스를 헤드리스 브라우저에서 동작.

2.헤드리스 브라우저(Phantom.js)에서 동작 시키고, 그 결과를 html로 저장.

3.그리고 그 html파일을 서버사이드쪽 템플릿 파일로 사용.

4.이 상태로 서버 운영을 시작.
Prerendering
동작원리
빌드 과정. 이부분을 Webpack으로 작성해야 합니다.
github.com/wan2land/gdg171021-vue-ssr-vs-prerender/commit/
5f298eb1d9e049e0181362d7add4c5cdedaf10d9
적용해봅시다.
이제 모든 페이지 소스보기가 가능해졌어요.
Q. SSR은 문제 없지만

Prerender는 어떤 문제가 발생할까요?
1.로그인에 따라 값이 바뀌는 경우, Prerender 시점에
는 로그아웃된 상태입니다.

2.로그인 한 상태에서 새로고침하면 Prerender된 화면
이 출력되고 로그인으로 바뀌면서 화면 깜빡임이 발생
합니다.

3.즉, State 가 존재하는 경우 Prerender에서는 제어할
수가 없습니다.
Prerendering
문제점
로그아웃 상태
로그인 상태로 전환
Nuxt.js를 사용하면

서버와 클라이언트간의 상태(States)를 전달하기 때문에

이러한 깜박임은 발생하지 않습니다.
Prerender에서는

조금 다른 방식으로 해결할 수 있습니다.
화면이 깜빡이는 것 보다,

차라리 늦게 뜨는게 낫습니다.
webpack.js.org/plugins/define-plugin
1.해당 플러그인은 브라우저에서 process.env.NODE_ENV 와 같은 변수를 사용할 수 있게 해줍니다.

2.process.env.NODE_ENV 를 빌드과정에서 찾아서 정해진 값으로 치환해서 사용합니다.

3.여기서는 process.env.PRERENDER 라는 변수를 선언해서 사용하였습니다.
webpack define plugin
동작원리
github.com/wan2land/gdg171021-vue-ssr-vs-prerender/commit/
f80e0a91e493896c3d46f54b0700b88f9c569547
적용해봅시다.
결론
새로운 프로젝트면 Nuxt.js

이미 한참 돌아가고 있는 서비스라면 PreRender.
알고 있는 지식이 해결책이 아닐 수도 있다.

메뉴얼을 꼼꼼히 읽자.
Q & A ?

Más contenido relacionado

La actualidad más candente

막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)연웅 조
 
Angular 기본 개념 잡기
Angular 기본 개념 잡기Angular 기본 개념 잡기
Angular 기본 개념 잡기장현 한
 
[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희NAVER D2
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.장현 한
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Jay Park
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱NAVER D2
 
Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015sung yong jung
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview민태 김
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례선협 이
 
Universal Rendering
Universal RenderingUniversal Rendering
Universal RenderingTaegon Kim
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot introJae-il Lee
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기Chang W. Doh
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기WebFrameworks
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - PolymerJae Sung Park
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debuggingJongwon Han
 
Meteor 0.3.6 Preview
Meteor 0.3.6 PreviewMeteor 0.3.6 Preview
Meteor 0.3.6 PreviewJuntai Park
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page ApplicationSangmin Yoon
 

La actualidad más candente (20)

막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)
 
Angular 기본 개념 잡기
Angular 기본 개념 잡기Angular 기본 개념 잡기
Angular 기본 개념 잡기
 
[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희[213]monitoringwithscouter 이건희
[213]monitoringwithscouter 이건희
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
 
Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015
 
iOS9 소개
iOS9 소개iOS9 소개
iOS9 소개
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
MEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overviewMEAN Stack 기반 모바일 서비스 개발 overview
MEAN Stack 기반 모바일 서비스 개발 overview
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례
 
Universal Rendering
Universal RenderingUniversal Rendering
Universal Rendering
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot intro
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging
 
Meteor 0.3.6 Preview
Meteor 0.3.6 PreviewMeteor 0.3.6 Preview
Meteor 0.3.6 Preview
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 

Similar a Vue SSR vs Prerender

[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임sung ki choi
 
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스WebFrameworks
 
원모먼트 Vue js 적용기
원모먼트 Vue js 적용기원모먼트 Vue js 적용기
원모먼트 Vue js 적용기우현 김
 
Vue 뽀개기 1장 환경설정 및 spa설정
Vue 뽀개기 1장 환경설정 및 spa설정Vue 뽀개기 1장 환경설정 및 spa설정
Vue 뽀개기 1장 환경설정 및 spa설정leejungwang
 
Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 SuHyun Jeon
 
나의 첫 서버 사이드 렌더링(feat. Next.js) - 확대해서 보기
나의 첫 서버 사이드 렌더링(feat. Next.js) - 확대해서 보기나의 첫 서버 사이드 렌더링(feat. Next.js) - 확대해서 보기
나의 첫 서버 사이드 렌더링(feat. Next.js) - 확대해서 보기Rayleigh Ko
 
프론트엔드 개발 첫걸음
프론트엔드 개발 첫걸음프론트엔드 개발 첫걸음
프론트엔드 개발 첫걸음DataUs
 
11.react router dom
11.react router dom11.react router dom
11.react router domDaniel Lim
 
2017 제주코딩해커톤 Ruby On Rails 첫째주
2017 제주코딩해커톤 Ruby On Rails 첫째주2017 제주코딩해커톤 Ruby On Rails 첫째주
2017 제주코딩해커톤 Ruby On Rails 첫째주범재 이
 
웹:앱 기술 동향
웹:앱 기술 동향웹:앱 기술 동향
웹:앱 기술 동향ssuser0e53c8
 
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문종훈 박
 
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulCreate App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulBansook Nam
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Daum DNA
 
Vue and nuxt architect 20180807
Vue and nuxt architect 20180807Vue and nuxt architect 20180807
Vue and nuxt architect 20180807Aron Kim
 
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨sys4u
 
Node.js
Node.jsNode.js
Node.jsymtech
 
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민NAVER D2
 
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.sung ki choi
 

Similar a Vue SSR vs Prerender (20)

[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임
 
Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스Meteor를 통해서 개발하는 웹어플리케이션 서비스
Meteor를 통해서 개발하는 웹어플리케이션 서비스
 
원모먼트 Vue js 적용기
원모먼트 Vue js 적용기원모먼트 Vue js 적용기
원모먼트 Vue js 적용기
 
Vue 뽀개기 1장 환경설정 및 spa설정
Vue 뽀개기 1장 환경설정 및 spa설정Vue 뽀개기 1장 환경설정 및 spa설정
Vue 뽀개기 1장 환경설정 및 spa설정
 
Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용
 
나의 첫 서버 사이드 렌더링(feat. Next.js) - 확대해서 보기
나의 첫 서버 사이드 렌더링(feat. Next.js) - 확대해서 보기나의 첫 서버 사이드 렌더링(feat. Next.js) - 확대해서 보기
나의 첫 서버 사이드 렌더링(feat. Next.js) - 확대해서 보기
 
프론트엔드 개발 첫걸음
프론트엔드 개발 첫걸음프론트엔드 개발 첫걸음
프론트엔드 개발 첫걸음
 
11.react router dom
11.react router dom11.react router dom
11.react router dom
 
Place site Design
Place site DesignPlace site Design
Place site Design
 
2017 제주코딩해커톤 Ruby On Rails 첫째주
2017 제주코딩해커톤 Ruby On Rails 첫째주2017 제주코딩해커톤 Ruby On Rails 첫째주
2017 제주코딩해커톤 Ruby On Rails 첫째주
 
웹:앱 기술 동향
웹:앱 기술 동향웹:앱 기술 동향
웹:앱 기술 동향
 
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
 
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulCreate App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
 
Vue and nuxt architect 20180807
Vue and nuxt architect 20180807Vue and nuxt architect 20180807
Vue and nuxt architect 20180807
 
Node.js in Flitto
Node.js in FlittoNode.js in Flitto
Node.js in Flitto
 
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
 
Node.js
Node.jsNode.js
Node.js
 
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
 
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
 

Vue SSR vs Prerender