SlideShare une entreprise Scribd logo
1  sur  24
VINGLE Front End
Managing and deploying service in 5 minutes
신미르 Tylor Shin
불행했던 개발자 1
Before microservice
Web Server(Ruby on Rails)
Desktop Web
Mobile Web
Admin 개발자,
기획자,
마케터,
젠킨스
의 얼굴이 될 수 있습니다.
너무 크고 복잡한 프로젝트(Repository)
+
서비스 간 극심한 커플링
+
최소 2시간 이상 걸리는 배포, 롤백
Same Repository
Same Deploy
Same CI
나는 어떻게 빙글을 망가뜨렸나(과거형)
• 테스트가 제대로 작성되어 있지 않은 경우
• BackEnd - (API) 부분을 잘못 건드린 경우
• 라이브러리 간 충돌이나 버그가 존재하는 경우
(ex: Rails Sprocket…)
• 백엔드가 배포되면 안됐는데 배포를 눌러버린 경우
• + 처음 프로젝트를 봤을 때의 심정 ———>
독립 프론트엔드 서버를 구축시 필요한 사
항들
1. 원래 웹서버와 완벽하게 분리된 환경에서 존재해야 함
2. 빌드, 배포, 테스트, 롤백을 모두 자동화하여 관리할 수 있는
CI 환경 (Jenkins와 같은 CI Tool을 사용)
3. 실시간 변동적인 Scalability 확보
4. 서버 상황에 대한 실시간 Monitoring 환경 확보
5. 서버 Logger와 같은 필수적인 기능들 확보
6. Universal Rendering(isomorphic)이 가능해야 함(Server-side
rendering)
Client-side rendering
Universal rendering
독립 서버를 위한 대안 후보들
Static Page
NodeJS server
AWS Lambda
Vingle Mobile Web
No Service
Vingle Desktop Web
Independent NodeJS
server
Independent NodeJS
server
• 일반적인 nodeJS 서버(ExpressJS, KoA …)
• 유니버설(Isomorphic) 렌더링
• 가변적인 Scalability 확보가 필요함
• 모니터링 및 관리 환경을 설정해야 함
• SSL 및 Cors 등 귀찮은 각종 환경들을 설정해야 함
Static Page
Static Page
• index.html와 bundle.JS를 S3에 업로드
• 웹 서버(Nginx) -> CDN -> S3 식으로 앞단에 CDN 배치
• 장/단점
클라이언트 사이드 렌더링
SEO가 보장되지 않음
느린 최초 렌더링
CDN을 통한 모니터링 가능
가변적인 Scalability 확보 가능
AWS Lambda?
• 이벤트에 응답하여 코드를 실행하고
자동으로 기본 컴퓨팅 리소스를 관리
하는 서버리스 컴퓨팅 서비스
• nodeJS, Java, Python , C# 코드 실행
가능
• 이벤트가 HTTP 요청일 경우
Response를 Customizing 가능
AWS Lambda
AWS Lambda
• Universal(isomorphic) rendering
• 가변적 scalability 확보
• 모니터링 및 배포 관리 시스템 기본 제공
• Serverless와 AWS CloudFormation을 통한 다중 AWS 서비스 관리 가
능
• SSL, Cors 세팅 등 귀찮은 설정들 기본 설정
• 일반 서버보다 훨씬 저렴한 가격
쌉니다
모니터링도 좋습니다!
실제로 보는 CI - CD 적용 이후 업무 프
로세스
New branch
Build bundleJS
Unit & E2E test
Upload bundle to S3
Notify Slack
Pull Request is
merged
Build bundleJS
Unit & E2E test
Notify Slack
Deploy
After 30 minutes
1. 새로운 Branch에서 개발을 시작함
2. 새 Branch를 Push하면 새 Jenkins pipeline 생성
3. 자동으로 Build - Test - Demo Branch 생성
4. 이후 Slack으로 노티
실제로 개발자가 하는 일은 새 Branch를 Push하는 것 뿐
Example Jenkins Pipeline
Demo Branch?
디자이너와의 협업, QA 과정에서의 효율성
Production에서만 확인 가능한 기능들 검증
(Facebook oAuth 등…)
Pull Request가 Merge된 이후?
1. 자동으로 다시금 빌드, 테스트를 실행
2. Demo Branch를 통해 마지막 30분 동안
최후의 QA를 할 수 있는 시간을 줌
3. 자동으로 Lambda가 가르키는 타겟 JS파일
주소를 현재 버젼으로 바꿈으로 배포 끝
실제적인 배포는 2분 안에 완료
Rollback?
방법 1
가장 최근에 성공했던 배포 Jenkins job 을 돌린다.
안전하고, 2분 안에 다시 롤백 가능
방법 2
AWS Console에 접속해서 Lambda script를
이전에 성공했던 것으로 롤백하게 한다.
즉시 롤백 가능
현재 빙글에서는 원칙적으로 방법 1을 사용하고 있음
모든 건 자동화에 맡기고 놀러가세요
저분은 왜 아마존 티셔츠(…)
행복해진 개발자들
감사합니다

Contenu connexe

Tendances

JavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJSJavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJS
NAVER D2
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
NAVER D2
 
5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스
NAVER D2
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
devCAT Studio, NEXON
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
devCAT Studio, NEXON
 

Tendances (20)

bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포bamboo 로 PHP 프로젝트 지속적인 배포
bamboo 로 PHP 프로젝트 지속적인 배포
 
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
Cooking jquery
Cooking jqueryCooking jquery
Cooking jquery
 
모두의 클라우드 딥러닝
모두의 클라우드 딥러닝모두의 클라우드 딥러닝
모두의 클라우드 딥러닝
 
PHP로 웹개발을 해보자
PHP로 웹개발을 해보자PHP로 웹개발을 해보자
PHP로 웹개발을 해보자
 
신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기신림프로그래머모임_개발프로세스개선기
신림프로그래머모임_개발프로세스개선기
 
Vue.js와 Firebase활용기
Vue.js와 Firebase활용기Vue.js와 Firebase활용기
Vue.js와 Firebase활용기
 
JavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJSJavaScript로 오픈소스를 해보자. bsJS
JavaScript로 오픈소스를 해보자. bsJS
 
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
PHP Slim Framework with Angular
PHP Slim Framework with AngularPHP Slim Framework with Angular
PHP Slim Framework with Angular
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
 
5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스5.yobi를 활용한 개발자 협업 및 배포 프로세스
5.yobi를 활용한 개발자 협업 및 배포 프로세스
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
 
Web assembly 맛보기
Web assembly 맛보기Web assembly 맛보기
Web assembly 맛보기
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
ecdevday5
ecdevday5ecdevday5
ecdevday5
 
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
이승재, 강성훈, 내가 만든 언어의 개발환경을 Visual Studio Code로 빠르고 쉽게 구축하기 #1, NDC2017
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
 

En vedette

En vedette (18)

DSR Testing (Part 1)
DSR Testing (Part 1)DSR Testing (Part 1)
DSR Testing (Part 1)
 
Rule of two
Rule of twoRule of two
Rule of two
 
Bootstrapping Microservices
Bootstrapping MicroservicesBootstrapping Microservices
Bootstrapping Microservices
 
Javantura v4 - KumuluzEE – Microservices with Java - Matjaž B. Jurič & Tilen ...
Javantura v4 - KumuluzEE – Microservices with Java - Matjaž B. Jurič & Tilen ...Javantura v4 - KumuluzEE – Microservices with Java - Matjaž B. Jurič & Tilen ...
Javantura v4 - KumuluzEE – Microservices with Java - Matjaž B. Jurič & Tilen ...
 
Security enforcement of Java Microservices with Apiman & Keycloak
Security enforcement of Java Microservices with Apiman & KeycloakSecurity enforcement of Java Microservices with Apiman & Keycloak
Security enforcement of Java Microservices with Apiman & Keycloak
 
Microservice Websites (microXchg 2017)
Microservice Websites (microXchg 2017)Microservice Websites (microXchg 2017)
Microservice Websites (microXchg 2017)
 
Javantura v4 - Cloud-native Architectures and Java - Matjaž B. Jurič
Javantura v4 - Cloud-native Architectures and Java - Matjaž B. JuričJavantura v4 - Cloud-native Architectures and Java - Matjaž B. Jurič
Javantura v4 - Cloud-native Architectures and Java - Matjaž B. Jurič
 
Microservices Standardization - Susan Fowler, Stripe
Microservices Standardization - Susan Fowler, StripeMicroservices Standardization - Susan Fowler, Stripe
Microservices Standardization - Susan Fowler, Stripe
 
Modernizing IT with Microservices
Modernizing IT with MicroservicesModernizing IT with Microservices
Modernizing IT with Microservices
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
Authorization and Authentication in Microservice Environments
Authorization and Authentication in Microservice EnvironmentsAuthorization and Authentication in Microservice Environments
Authorization and Authentication in Microservice Environments
 
Full lifecycle of a microservice
Full lifecycle of a microserviceFull lifecycle of a microservice
Full lifecycle of a microservice
 
Verifying Microservice Integrations with Contract Testing
Verifying Microservice Integrations with Contract TestingVerifying Microservice Integrations with Contract Testing
Verifying Microservice Integrations with Contract Testing
 
Microservices with Nancy and vs Code
Microservices with Nancy and vs CodeMicroservices with Nancy and vs Code
Microservices with Nancy and vs Code
 
Handling Eventual Consistency in JVM Microservices with Event Sourcing (javao...
Handling Eventual Consistency in JVM Microservices with Event Sourcing (javao...Handling Eventual Consistency in JVM Microservices with Event Sourcing (javao...
Handling Eventual Consistency in JVM Microservices with Event Sourcing (javao...
 
Deploying Microservices as Containers
Deploying Microservices as ContainersDeploying Microservices as Containers
Deploying Microservices as Containers
 
Protocol buffers and Microservices
Protocol buffers and MicroservicesProtocol buffers and Microservices
Protocol buffers and Microservices
 
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
 

Similaire à Vingle tech talk #1

효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
HB Smith에서는 AWS 이렇게 사용한다
HB Smith에서는 AWS 이렇게 사용한다HB Smith에서는 AWS 이렇게 사용한다
HB Smith에서는 AWS 이렇게 사용한다
Jongwon Han
 
AWS CLOUD 2018- 보다 강력한 Serverless, AWS Lambda 기능 확장(안효빈 솔루션즈 아키텍트)
AWS CLOUD 2018- 보다 강력한 Serverless, AWS Lambda 기능 확장(안효빈 솔루션즈 아키텍트)AWS CLOUD 2018- 보다 강력한 Serverless, AWS Lambda 기능 확장(안효빈 솔루션즈 아키텍트)
AWS CLOUD 2018- 보다 강력한 Serverless, AWS Lambda 기능 확장(안효빈 솔루션즈 아키텍트)
Amazon Web Services Korea
 

Similaire à Vingle tech talk #1 (20)

DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)
 
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
 
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
DevOps를 위한 AWS 서비스 및 개발도구 -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나
DevOps를 위한 AWS 서비스 및 개발도구  -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나 DevOps를 위한 AWS 서비스 및 개발도구  -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나
DevOps를 위한 AWS 서비스 및 개발도구 -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
KGC 2013 DevSisters
KGC 2013 DevSistersKGC 2013 DevSisters
KGC 2013 DevSisters
 
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...
사례들로 알아보는 컨테이너, 언제 어떻게 쓰면 좋을까? – 김성수 AWS 솔루션즈 아키텍트, 허준 AWS 어카운트 매니저, 이창명 선데이토...
 
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
 
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
 
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다
20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다
20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다
 
AWS Lambda를 이용한 CI/CD 기법
AWS Lambda를 이용한 CI/CD 기법AWS Lambda를 이용한 CI/CD 기법
AWS Lambda를 이용한 CI/CD 기법
 
HB Smith에서는 AWS 이렇게 사용한다
HB Smith에서는 AWS 이렇게 사용한다HB Smith에서는 AWS 이렇게 사용한다
HB Smith에서는 AWS 이렇게 사용한다
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
AWS CLOUD 2018- 보다 강력한 Serverless, AWS Lambda 기능 확장(안효빈 솔루션즈 아키텍트)
AWS CLOUD 2018- 보다 강력한 Serverless, AWS Lambda 기능 확장(안효빈 솔루션즈 아키텍트)AWS CLOUD 2018- 보다 강력한 Serverless, AWS Lambda 기능 확장(안효빈 솔루션즈 아키텍트)
AWS CLOUD 2018- 보다 강력한 Serverless, AWS Lambda 기능 확장(안효빈 솔루션즈 아키텍트)
 

Vingle tech talk #1

  • 1. VINGLE Front End Managing and deploying service in 5 minutes
  • 3. Before microservice Web Server(Ruby on Rails) Desktop Web Mobile Web Admin 개발자, 기획자, 마케터, 젠킨스 의 얼굴이 될 수 있습니다. 너무 크고 복잡한 프로젝트(Repository) + 서비스 간 극심한 커플링 + 최소 2시간 이상 걸리는 배포, 롤백 Same Repository Same Deploy Same CI
  • 4. 나는 어떻게 빙글을 망가뜨렸나(과거형) • 테스트가 제대로 작성되어 있지 않은 경우 • BackEnd - (API) 부분을 잘못 건드린 경우 • 라이브러리 간 충돌이나 버그가 존재하는 경우 (ex: Rails Sprocket…) • 백엔드가 배포되면 안됐는데 배포를 눌러버린 경우 • + 처음 프로젝트를 봤을 때의 심정 ———>
  • 5. 독립 프론트엔드 서버를 구축시 필요한 사 항들 1. 원래 웹서버와 완벽하게 분리된 환경에서 존재해야 함 2. 빌드, 배포, 테스트, 롤백을 모두 자동화하여 관리할 수 있는 CI 환경 (Jenkins와 같은 CI Tool을 사용) 3. 실시간 변동적인 Scalability 확보 4. 서버 상황에 대한 실시간 Monitoring 환경 확보 5. 서버 Logger와 같은 필수적인 기능들 확보 6. Universal Rendering(isomorphic)이 가능해야 함(Server-side rendering)
  • 7. 독립 서버를 위한 대안 후보들 Static Page NodeJS server AWS Lambda Vingle Mobile Web No Service Vingle Desktop Web
  • 9. Independent NodeJS server • 일반적인 nodeJS 서버(ExpressJS, KoA …) • 유니버설(Isomorphic) 렌더링 • 가변적인 Scalability 확보가 필요함 • 모니터링 및 관리 환경을 설정해야 함 • SSL 및 Cors 등 귀찮은 각종 환경들을 설정해야 함
  • 11. Static Page • index.html와 bundle.JS를 S3에 업로드 • 웹 서버(Nginx) -> CDN -> S3 식으로 앞단에 CDN 배치 • 장/단점 클라이언트 사이드 렌더링 SEO가 보장되지 않음 느린 최초 렌더링 CDN을 통한 모니터링 가능 가변적인 Scalability 확보 가능
  • 12. AWS Lambda? • 이벤트에 응답하여 코드를 실행하고 자동으로 기본 컴퓨팅 리소스를 관리 하는 서버리스 컴퓨팅 서비스 • nodeJS, Java, Python , C# 코드 실행 가능 • 이벤트가 HTTP 요청일 경우 Response를 Customizing 가능
  • 14. AWS Lambda • Universal(isomorphic) rendering • 가변적 scalability 확보 • 모니터링 및 배포 관리 시스템 기본 제공 • Serverless와 AWS CloudFormation을 통한 다중 AWS 서비스 관리 가 능 • SSL, Cors 세팅 등 귀찮은 설정들 기본 설정 • 일반 서버보다 훨씬 저렴한 가격
  • 17. 실제로 보는 CI - CD 적용 이후 업무 프 로세스 New branch Build bundleJS Unit & E2E test Upload bundle to S3 Notify Slack Pull Request is merged Build bundleJS Unit & E2E test Notify Slack Deploy After 30 minutes
  • 18. 1. 새로운 Branch에서 개발을 시작함 2. 새 Branch를 Push하면 새 Jenkins pipeline 생성 3. 자동으로 Build - Test - Demo Branch 생성 4. 이후 Slack으로 노티 실제로 개발자가 하는 일은 새 Branch를 Push하는 것 뿐
  • 20. Demo Branch? 디자이너와의 협업, QA 과정에서의 효율성 Production에서만 확인 가능한 기능들 검증 (Facebook oAuth 등…)
  • 21. Pull Request가 Merge된 이후? 1. 자동으로 다시금 빌드, 테스트를 실행 2. Demo Branch를 통해 마지막 30분 동안 최후의 QA를 할 수 있는 시간을 줌 3. 자동으로 Lambda가 가르키는 타겟 JS파일 주소를 현재 버젼으로 바꿈으로 배포 끝 실제적인 배포는 2분 안에 완료
  • 22. Rollback? 방법 1 가장 최근에 성공했던 배포 Jenkins job 을 돌린다. 안전하고, 2분 안에 다시 롤백 가능 방법 2 AWS Console에 접속해서 Lambda script를 이전에 성공했던 것으로 롤백하게 한다. 즉시 롤백 가능 현재 빙글에서는 원칙적으로 방법 1을 사용하고 있음
  • 23. 모든 건 자동화에 맡기고 놀러가세요 저분은 왜 아마존 티셔츠(…) 행복해진 개발자들