SlideShare a Scribd company logo
서버리스 기반의
프론트엔드 서버 구축
(Feat. Nuxt.js)
서버리스 기반의 Nuxt.js 서버 구축
박찬민
Front-end Developer
Back-end의 깊이 있는 지식은 무섭지만,
혼자서 온전한 서비스는 만들고 싶은 욕심은 있어서 AWS Serverless에 관심 있는 Front-end 개발자.
서버리스 기반의 Nuxt.js 서버 구축
무슨 욕심이 났나? (의식의 흐름)
서버리스 기반의 Nuxt.js 서버 구축
무슨 욕심이 났나? (의식의 흐름)
값싸고 가용성 높은 프론트 서버를 띄우고 싶다.
서버리스 기반의 Nuxt.js 서버 구축
무슨 욕심이 났나? (의식의 흐름)
값싸고 가용성 높은 프론트 서버를 띄우고 싶다.
S3에서 정적 웹호스팅 하면 좋은데!!!
서버리스 기반의 Nuxt.js 서버 구축
무슨 욕심이 났나? (의식의 흐름)
값싸고 가용성 높은 프론트 서버를 띄우고 싶다.
S3에서 정적 웹호스팅 하면 좋은데!!! SEO 때문에 SSR을 해야한다…
서버리스 기반의 Nuxt.js 서버 구축
무슨 욕심이 났나? (의식의 흐름)
값싸고 가용성 높은 프론트 서버를 띄우고 싶다.
S3에서 정적 웹호스팅 하면 좋은데!!! SEO 때문에 SSR을 해야한다…
SSR 하려면 서버가 있어야하고.. 가용성을 높이려면 이중화와 오토스케일링..
더 깊숙히 들어가면 도커.. 컨테이너.. 아.. 생각할게 많은 것 같다..
서버리스 기반의 Nuxt.js 서버 구축
무슨 욕심이 났나? (의식의 흐름)
값싸고 가용성 높은 프론트 서버를 띄우고 싶다.
S3에서 정적 웹호스팅 하면 좋은데!!! SEO 때문에 SSR을 해야한다…
SSR 하려면 서버가 있어야하고.. 가용성을 높이려면 이중화와 오토스케일링..
더 깊숙히 들어가면 도커.. 컨테이너.. 아.. 생각할게 많은 것 같다..
서버 고민없이 마음 편하게 가용성 높고 SSR 가능한 서버를 쓰고 싶다!!!
서버리스 기반의 Nuxt.js 서버 구축
무슨 욕심이 났나? (의식의 흐름)
값싸고 가용성 높은 프론트 서버를 띄우고 싶다.
S3에서 정적 웹호스팅 하면 좋은데!!! SEO 때문에 SSR을 해야한다…
SSR 하려면 서버가 있어야하고.. 가용성을 높이려면 이중화와 오토스케일링..
더 깊숙히 들어가면 도커.. 컨테이너.. 아.. 생각할게 많은 것 같다..
서버 고민없이 마음 편하게 가용성 높고 SSR 가능한 서버를 쓰고 싶다!!!
Lambda에서 Express를 띄울 수 있으니깐 Nuxt project를 올릴 수 있지 않을까?!?!
서버리스 기반의 Nuxt.js 서버 구축
구조 1단계
Lambda에서 Nuxt.js
Express Server 구동
서버리스 기반의 Nuxt.js 서버 구축
구조 1단계
Lambda에서 Nuxt.js
Express Server 구동
aws-serverless-express
Express App을 Lambda에서
실행 시킬 수 있게 해주는 node.js의 라이브러리
서버리스 기반의 Nuxt.js 서버 구축
구조 1단계
(1) Express App 생성
서버리스 기반의 Nuxt.js 서버 구축
구조 1단계
(2) Lambda Function Handler에 App연결
서버리스 기반의 Nuxt.js 서버 구축
구조 1단계
Lambda에서 Nuxt.js
Express Server 구동
브라우저
접속
서버리스 기반의 Nuxt.js 서버 구축
구조 1단계
Lambda에서 Nuxt.js
Express Server 구동
API Gateway로 HTTP
URL 연결
Custom Domain 연결을
위한 CF 주소 할당
Custom Domain 생성
및 연결
브라우저
접속
서버리스 기반의 Nuxt.js 서버 구축
구조 1단계의 장점과 단점
* 장점
- 트래픽에 따른 스케일 관리가 필요하지 않은 프론트엔드 서버
- 사용된 만큼만 비용이 청구됨(트래픽이 적으면 적은 비용만 발생)
* 단점
- 최초 접속자 또는 새로운 Lambda가 생성될 때 접속하는 유저는 콜드스타트로 인해서
웹사이트 접속 지연을 겪음
- 웹사이트에 필요한 정적 리소스(JS, CSS, 이미지 등)들을 호출 할 때도 Lambda를
호출하기 때문에 비효율적인 비용이 발생
서버리스 기반의 Nuxt.js 서버 구축
구조 2단계
* 구조 1단계의 단점을 보완
- 웹사이트에 필요한 정적 리소스(JS, CSS, 이미지 등)들을 호출 할 때도 Lambda를
호출하기 때문에 비효율적인 비용이 발생
* 보완의 실마리
- Nuxt.js에서는 Server-render 빌드파일과 Client-render 빌드파일을 분리할 수 있음
- AWS에는 정적파일을 배포하는데 아주 좋은 S3와 CloudFront가 있음
서버리스 기반의 Nuxt.js 서버 구축
구조 2단계
* Nuxt.js의 publicPath
= S3 + CloudFront
서버리스 기반의 Nuxt.js 서버 구축
구조 2단계
Lambda에서 Nuxt.js
Express Server 구동
Nuxt.js Client 배포파일
저장 및 정적 리소스 저장
Nuxt.js의 Server-render 용 빌드파일 업로드
Nuxt.js의 Client-render 용 빌드파일 업로드
서버리스 기반의 Nuxt.js 서버 구축
구조 2단계
Lambda에서 Nuxt.js
Express Server 구동
API Gateway로 HTTP
URL 연결
Custom Domain 연결을
위한 CF 주소 할당
Custom Domain 생성
및 연결
Nuxt.js Client 배포파일
저장 및 정적 리소스 저장
CDN으로 리소스 배포
웹사이트 최초 접속
또는 새로고침
첫 페이지에 명시된
리소스들 다운로드
서버리스 기반의 Nuxt.js 서버 구축
구조 2단계의 장점과 단점
* 장점
- 트래픽에 따른 스케일 관리가 필요하지 않은 프론트엔드 서버
- 사용된 만큼만 비용이 청구됨(트래픽이 적으면 적은 비용만 발생)
- Lambda 호출수를 줄여서 비용 절감
- 첫 접속 페이지만 Lambda에서 HTML 문서를 반환하고, 나머지 페이지 배포파일과
정적 리소스는 CDN에서 빠르게 전달
* 단점
- 최초 접속자 또는 새로운 Lambda가 생성될 때 접속하는 유저는 콜드스타트로 인해서
웹사이트 접속 지연을 겪음
서버리스 기반의 Nuxt.js 서버 구축
구조 3단계
* 구조 2단계의 단점을 보완
- 최초 접속자 또는 새로운 Lambda가 생성될 때 접속하는 유저는 콜드스타트로 인해서
웹사이트 접속 지연을 겪음
* 보완의 실마리
- Lambda@Edge를 이용하면 Request를 확인하여 Origin을 변경할 수 있음
- Nuxt.js는 SSR Framework지만, 정적 SPA 모드로 빌드할 수 있음
서버리스 기반의 Nuxt.js 서버 구축
구조 3단계
* Lambda@Edge
SEO 때문에 포기할 수 없는 Lambda...였는데!!
일반 사용자와 Bot을 구별해서 각자 다른 서버에서 웹페이지를 제공할 수 있다?!?!?!
서버리스 기반의 Nuxt.js 서버 구축
구조 3단계
* Lambda@Edge
Origin으로 요청하기 전에 호출되며,
Request 내용을 확인 할 수 있고,
Request의 Origin 정보를 변경하여 다른
Origin으로 요청을 보낼 수 있다.
서버리스 기반의 Nuxt.js 서버 구축
구조 3단계
Lambda에서 Nuxt.js
Express Server 구동
Nuxt.js SPA 웹앱 호스팅
Universal Mode 빌드파일 업로드
SPA Mode 빌드파일 업로드
서버리스 기반의 Nuxt.js 서버 구축
구조 3단계
Lambda에서 Nuxt.js
Express Server 구동
API Gateway로 HTTP
URL 연결
Custom Domain 연결을
위한 CF 주소 할당
Custom Domain 생성
및 연결
웹사이트 접속
S3 웹호스팅을
Origin으로 바라보는 CFNuxt.js SPA 웹앱 호스팅
Bot인지 일반유저인지
판단
일반유저(Origin 변경 안함)
Bot(Origin 변경 함)
서버리스 기반의 Nuxt.js 서버 구축
구조 3단계의 장점과 단점
* 장점
- 트래픽에 따른 스케일 관리가 필요하지 않은 프론트엔드 서버
- 사용된 만큼만 비용이 청구됨(트래픽이 적으면 적은 비용만 발생)
- Bot이 아닌 일반유저는 S3에서 웹페이지를 제공받기 때문에 Lambda의 콜드스타트
이슈를 겪지 않음
* 단점
- 웹페이지 접속, 정적리소스 요청 등 모든 요청이 Lambda@Edge에서 Bot인지
판단하기 때문에 Lambda 비용이 비효율적으로 부과됨
서버리스 기반의 Nuxt.js 서버 구축
구조 4단계
* 구조 3단계의 단점을 보완
- 웹페이지 접속, 정적리소스 요청 등 모든 요청이 Lambda@Edge에서 Bot인지
판단하기 때문에 Lambda 비용이 비효율적으로 부과됨
* 보완의 실마리
- 2단계에서 사용했던, Server-render/Client-render 빌드 파일 분리 후,
Client-render 빌드 파일을 CDN(S3 + CloudFront)에 배포
서버리스 기반의 Nuxt.js 서버 구축
구조 4단계
웹사이트 첫 접속
또는 새로고침
또는 Bot
첫 페이지에 명시된
리소스들 다운로드
Lambda에서 Nuxt.js
Express Server 구동
Nuxt.js SPA 웹앱 호스팅
Nuxt.js Client 배포파일
저장 및 정적 리소스 저장
서버리스 기반의 Nuxt.js 서버 구축
구조 4단계
* Sample 확인
- 브라우저에서 s3-nuxt.walkinpcm.com 접속
-- 웹페이지에서 ‘Server: S3’ 확인
-- 소스코드 보기에서 본문 없는 SPA임을 확인
-- js 파일의 URL이 resource.walkinpcm.com임을 확인
- Postman에서 User-Agent를 Googlebot으로 수정하여 s3-nuxt.walkinpcm.com
으로 접속
-- 응답의 Body에 Rendering된 html 문서를 확인
-- 이미지 파일의 URL이 resource.walkinpcm.com임을 확인
서버리스 기반의 Nuxt.js 서버 구축
결론
* AWS 서버리스 서비스들을 이용하면 관리의 부담이 적고, 비용 효율적인 프론트엔드
서버를 운영할 수 있음
* 마지막 단계가 가장 좋다기보다, 서비스의 요구사항에 따라 적절한 AWS 서비스를
선택적으로 사용하는 것이 좋음
* 작은 구조로 시작해서 하나씩 기능을 깊게 파보면, 점점 더 좋은 구조를 만들 수 있는
방법들이 나타남. 그러므로 계속해서 시도해보는 것이 좋음
* AWS 서버리스 소모임은 언제나 서버리스에 관심 있으신 모든 분들을 환영합니다 :)
( “Meetup” 에서 모임 일정을 확인하실 수 있습니다! @awskrug )
서버리스 기반의 Nuxt.js 서버 구축
감사합니다 :)

More Related Content

PPTX
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
PDF
AWS 기반 클라우드 아키텍처 모범사례 - 삼성전자 개발자 포털/개발자 워크스페이스 - 정영준 솔루션즈 아키텍트, AWS / 유현성 수석,...
PDF
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
PDF
롯데이커머스의 마이크로 서비스 아키텍처 진화와 비용 관점의 운영 노하우-나현길, 롯데이커머스 클라우드플랫폼 팀장::AWS 마이그레이션 A ...
PPTX
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
PPTX
AWS CloudFront 가속 및 DDoS 방어
PDF
서버리스 기반 데이터베이스 모델링 및 운영 노하우 알아보기 - 변규현 SW 엔지니어, 당근마켓 / 김선형 CTO, 티클 :: AWS Sum...
PDF
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
AWS 기반 클라우드 아키텍처 모범사례 - 삼성전자 개발자 포털/개발자 워크스페이스 - 정영준 솔루션즈 아키텍트, AWS / 유현성 수석,...
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
롯데이커머스의 마이크로 서비스 아키텍처 진화와 비용 관점의 운영 노하우-나현길, 롯데이커머스 클라우드플랫폼 팀장::AWS 마이그레이션 A ...
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
AWS CloudFront 가속 및 DDoS 방어
서버리스 기반 데이터베이스 모델링 및 운영 노하우 알아보기 - 변규현 SW 엔지니어, 당근마켓 / 김선형 CTO, 티클 :: AWS Sum...
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming

What's hot (20)

PDF
PUBG: Battlegrounds 라이브 서비스 EKS 전환 사례 공유 [크래프톤 - 레벨 300] - 발표자: 김정헌, PUBG Dev...
PDF
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
PDF
실전 서버 부하테스트 노하우
PPTX
컨테이너 기술과 가상화 기술의 주요한 차이점
PDF
Oracle DB를 AWS로 이관하는 방법들 - 서호석 클라우드 사업부/컨설팅팀 이사, 영우디지탈 :: AWS Summit Seoul 2021
PDF
K8s, Amazon EKS - 유재석, AWS 솔루션즈 아키텍트
PPTX
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
PDF
AWS Kubernetes 서비스 자세히 살펴보기 (정영준 & 이창수, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
PDF
서버학개론(백엔드 서버 개발자를 위한)
PDF
初心者向けWebinar AWS上でのファイルサーバ構築
PDF
금융권 고객을 위한 클라우드 보안 및 규정 준수 가이드 - 이대근 시큐리티 어슈어런스 매니저, AWS :: AWS Summit Seoul ...
PDF
[AWS Builders] AWS 서버리스 서비스를 활용한 웹 애플리케이션 구축 및 배포 방법 - 정창호, AWS 솔루션즈 아키텍트
PDF
고객의 플랫폼/서비스를 개선한 국내 사례 살펴보기 – 장준성 AWS 솔루션즈 아키텍트, 강산아 NDREAM 팀장, 송영호 야놀자 매니저, ...
PPTX
9월 웨비나 - AWS에서의 네트워크 보안 (이경수 솔루션즈 아키텍트)
PDF
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기::이창수::AWS Summit Seoul 2018
PDF
금융 회사를 위한 클라우드 이용 가이드 – 신은수 AWS 솔루션즈 아키텍트, 김호영 AWS 정책협력 담당:: AWS Cloud Week ...
PPTX
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
PDF
AWS와 함께하는 클라우드 컴퓨팅 - 강철, AWS 어카운트 매니저 :: AWS Builders 100
PDF
[2017 AWS Startup Day] AWS 비용 최대 90% 절감하기: 스팟 인스턴스 Deep-Dive
PDF
커머스 스타트업의 효율적인 데이터 분석 플랫폼 구축기 - 하지양 데이터 엔지니어, 발란 / 강웅석 데이터 엔지니어, 크로키닷컴 :: AWS...
PUBG: Battlegrounds 라이브 서비스 EKS 전환 사례 공유 [크래프톤 - 레벨 300] - 발표자: 김정헌, PUBG Dev...
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
실전 서버 부하테스트 노하우
컨테이너 기술과 가상화 기술의 주요한 차이점
Oracle DB를 AWS로 이관하는 방법들 - 서호석 클라우드 사업부/컨설팅팀 이사, 영우디지탈 :: AWS Summit Seoul 2021
K8s, Amazon EKS - 유재석, AWS 솔루션즈 아키텍트
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWS Kubernetes 서비스 자세히 살펴보기 (정영준 & 이창수, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
서버학개론(백엔드 서버 개발자를 위한)
初心者向けWebinar AWS上でのファイルサーバ構築
금융권 고객을 위한 클라우드 보안 및 규정 준수 가이드 - 이대근 시큐리티 어슈어런스 매니저, AWS :: AWS Summit Seoul ...
[AWS Builders] AWS 서버리스 서비스를 활용한 웹 애플리케이션 구축 및 배포 방법 - 정창호, AWS 솔루션즈 아키텍트
고객의 플랫폼/서비스를 개선한 국내 사례 살펴보기 – 장준성 AWS 솔루션즈 아키텍트, 강산아 NDREAM 팀장, 송영호 야놀자 매니저, ...
9월 웨비나 - AWS에서의 네트워크 보안 (이경수 솔루션즈 아키텍트)
천만 사용자를 위한 AWS 클라우드 아키텍처 진화하기::이창수::AWS Summit Seoul 2018
금융 회사를 위한 클라우드 이용 가이드 – 신은수 AWS 솔루션즈 아키텍트, 김호영 AWS 정책협력 담당:: AWS Cloud Week ...
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
AWS와 함께하는 클라우드 컴퓨팅 - 강철, AWS 어카운트 매니저 :: AWS Builders 100
[2017 AWS Startup Day] AWS 비용 최대 90% 절감하기: 스팟 인스턴스 Deep-Dive
커머스 스타트업의 효율적인 데이터 분석 플랫폼 구축기 - 하지양 데이터 엔지니어, 발란 / 강웅석 데이터 엔지니어, 크로키닷컴 :: AWS...
Ad

Similar to 서버리스 기반의 프론트엔드 서버 구축(Serverless frontend web server) (20)

PDF
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
PPTX
Vingle tech talk #1
PPTX
Node.js의 도입과 활용
PDF
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
PDF
AWS 서버리스 신규 서비스 총정리 - 트랙2, Community Day 2018 re:Invent 특집
PDF
AWS Meetup 프리젠테이션.pdf
PDF
Static Website Hosting with AWS :: Front-end Meetup
PDF
Internship backend
PDF
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
PDF
서버리스 웹 애플리케이션 구축 방법론::김현수:: AWS Summit Seoul 2018
PDF
Serverless websocket 톺아보기
PDF
AWS re:Invent 특집(1) – 파이선(Python) 개발자를 위한 AWS 활용 방법 (윤석찬)
PPTX
Aws lambda 와 함께 서버리스 서비스 만들기
PDF
요즘 웹 배포
PPTX
빠르게훓어보는 Node.js와 Vert.x
PPTX
Startup JavaScript 8 - NPM, Express.JS
PDF
IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편
PDF
AWS CLOUD 2018- 보다 강력한 Serverless, AWS Lambda 기능 확장(안효빈 솔루션즈 아키텍트)
PPTX
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
PDF
20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Frontend를 Serverle...
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
Vingle tech talk #1
Node.js의 도입과 활용
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
AWS 서버리스 신규 서비스 총정리 - 트랙2, Community Day 2018 re:Invent 특집
AWS Meetup 프리젠테이션.pdf
Static Website Hosting with AWS :: Front-end Meetup
Internship backend
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
서버리스 웹 애플리케이션 구축 방법론::김현수:: AWS Summit Seoul 2018
Serverless websocket 톺아보기
AWS re:Invent 특집(1) – 파이선(Python) 개발자를 위한 AWS 활용 방법 (윤석찬)
Aws lambda 와 함께 서버리스 서비스 만들기
요즘 웹 배포
빠르게훓어보는 Node.js와 Vert.x
Startup JavaScript 8 - NPM, Express.JS
IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편
AWS CLOUD 2018- 보다 강력한 Serverless, AWS Lambda 기능 확장(안효빈 솔루션즈 아키텍트)
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Frontend를 Serverle...
Ad

서버리스 기반의 프론트엔드 서버 구축(Serverless frontend web server)

  • 2. 서버리스 기반의 Nuxt.js 서버 구축 박찬민 Front-end Developer Back-end의 깊이 있는 지식은 무섭지만, 혼자서 온전한 서비스는 만들고 싶은 욕심은 있어서 AWS Serverless에 관심 있는 Front-end 개발자.
  • 3. 서버리스 기반의 Nuxt.js 서버 구축 무슨 욕심이 났나? (의식의 흐름)
  • 4. 서버리스 기반의 Nuxt.js 서버 구축 무슨 욕심이 났나? (의식의 흐름) 값싸고 가용성 높은 프론트 서버를 띄우고 싶다.
  • 5. 서버리스 기반의 Nuxt.js 서버 구축 무슨 욕심이 났나? (의식의 흐름) 값싸고 가용성 높은 프론트 서버를 띄우고 싶다. S3에서 정적 웹호스팅 하면 좋은데!!!
  • 6. 서버리스 기반의 Nuxt.js 서버 구축 무슨 욕심이 났나? (의식의 흐름) 값싸고 가용성 높은 프론트 서버를 띄우고 싶다. S3에서 정적 웹호스팅 하면 좋은데!!! SEO 때문에 SSR을 해야한다…
  • 7. 서버리스 기반의 Nuxt.js 서버 구축 무슨 욕심이 났나? (의식의 흐름) 값싸고 가용성 높은 프론트 서버를 띄우고 싶다. S3에서 정적 웹호스팅 하면 좋은데!!! SEO 때문에 SSR을 해야한다… SSR 하려면 서버가 있어야하고.. 가용성을 높이려면 이중화와 오토스케일링.. 더 깊숙히 들어가면 도커.. 컨테이너.. 아.. 생각할게 많은 것 같다..
  • 8. 서버리스 기반의 Nuxt.js 서버 구축 무슨 욕심이 났나? (의식의 흐름) 값싸고 가용성 높은 프론트 서버를 띄우고 싶다. S3에서 정적 웹호스팅 하면 좋은데!!! SEO 때문에 SSR을 해야한다… SSR 하려면 서버가 있어야하고.. 가용성을 높이려면 이중화와 오토스케일링.. 더 깊숙히 들어가면 도커.. 컨테이너.. 아.. 생각할게 많은 것 같다.. 서버 고민없이 마음 편하게 가용성 높고 SSR 가능한 서버를 쓰고 싶다!!!
  • 9. 서버리스 기반의 Nuxt.js 서버 구축 무슨 욕심이 났나? (의식의 흐름) 값싸고 가용성 높은 프론트 서버를 띄우고 싶다. S3에서 정적 웹호스팅 하면 좋은데!!! SEO 때문에 SSR을 해야한다… SSR 하려면 서버가 있어야하고.. 가용성을 높이려면 이중화와 오토스케일링.. 더 깊숙히 들어가면 도커.. 컨테이너.. 아.. 생각할게 많은 것 같다.. 서버 고민없이 마음 편하게 가용성 높고 SSR 가능한 서버를 쓰고 싶다!!! Lambda에서 Express를 띄울 수 있으니깐 Nuxt project를 올릴 수 있지 않을까?!?!
  • 10. 서버리스 기반의 Nuxt.js 서버 구축 구조 1단계 Lambda에서 Nuxt.js Express Server 구동
  • 11. 서버리스 기반의 Nuxt.js 서버 구축 구조 1단계 Lambda에서 Nuxt.js Express Server 구동 aws-serverless-express Express App을 Lambda에서 실행 시킬 수 있게 해주는 node.js의 라이브러리
  • 12. 서버리스 기반의 Nuxt.js 서버 구축 구조 1단계 (1) Express App 생성
  • 13. 서버리스 기반의 Nuxt.js 서버 구축 구조 1단계 (2) Lambda Function Handler에 App연결
  • 14. 서버리스 기반의 Nuxt.js 서버 구축 구조 1단계 Lambda에서 Nuxt.js Express Server 구동 브라우저 접속
  • 15. 서버리스 기반의 Nuxt.js 서버 구축 구조 1단계 Lambda에서 Nuxt.js Express Server 구동 API Gateway로 HTTP URL 연결 Custom Domain 연결을 위한 CF 주소 할당 Custom Domain 생성 및 연결 브라우저 접속
  • 16. 서버리스 기반의 Nuxt.js 서버 구축 구조 1단계의 장점과 단점 * 장점 - 트래픽에 따른 스케일 관리가 필요하지 않은 프론트엔드 서버 - 사용된 만큼만 비용이 청구됨(트래픽이 적으면 적은 비용만 발생) * 단점 - 최초 접속자 또는 새로운 Lambda가 생성될 때 접속하는 유저는 콜드스타트로 인해서 웹사이트 접속 지연을 겪음 - 웹사이트에 필요한 정적 리소스(JS, CSS, 이미지 등)들을 호출 할 때도 Lambda를 호출하기 때문에 비효율적인 비용이 발생
  • 17. 서버리스 기반의 Nuxt.js 서버 구축 구조 2단계 * 구조 1단계의 단점을 보완 - 웹사이트에 필요한 정적 리소스(JS, CSS, 이미지 등)들을 호출 할 때도 Lambda를 호출하기 때문에 비효율적인 비용이 발생 * 보완의 실마리 - Nuxt.js에서는 Server-render 빌드파일과 Client-render 빌드파일을 분리할 수 있음 - AWS에는 정적파일을 배포하는데 아주 좋은 S3와 CloudFront가 있음
  • 18. 서버리스 기반의 Nuxt.js 서버 구축 구조 2단계 * Nuxt.js의 publicPath = S3 + CloudFront
  • 19. 서버리스 기반의 Nuxt.js 서버 구축 구조 2단계 Lambda에서 Nuxt.js Express Server 구동 Nuxt.js Client 배포파일 저장 및 정적 리소스 저장 Nuxt.js의 Server-render 용 빌드파일 업로드 Nuxt.js의 Client-render 용 빌드파일 업로드
  • 20. 서버리스 기반의 Nuxt.js 서버 구축 구조 2단계 Lambda에서 Nuxt.js Express Server 구동 API Gateway로 HTTP URL 연결 Custom Domain 연결을 위한 CF 주소 할당 Custom Domain 생성 및 연결 Nuxt.js Client 배포파일 저장 및 정적 리소스 저장 CDN으로 리소스 배포 웹사이트 최초 접속 또는 새로고침 첫 페이지에 명시된 리소스들 다운로드
  • 21. 서버리스 기반의 Nuxt.js 서버 구축 구조 2단계의 장점과 단점 * 장점 - 트래픽에 따른 스케일 관리가 필요하지 않은 프론트엔드 서버 - 사용된 만큼만 비용이 청구됨(트래픽이 적으면 적은 비용만 발생) - Lambda 호출수를 줄여서 비용 절감 - 첫 접속 페이지만 Lambda에서 HTML 문서를 반환하고, 나머지 페이지 배포파일과 정적 리소스는 CDN에서 빠르게 전달 * 단점 - 최초 접속자 또는 새로운 Lambda가 생성될 때 접속하는 유저는 콜드스타트로 인해서 웹사이트 접속 지연을 겪음
  • 22. 서버리스 기반의 Nuxt.js 서버 구축 구조 3단계 * 구조 2단계의 단점을 보완 - 최초 접속자 또는 새로운 Lambda가 생성될 때 접속하는 유저는 콜드스타트로 인해서 웹사이트 접속 지연을 겪음 * 보완의 실마리 - Lambda@Edge를 이용하면 Request를 확인하여 Origin을 변경할 수 있음 - Nuxt.js는 SSR Framework지만, 정적 SPA 모드로 빌드할 수 있음
  • 23. 서버리스 기반의 Nuxt.js 서버 구축 구조 3단계 * Lambda@Edge SEO 때문에 포기할 수 없는 Lambda...였는데!! 일반 사용자와 Bot을 구별해서 각자 다른 서버에서 웹페이지를 제공할 수 있다?!?!?!
  • 24. 서버리스 기반의 Nuxt.js 서버 구축 구조 3단계 * Lambda@Edge Origin으로 요청하기 전에 호출되며, Request 내용을 확인 할 수 있고, Request의 Origin 정보를 변경하여 다른 Origin으로 요청을 보낼 수 있다.
  • 25. 서버리스 기반의 Nuxt.js 서버 구축 구조 3단계 Lambda에서 Nuxt.js Express Server 구동 Nuxt.js SPA 웹앱 호스팅 Universal Mode 빌드파일 업로드 SPA Mode 빌드파일 업로드
  • 26. 서버리스 기반의 Nuxt.js 서버 구축 구조 3단계 Lambda에서 Nuxt.js Express Server 구동 API Gateway로 HTTP URL 연결 Custom Domain 연결을 위한 CF 주소 할당 Custom Domain 생성 및 연결 웹사이트 접속 S3 웹호스팅을 Origin으로 바라보는 CFNuxt.js SPA 웹앱 호스팅 Bot인지 일반유저인지 판단 일반유저(Origin 변경 안함) Bot(Origin 변경 함)
  • 27. 서버리스 기반의 Nuxt.js 서버 구축 구조 3단계의 장점과 단점 * 장점 - 트래픽에 따른 스케일 관리가 필요하지 않은 프론트엔드 서버 - 사용된 만큼만 비용이 청구됨(트래픽이 적으면 적은 비용만 발생) - Bot이 아닌 일반유저는 S3에서 웹페이지를 제공받기 때문에 Lambda의 콜드스타트 이슈를 겪지 않음 * 단점 - 웹페이지 접속, 정적리소스 요청 등 모든 요청이 Lambda@Edge에서 Bot인지 판단하기 때문에 Lambda 비용이 비효율적으로 부과됨
  • 28. 서버리스 기반의 Nuxt.js 서버 구축 구조 4단계 * 구조 3단계의 단점을 보완 - 웹페이지 접속, 정적리소스 요청 등 모든 요청이 Lambda@Edge에서 Bot인지 판단하기 때문에 Lambda 비용이 비효율적으로 부과됨 * 보완의 실마리 - 2단계에서 사용했던, Server-render/Client-render 빌드 파일 분리 후, Client-render 빌드 파일을 CDN(S3 + CloudFront)에 배포
  • 29. 서버리스 기반의 Nuxt.js 서버 구축 구조 4단계 웹사이트 첫 접속 또는 새로고침 또는 Bot 첫 페이지에 명시된 리소스들 다운로드 Lambda에서 Nuxt.js Express Server 구동 Nuxt.js SPA 웹앱 호스팅 Nuxt.js Client 배포파일 저장 및 정적 리소스 저장
  • 30. 서버리스 기반의 Nuxt.js 서버 구축 구조 4단계 * Sample 확인 - 브라우저에서 s3-nuxt.walkinpcm.com 접속 -- 웹페이지에서 ‘Server: S3’ 확인 -- 소스코드 보기에서 본문 없는 SPA임을 확인 -- js 파일의 URL이 resource.walkinpcm.com임을 확인 - Postman에서 User-Agent를 Googlebot으로 수정하여 s3-nuxt.walkinpcm.com 으로 접속 -- 응답의 Body에 Rendering된 html 문서를 확인 -- 이미지 파일의 URL이 resource.walkinpcm.com임을 확인
  • 31. 서버리스 기반의 Nuxt.js 서버 구축 결론 * AWS 서버리스 서비스들을 이용하면 관리의 부담이 적고, 비용 효율적인 프론트엔드 서버를 운영할 수 있음 * 마지막 단계가 가장 좋다기보다, 서비스의 요구사항에 따라 적절한 AWS 서비스를 선택적으로 사용하는 것이 좋음 * 작은 구조로 시작해서 하나씩 기능을 깊게 파보면, 점점 더 좋은 구조를 만들 수 있는 방법들이 나타남. 그러므로 계속해서 시도해보는 것이 좋음 * AWS 서버리스 소모임은 언제나 서버리스에 관심 있으신 모든 분들을 환영합니다 :) ( “Meetup” 에서 모임 일정을 확인하실 수 있습니다! @awskrug )
  • 32. 서버리스 기반의 Nuxt.js 서버 구축 감사합니다 :)