SlideShare ist ein Scribd-Unternehmen logo
1 von 46
Downloaden Sie, um offline zu lesen
Daily Continuous Deployment를 위한 Custom CLI 개발 및

AWS Elastic Beanstalk에 적용하기
2016. Aug. 13.
한종원 (addnull@gmail.com)
발표자 소개
• 이름: 한종원 (경기도 안양 거주)
• '의미가 있는 일을, 올바르게 하고 싶다.'라는 생각으로 스타트업 시작
• 'Elastic DevOps Engineer'

Python, AWS 환경에서 유연하고(scalability), 장애 복구가 쉬우며

(fail-over), 지속적인 개발 통합(CI)되는 backend infra 개발, 운영
• 현재 택시 빈자리 공유 서비스 '캐빗(Cabbit)'을 만드는

'카니자랩(Kanizsa Lab)'에 backend infra 전반을 담당
2
발표 내용
• 'Daily Continuous Deployment' (이하 'daily CD') 소개 및 장단점
• 요구 사항들
• GitHub repo 'Nova', 'Johanna' 소개 및 Live Demo
• Custom CLI 개발
• 지난 6달간 실제 서비스로 운영 경험
• Wrap Up & QnA
3
발표 내용
• 40장이 넘는 발표 자료 ...
4
'Daily CD' 소개 및 장단점
Daily CD란?
• from Wikipedia

"Continuous delivery is sometimes confused with continuous
deployment. Continuous deployment means that every change is
automatically deployed to production."
• 정의: 매일 자동으로 최신 버전의 소스 코드를 테스트, 패키징, 배포
• 현재 구축 운영하는 시스템 현황
• Server & web client # 실제 배포(deployment)
• Android app # continuous delivery까지만 진행
• iOS app # 아직 미적용 (즉, 사람 손으로...)
• 오늘 발표 내용 범위는 'server'에 한정
6
Daily CD란? (cont.)
• 실제 server/client의 logic code와 deployment code를 분리
7
Daily CD 장단점
• 단점
• 'Daily CD'는 "독립된 하나의 시스템"
• 추가 개발이 필요하며, 추가 유지 보수 대상이 생김
• 기존에 legacy system(daily CD가 없는)에 적용하기

거의 불가능하거나 큰 비용이 요구될 수 있음.

-> 즉, 첫번째 단추를 잘...
• 결국 모두 다 추가 비용 -> 경영진의 설득이 필요
8
Daily CD 장단점 (cont.)
• 장점 (with AWS cloud infra)
• 'human error'를 줄일 수 있다. (<- 자동화의 장점)
• 한번 잘 만들어 두면, 재사용하기 쉽다.

즉, backend infra의 양산화(DV, QA, OP) 가능
• Service/Software의 lifetime이 길어져도 개발, 테스트, 배포 시간을

거의 동일하게 유지
• 새로 입사한 개발자에게 바로 개발 환경을 제공 가능
• 별도의 QA 환경을 원하는 때에만 운영이 가능

-> 즉, 비용 절감
9
Daily CD 장단점 (cont.)
10
요구 사항들
요구 사항들
• 'no service downtime'
• 추가 비용의 최소화
• 문제 발생 시 rollback 또는 hot fix 전략
• log, data 유실 방지
• 사용할 software stack (OS, web server, DB engine, PL 등)
• 'notification' (즉, 'monitoring/alarm')
12
요구 사항들에 대한 답변
• 'no service downtime'

-> AWS Elastic Beanstalk(이하 'EB')의 CNAME swapping
• 추가 비용의 최소화

-> AWS on-demand resource 사용
• 문제 발생 시 rollback 또는 hot fix 전략

-> rollback은 없다. 최소 시간(10분 이내)으로 hot fix를 반영한다.
• log, data 유실 방지

-> AWS EB의 15분 주기의 log rotation 및 S3 upload
13
요구 사항들에 대한 답변 (cont.)
• 사용할 software stack (OS, web server, DB engine, PL 등)

-> Amazon Linux 및 AWS EB 기본 설정

-> RDS 'mysql', python
• 'notification' (즉, 'monitoring/alarm')

-> AWS CloudWatch + Zabbix

-> Atlassian Bamboo (continuous integration server)

-> HipChat / Slack (REST API call)
14
GitHub repo 'Nova', 'Johanna'

소개 및 Live Demo
Live Demo 내용 소개
• Demo의 범위는 'backend infra'로 한정

(Django 기반 API server 'Nova' 1 set 포함)
• 발표에 사용된 Custom CLI의 source code의 GitHub repo
• https://github.com/addnull/nova
• https://github.com/addnull/johanna/tree/0.0.1
16
Live Demo 내용 소개 (cont.)
• https://github.com/addnull/nova
• REST API server with Django. (OpenStack의 'Nova'가 아님)
• Daily CD demo를 위한 sample -> API는 '(GET) /echo/'만 있음
• https://github.com/addnull/johanna/tree/0.0.1
• 실제 (re)provisioning과 daily CD를 위한 python script
• 'provisioning'이란?

아무것도 없는 맨바닥에서 시작해서 실제 서비스 운영 가능한 세트를

구축하는 일.
17
Live Demo 내용 소개 (cont.)
• Live demo 용 backend infra 전체 구조
• Network
• VPC
• public/private subnet
• public/private route table
• internet gateway (for public subnet)
• nat gateway (for private subnet)
• VM (Elastic Beanstalk Environment)
• ELB, EC2 (<- 실제 daily CD 대상)
18
Live Demo 내용 소개 (cont.)
• Live demo 용 backend infra 전체 구조
19
Live Demo 내용 소개 (cont.)
• CNAME Swapping:

-> Daily CD의 핵심

-> 기존 'Nova'를 새로운 'Nova'로 교체 (no downtime)
20
Live Demo 내용 소개 (cont.)
• CNAME Swapping (before)
21
Live Demo 내용 소개 (cont.)
• CNAME Swapping (in progress)
22
Live Demo 내용 소개 (cont.)
• CNAME Swapping (after)
23
'Johanna' command
• command set
• create
• create_vpc
• create_nova
• terminate
• terminate_nova
• terminate_vpc
• terminate_eb_old_environment
24
'Johanna' command (cont.)
• './run.py'
25
'Johanna' command (cont.)
• 'create'

-> 'create_vpc' 실행 후 'create_nova' 실행. (re)provisioning
• 'terminate'

-> 'terminate_nova' 실행 후 'terminate_vpc' 실행. deprovisioning
26
'Johanna' command (cont.)
• 'create_vpc'

-> VPC 구성과 기타(IAM, ssh key) 설정 생성
• 'create_nova'

-> 새로운 'nova'를 생성

-> 기존에 'nova'가 존재한다면, CNAME swapping

-> 즉, daily CD용 command
• 'terminate_nova'

-> 'create_nova'의 반대
• 'terminate_vpc'

-> 'create_vpc'의 반대
27
'Johanna' command (cont.)
• terminate_eb_old_environment

CNAME swap된 이전 Elastic Beanstalk environment를 제거

(아래 이미지에서 왼쪽)
28
'Johanna' command (cont.)
• terminate_eb_old_environment

왜 CNAME swap된 이전 Elastic Beanstalk environment를

바로 제거하지 않는가?

-> local routing table cache 문제
29
Custom CLI 개발
왜 Python인가?
• 발표 자료 30장이 넘어서, 드디어 Python 이야기를 ...
31
왜 Python인가? (cont.)
• 이전에 bash script로 했을때 문제점들

=> SED hell ...

=> JSON string handling
• Chef, Puppet, Ansible을 선택하지 않은 이유

=> simple is best
• Boto/Boto3 대신에 AWS/EB CLI를 사용한 이유

=> 'do not need to reinvent the wheel'
32
Custom CLI 만들기
• 기존의 AWS/EB CLI를 wrapping하는 'run.py'
• '--'를 이용해서 AWS/EB CLI와 'run.py'의 option을 구별

(예: 아래 이미지에서 EB CLI의 '--region')
• AWS CLI 결과는 (대부분) JSON 이지만, EB CLI 결과는 multi-line string

33
AWS CLI =>
EB CLI =>
Custom CLI 만들기 (cont.)
• 기존의 AWS/EB CLI를 wrapping하는 'run.py'
34
AWS CLI EB CLI
Custom CLI 만들기 (cont.)
• 'subprocess.Popen'으로 AWS/EB CLI를 실행
• 'stdout'를 PIPE 설정하면, 결과 내용을 저장할 수 있음.
• 'cwd'를 이용해서 실행 path를 변경할 수 있음.
35
Custom CLI 만들기 (cont.)
• AWS/EB CLI 를 위한 'env' 설정
36
Custom CLI 만들기 (cont.)
• 'subprocess.call'을 사용하지 않은 이유
37
Custom CLI 만들기 (cont.)
• '-f', '--force' option 지원 -> OptionParser를 이용
38
지난 6달간 실제 서비스로 운영 경
험
난 할 수 있다
• 많은 고려 사항들. 잊을 만하면 발생되는 버그.
40
(출처: 한겨례)
Lesson Learned
• 장점
• 패치 작업의 일상화로 인한 심적 부담감이 낮아지고, fail-over가

빠르고 쉬워짐.
• memory leak 문제를 신경쓰지 않음.
• 오랜 기간 서버를 운영할 시에 발생되는 장애가 없어짐

(예: 한달에 한번 발생되는 비정상 동작)
• 새로 입사한 개발자에게 바로 개발 환경을 제공 가능
41
Lesson Learned (cont.)
• 장점
• 별도의 QA 환경을 원하는 때에만 운영이 가능

-> 즉, 비용 절감
• AWS EC2의 최저 사양 t2.nano만으로도 전체 backend infra 구축이

가능해짐.

-> 매일 새로 EC2를 생성하므로 추가 CPU credit을 얻는 것 같은

효과가 발생
42
Lesson Learned (cont.)
• 단점
• AWS 환경, Linux package repository 변화에 따른 예상치 못한 장애

(즉, 가장 빠른 beta tester로서 겪는 문제점)
• Daily CD python script에 대한 유지보수

-> 수정 빈도가 낮은 편이지만, 이전에 왜 이렇게 했는지 의도를

파악하기 어려움
43
Wrap Up
발표 내용 Wrap Up
• 'Daily Continuous Deployment' (이하 'daily CD') 소개 및 장단점
• 요구 사항들
• GitHub repo 'Nova', 'Johanna' 소개 및 Live Demo
• Custom CLI 개발
• 지난 6달간 실제 서비스로 운영 경험
• Wrap Up & QnA
45
Q n A
한종원
addnull@gmail.com
010-9166-6855

Weitere ähnliche Inhalte

Was ist angesagt?

Crawling with AWS Lambda
Crawling with AWS LambdaCrawling with AWS Lambda
Crawling with AWS LambdaSeungho Kim
 
20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Frontend를 Serverle...
20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Frontend를 Serverle...20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Frontend를 Serverle...
20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Frontend를 Serverle...Jongwon Han
 
20180915 HBSmith에서는 Django 이렇게 사용한다
20180915 HBSmith에서는 Django 이렇게 사용한다20180915 HBSmith에서는 Django 이렇게 사용한다
20180915 HBSmith에서는 Django 이렇게 사용한다Jongwon Han
 
Celery의 빛과 그림자
Celery의 빛과 그림자Celery의 빛과 그림자
Celery의 빛과 그림자Minyoung Jeong
 
AWS Summit - AWS를 통한 신뢰성 높은 지속적 배포 및 통합(CD, CI) ᄉ...
AWS Summit - AWS를 통한 신뢰성 높은 지속적 배포 및 통합(CD, CI) ᄉ...AWS Summit - AWS를 통한 신뢰성 높은 지속적 배포 및 통합(CD, CI) ᄉ...
AWS Summit - AWS를 통한 신뢰성 높은 지속적 배포 및 통합(CD, CI) ᄉ...Jongwon Han
 
Docker와 DevOps에서 Serverless와 NoOps로의 여정
Docker와 DevOps에서 Serverless와 NoOps로의 여정Docker와 DevOps에서 Serverless와 NoOps로의 여정
Docker와 DevOps에서 Serverless와 NoOps로의 여정Kyuhyun Byun
 
ALB+EC2 to API gateway + Lambda
ALB+EC2 to API gateway + LambdaALB+EC2 to API gateway + Lambda
ALB+EC2 to API gateway + LambdaKyuhyun Byun
 
Backend server monitoring and alarm system (collectd, graphite, grafana, zabb...
Backend server monitoring and alarm system (collectd, graphite, grafana, zabb...Backend server monitoring and alarm system (collectd, graphite, grafana, zabb...
Backend server monitoring and alarm system (collectd, graphite, grafana, zabb...Jongwon Han
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발현승 배
 
CircleCI로 Serverless API의 CI/CD 환경 구축하기
CircleCI로 Serverless API의 CI/CD 환경 구축하기CircleCI로 Serverless API의 CI/CD 환경 구축하기
CircleCI로 Serverless API의 CI/CD 환경 구축하기Kyuhyun Byun
 
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020AWSKRUG - AWS한국사용자모임
 
DevOps와 자동화
DevOps와 자동화DevOps와 자동화
DevOps와 자동화DONGSU KIM
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
[113]apache zeppelin 이문수
[113]apache zeppelin 이문수[113]apache zeppelin 이문수
[113]apache zeppelin 이문수NAVER D2
 
RDS에서 Aurora PostgreSQL Migration한 후기
RDS에서 Aurora PostgreSQL Migration한 후기RDS에서 Aurora PostgreSQL Migration한 후기
RDS에서 Aurora PostgreSQL Migration한 후기Kyuhyun Byun
 
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례Amazon Web Services Korea
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 

Was ist angesagt? (20)

Crawling with AWS Lambda
Crawling with AWS LambdaCrawling with AWS Lambda
Crawling with AWS Lambda
 
20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Frontend를 Serverle...
20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Frontend를 Serverle...20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Frontend를 Serverle...
20181126 AWS S3, SPA, 그리고 Vue.JS - HBSmith는 어떻게 Frontend를 Serverle...
 
20180915 HBSmith에서는 Django 이렇게 사용한다
20180915 HBSmith에서는 Django 이렇게 사용한다20180915 HBSmith에서는 Django 이렇게 사용한다
20180915 HBSmith에서는 Django 이렇게 사용한다
 
Celery의 빛과 그림자
Celery의 빛과 그림자Celery의 빛과 그림자
Celery의 빛과 그림자
 
AWS Summit - AWS를 통한 신뢰성 높은 지속적 배포 및 통합(CD, CI) ᄉ...
AWS Summit - AWS를 통한 신뢰성 높은 지속적 배포 및 통합(CD, CI) ᄉ...AWS Summit - AWS를 통한 신뢰성 높은 지속적 배포 및 통합(CD, CI) ᄉ...
AWS Summit - AWS를 통한 신뢰성 높은 지속적 배포 및 통합(CD, CI) ᄉ...
 
Aws로 ci하기 안기욱
Aws로 ci하기 안기욱Aws로 ci하기 안기욱
Aws로 ci하기 안기욱
 
Docker와 DevOps에서 Serverless와 NoOps로의 여정
Docker와 DevOps에서 Serverless와 NoOps로의 여정Docker와 DevOps에서 Serverless와 NoOps로의 여정
Docker와 DevOps에서 Serverless와 NoOps로의 여정
 
ALB+EC2 to API gateway + Lambda
ALB+EC2 to API gateway + LambdaALB+EC2 to API gateway + Lambda
ALB+EC2 to API gateway + Lambda
 
Backend server monitoring and alarm system (collectd, graphite, grafana, zabb...
Backend server monitoring and alarm system (collectd, graphite, grafana, zabb...Backend server monitoring and alarm system (collectd, graphite, grafana, zabb...
Backend server monitoring and alarm system (collectd, graphite, grafana, zabb...
 
Redis on AWS
Redis on AWSRedis on AWS
Redis on AWS
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발
 
Ansible과 CloudFormation을 이용한 배포 자동화
Ansible과 CloudFormation을 이용한 배포 자동화Ansible과 CloudFormation을 이용한 배포 자동화
Ansible과 CloudFormation을 이용한 배포 자동화
 
CircleCI로 Serverless API의 CI/CD 환경 구축하기
CircleCI로 Serverless API의 CI/CD 환경 구축하기CircleCI로 Serverless API의 CI/CD 환경 구축하기
CircleCI로 Serverless API의 CI/CD 환경 구축하기
 
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
온라인 주문 서비스를 서버리스 아키텍쳐로 구축하기 - 김태우(Classmethod) :: AWS Community Day Online 2020
 
DevOps와 자동화
DevOps와 자동화DevOps와 자동화
DevOps와 자동화
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
[113]apache zeppelin 이문수
[113]apache zeppelin 이문수[113]apache zeppelin 이문수
[113]apache zeppelin 이문수
 
RDS에서 Aurora PostgreSQL Migration한 후기
RDS에서 Aurora PostgreSQL Migration한 후기RDS에서 Aurora PostgreSQL Migration한 후기
RDS에서 Aurora PostgreSQL Migration한 후기
 
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
[Gaming on AWS] 넥슨 - AWS를 활용한 모바일 게임 서버 개발: 퍼즐 주주의 사례
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 

Ähnlich wie Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기

아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)Brian Hong
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)완철 김
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
Ansible introduction & demo
Ansible introduction & demoAnsible introduction & demo
Ansible introduction & demoYongKi Kim
 
[찾아가는세미나] 클라우드 데이터 가상화솔루션
[찾아가는세미나] 클라우드 데이터 가상화솔루션[찾아가는세미나] 클라우드 데이터 가상화솔루션
[찾아가는세미나] 클라우드 데이터 가상화솔루션해은 최
 
Vingle tech talk #1
Vingle tech talk #1Vingle tech talk #1
Vingle tech talk #1Tylor Shin
 
Windows Kubernetes Deep Dive
Windows Kubernetes Deep DiveWindows Kubernetes Deep Dive
Windows Kubernetes Deep DiveJung Hyun Nam
 
Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현Jinwoong Kim
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스Dan Kang (강동한)
 
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) YoungSu Son
 
Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례Opennaru, inc.
 
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista Community
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AIJoongi Kim
 
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선NAVER D2
 
Source To URL Without Dockerfile
Source To URL Without DockerfileSource To URL Without Dockerfile
Source To URL Without DockerfileWon-Chon Jung
 
무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례Taehyun Kim
 
[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing System
[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing System[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing System
[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing SystemOpenStack Korea Community
 

Ähnlich wie Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기 (20)

아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)
 
KGC 2013 DevSisters
KGC 2013 DevSistersKGC 2013 DevSisters
KGC 2013 DevSisters
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
Ansible introduction & demo
Ansible introduction & demoAnsible introduction & demo
Ansible introduction & demo
 
[찾아가는세미나] 클라우드 데이터 가상화솔루션
[찾아가는세미나] 클라우드 데이터 가상화솔루션[찾아가는세미나] 클라우드 데이터 가상화솔루션
[찾아가는세미나] 클라우드 데이터 가상화솔루션
 
Vingle tech talk #1
Vingle tech talk #1Vingle tech talk #1
Vingle tech talk #1
 
Windows Kubernetes Deep Dive
Windows Kubernetes Deep DiveWindows Kubernetes Deep Dive
Windows Kubernetes Deep Dive
 
Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현Knative로 서버리스 워크로드 구현
Knative로 서버리스 워크로드 구현
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
 
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
 
Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례
 
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AI
 
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선
 
Source To URL Without Dockerfile
Source To URL Without DockerfileSource To URL Without Dockerfile
Source To URL Without Dockerfile
 
무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례
 
[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing System
[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing System[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing System
[OpenStack Days Korea 2016] Track4 - 해외 사례로 보는 OpenStack Billing System
 

Mehr von Jongwon Han

20191226 LEGACYLAND에서 살아남는 법
20191226 LEGACYLAND에서 살아남는 법20191226 LEGACYLAND에서 살아남는 법
20191226 LEGACYLAND에서 살아남는 법Jongwon Han
 
20190518 개발하기 좋은 날
20190518 개발하기 좋은 날20190518 개발하기 좋은 날
20190518 개발하기 좋은 날Jongwon Han
 
20190418 Read Replicas and Django DB Router - AWS Summit Seoul 2019
20190418 Read Replicas and Django DB Router - AWS Summit Seoul 201920190418 Read Replicas and Django DB Router - AWS Summit Seoul 2019
20190418 Read Replicas and Django DB Router - AWS Summit Seoul 2019Jongwon Han
 
20190214 Startup의 한정된 자원(인력, 자금)에서 AWS를 효율적으로 사ᄋ...
20190214 Startup의 한정된 자원(인력, 자금)에서 AWS를 효율적으로 사ᄋ...20190214 Startup의 한정된 자원(인력, 자금)에서 AWS를 효율적으로 사ᄋ...
20190214 Startup의 한정된 자원(인력, 자금)에서 AWS를 효율적으로 사ᄋ...Jongwon Han
 
20180726 AWS KRUG - RDS Aurora에 40억건 데이터 입력하기
20180726 AWS KRUG - RDS Aurora에 40억건 데이터 입력하기20180726 AWS KRUG - RDS Aurora에 40억건 데이터 입력하기
20180726 AWS KRUG - RDS Aurora에 40억건 데이터 입력하기Jongwon Han
 
20180609 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 2주차
20180609 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 2주차20180609 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 2주차
20180609 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 2주차Jongwon Han
 
20180602 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 1주차
20180602 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 1주차20180602 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 1주차
20180602 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 1주차Jongwon Han
 
20180124 스타트업부터 대기업까지 aws와 함께한 7년
20180124 스타트업부터 대기업까지 aws와 함께한 7년20180124 스타트업부터 대기업까지 aws와 함께한 7년
20180124 스타트업부터 대기업까지 aws와 함께한 7년Jongwon Han
 
20180124 naver labs aws network and security
20180124 naver labs aws network and security20180124 naver labs aws network and security
20180124 naver labs aws network and securityJongwon Han
 
20171221 naver labs aws 101
20171221 naver labs aws 10120171221 naver labs aws 101
20171221 naver labs aws 101Jongwon Han
 
20171013 데이터 분석가를 위한 데이터플랫폼 Seminar - Public Cloud 101
20171013 데이터 분석가를 위한 데이터플랫폼 Seminar - Public Cloud 10120171013 데이터 분석가를 위한 데이터플랫폼 Seminar - Public Cloud 101
20171013 데이터 분석가를 위한 데이터플랫폼 Seminar - Public Cloud 101Jongwon Han
 
20170829 HB Smith에서는 AWS 이렇게 사용한다
20170829 HB Smith에서는 AWS 이렇게 사용한다20170829 HB Smith에서는 AWS 이렇게 사용한다
20170829 HB Smith에서는 AWS 이렇게 사용한다Jongwon Han
 
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
 
20170718 hb smith에서는 aws 이렇게 사용한다
20170718 hb smith에서는 aws 이렇게 사용한다20170718 hb smith에서는 aws 이렇게 사용한다
20170718 hb smith에서는 aws 이렇게 사용한다Jongwon Han
 
20170422 HB Smith - Primer workshop
20170422 HB Smith - Primer workshop20170422 HB Smith - Primer workshop
20170422 HB Smith - Primer workshopJongwon Han
 
HB Smith - Primer workshop
HB Smith - Primer workshopHB Smith - Primer workshop
HB Smith - Primer workshopJongwon Han
 
HB Smith - business plan - live hero - public
HB Smith - business plan - live hero - publicHB Smith - business plan - live hero - public
HB Smith - business plan - live hero - publicJongwon Han
 

Mehr von Jongwon Han (17)

20191226 LEGACYLAND에서 살아남는 법
20191226 LEGACYLAND에서 살아남는 법20191226 LEGACYLAND에서 살아남는 법
20191226 LEGACYLAND에서 살아남는 법
 
20190518 개발하기 좋은 날
20190518 개발하기 좋은 날20190518 개발하기 좋은 날
20190518 개발하기 좋은 날
 
20190418 Read Replicas and Django DB Router - AWS Summit Seoul 2019
20190418 Read Replicas and Django DB Router - AWS Summit Seoul 201920190418 Read Replicas and Django DB Router - AWS Summit Seoul 2019
20190418 Read Replicas and Django DB Router - AWS Summit Seoul 2019
 
20190214 Startup의 한정된 자원(인력, 자금)에서 AWS를 효율적으로 사ᄋ...
20190214 Startup의 한정된 자원(인력, 자금)에서 AWS를 효율적으로 사ᄋ...20190214 Startup의 한정된 자원(인력, 자금)에서 AWS를 효율적으로 사ᄋ...
20190214 Startup의 한정된 자원(인력, 자금)에서 AWS를 효율적으로 사ᄋ...
 
20180726 AWS KRUG - RDS Aurora에 40억건 데이터 입력하기
20180726 AWS KRUG - RDS Aurora에 40억건 데이터 입력하기20180726 AWS KRUG - RDS Aurora에 40억건 데이터 입력하기
20180726 AWS KRUG - RDS Aurora에 40억건 데이터 입력하기
 
20180609 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 2주차
20180609 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 2주차20180609 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 2주차
20180609 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 2주차
 
20180602 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 1주차
20180602 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 1주차20180602 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 1주차
20180602 BIT computer - AWS를 활용한 클라우드 기반 웹 개발 1주차
 
20180124 스타트업부터 대기업까지 aws와 함께한 7년
20180124 스타트업부터 대기업까지 aws와 함께한 7년20180124 스타트업부터 대기업까지 aws와 함께한 7년
20180124 스타트업부터 대기업까지 aws와 함께한 7년
 
20180124 naver labs aws network and security
20180124 naver labs aws network and security20180124 naver labs aws network and security
20180124 naver labs aws network and security
 
20171221 naver labs aws 101
20171221 naver labs aws 10120171221 naver labs aws 101
20171221 naver labs aws 101
 
20171013 데이터 분석가를 위한 데이터플랫폼 Seminar - Public Cloud 101
20171013 데이터 분석가를 위한 데이터플랫폼 Seminar - Public Cloud 10120171013 데이터 분석가를 위한 데이터플랫폼 Seminar - Public Cloud 101
20171013 데이터 분석가를 위한 데이터플랫폼 Seminar - Public Cloud 101
 
20170829 HB Smith에서는 AWS 이렇게 사용한다
20170829 HB Smith에서는 AWS 이렇게 사용한다20170829 HB Smith에서는 AWS 이렇게 사용한다
20170829 HB Smith에서는 AWS 이렇게 사용한다
 
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
 
20170718 hb smith에서는 aws 이렇게 사용한다
20170718 hb smith에서는 aws 이렇게 사용한다20170718 hb smith에서는 aws 이렇게 사용한다
20170718 hb smith에서는 aws 이렇게 사용한다
 
20170422 HB Smith - Primer workshop
20170422 HB Smith - Primer workshop20170422 HB Smith - Primer workshop
20170422 HB Smith - Primer workshop
 
HB Smith - Primer workshop
HB Smith - Primer workshopHB Smith - Primer workshop
HB Smith - Primer workshop
 
HB Smith - business plan - live hero - public
HB Smith - business plan - live hero - publicHB Smith - business plan - live hero - public
HB Smith - business plan - live hero - public
 

Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기

  • 1. Daily Continuous Deployment를 위한 Custom CLI 개발 및
 AWS Elastic Beanstalk에 적용하기 2016. Aug. 13. 한종원 (addnull@gmail.com)
  • 2. 발표자 소개 • 이름: 한종원 (경기도 안양 거주) • '의미가 있는 일을, 올바르게 하고 싶다.'라는 생각으로 스타트업 시작 • 'Elastic DevOps Engineer'
 Python, AWS 환경에서 유연하고(scalability), 장애 복구가 쉬우며
 (fail-over), 지속적인 개발 통합(CI)되는 backend infra 개발, 운영 • 현재 택시 빈자리 공유 서비스 '캐빗(Cabbit)'을 만드는
 '카니자랩(Kanizsa Lab)'에 backend infra 전반을 담당 2
  • 3. 발표 내용 • 'Daily Continuous Deployment' (이하 'daily CD') 소개 및 장단점 • 요구 사항들 • GitHub repo 'Nova', 'Johanna' 소개 및 Live Demo • Custom CLI 개발 • 지난 6달간 실제 서비스로 운영 경험 • Wrap Up & QnA 3
  • 4. 발표 내용 • 40장이 넘는 발표 자료 ... 4
  • 5. 'Daily CD' 소개 및 장단점
  • 6. Daily CD란? • from Wikipedia
 "Continuous delivery is sometimes confused with continuous deployment. Continuous deployment means that every change is automatically deployed to production." • 정의: 매일 자동으로 최신 버전의 소스 코드를 테스트, 패키징, 배포 • 현재 구축 운영하는 시스템 현황 • Server & web client # 실제 배포(deployment) • Android app # continuous delivery까지만 진행 • iOS app # 아직 미적용 (즉, 사람 손으로...) • 오늘 발표 내용 범위는 'server'에 한정 6
  • 7. Daily CD란? (cont.) • 실제 server/client의 logic code와 deployment code를 분리 7
  • 8. Daily CD 장단점 • 단점 • 'Daily CD'는 "독립된 하나의 시스템" • 추가 개발이 필요하며, 추가 유지 보수 대상이 생김 • 기존에 legacy system(daily CD가 없는)에 적용하기
 거의 불가능하거나 큰 비용이 요구될 수 있음.
 -> 즉, 첫번째 단추를 잘... • 결국 모두 다 추가 비용 -> 경영진의 설득이 필요 8
  • 9. Daily CD 장단점 (cont.) • 장점 (with AWS cloud infra) • 'human error'를 줄일 수 있다. (<- 자동화의 장점) • 한번 잘 만들어 두면, 재사용하기 쉽다.
 즉, backend infra의 양산화(DV, QA, OP) 가능 • Service/Software의 lifetime이 길어져도 개발, 테스트, 배포 시간을
 거의 동일하게 유지 • 새로 입사한 개발자에게 바로 개발 환경을 제공 가능 • 별도의 QA 환경을 원하는 때에만 운영이 가능
 -> 즉, 비용 절감 9
  • 10. Daily CD 장단점 (cont.) 10
  • 12. 요구 사항들 • 'no service downtime' • 추가 비용의 최소화 • 문제 발생 시 rollback 또는 hot fix 전략 • log, data 유실 방지 • 사용할 software stack (OS, web server, DB engine, PL 등) • 'notification' (즉, 'monitoring/alarm') 12
  • 13. 요구 사항들에 대한 답변 • 'no service downtime'
 -> AWS Elastic Beanstalk(이하 'EB')의 CNAME swapping • 추가 비용의 최소화
 -> AWS on-demand resource 사용 • 문제 발생 시 rollback 또는 hot fix 전략
 -> rollback은 없다. 최소 시간(10분 이내)으로 hot fix를 반영한다. • log, data 유실 방지
 -> AWS EB의 15분 주기의 log rotation 및 S3 upload 13
  • 14. 요구 사항들에 대한 답변 (cont.) • 사용할 software stack (OS, web server, DB engine, PL 등)
 -> Amazon Linux 및 AWS EB 기본 설정
 -> RDS 'mysql', python • 'notification' (즉, 'monitoring/alarm')
 -> AWS CloudWatch + Zabbix
 -> Atlassian Bamboo (continuous integration server)
 -> HipChat / Slack (REST API call) 14
  • 15. GitHub repo 'Nova', 'Johanna'
 소개 및 Live Demo
  • 16. Live Demo 내용 소개 • Demo의 범위는 'backend infra'로 한정
 (Django 기반 API server 'Nova' 1 set 포함) • 발표에 사용된 Custom CLI의 source code의 GitHub repo • https://github.com/addnull/nova • https://github.com/addnull/johanna/tree/0.0.1 16
  • 17. Live Demo 내용 소개 (cont.) • https://github.com/addnull/nova • REST API server with Django. (OpenStack의 'Nova'가 아님) • Daily CD demo를 위한 sample -> API는 '(GET) /echo/'만 있음 • https://github.com/addnull/johanna/tree/0.0.1 • 실제 (re)provisioning과 daily CD를 위한 python script • 'provisioning'이란?
 아무것도 없는 맨바닥에서 시작해서 실제 서비스 운영 가능한 세트를
 구축하는 일. 17
  • 18. Live Demo 내용 소개 (cont.) • Live demo 용 backend infra 전체 구조 • Network • VPC • public/private subnet • public/private route table • internet gateway (for public subnet) • nat gateway (for private subnet) • VM (Elastic Beanstalk Environment) • ELB, EC2 (<- 실제 daily CD 대상) 18
  • 19. Live Demo 내용 소개 (cont.) • Live demo 용 backend infra 전체 구조 19
  • 20. Live Demo 내용 소개 (cont.) • CNAME Swapping:
 -> Daily CD의 핵심
 -> 기존 'Nova'를 새로운 'Nova'로 교체 (no downtime) 20
  • 21. Live Demo 내용 소개 (cont.) • CNAME Swapping (before) 21
  • 22. Live Demo 내용 소개 (cont.) • CNAME Swapping (in progress) 22
  • 23. Live Demo 내용 소개 (cont.) • CNAME Swapping (after) 23
  • 24. 'Johanna' command • command set • create • create_vpc • create_nova • terminate • terminate_nova • terminate_vpc • terminate_eb_old_environment 24
  • 26. 'Johanna' command (cont.) • 'create'
 -> 'create_vpc' 실행 후 'create_nova' 실행. (re)provisioning • 'terminate'
 -> 'terminate_nova' 실행 후 'terminate_vpc' 실행. deprovisioning 26
  • 27. 'Johanna' command (cont.) • 'create_vpc'
 -> VPC 구성과 기타(IAM, ssh key) 설정 생성 • 'create_nova'
 -> 새로운 'nova'를 생성
 -> 기존에 'nova'가 존재한다면, CNAME swapping
 -> 즉, daily CD용 command • 'terminate_nova'
 -> 'create_nova'의 반대 • 'terminate_vpc'
 -> 'create_vpc'의 반대 27
  • 28. 'Johanna' command (cont.) • terminate_eb_old_environment
 CNAME swap된 이전 Elastic Beanstalk environment를 제거
 (아래 이미지에서 왼쪽) 28
  • 29. 'Johanna' command (cont.) • terminate_eb_old_environment
 왜 CNAME swap된 이전 Elastic Beanstalk environment를
 바로 제거하지 않는가?
 -> local routing table cache 문제 29
  • 31. 왜 Python인가? • 발표 자료 30장이 넘어서, 드디어 Python 이야기를 ... 31
  • 32. 왜 Python인가? (cont.) • 이전에 bash script로 했을때 문제점들
 => SED hell ...
 => JSON string handling • Chef, Puppet, Ansible을 선택하지 않은 이유
 => simple is best • Boto/Boto3 대신에 AWS/EB CLI를 사용한 이유
 => 'do not need to reinvent the wheel' 32
  • 33. Custom CLI 만들기 • 기존의 AWS/EB CLI를 wrapping하는 'run.py' • '--'를 이용해서 AWS/EB CLI와 'run.py'의 option을 구별
 (예: 아래 이미지에서 EB CLI의 '--region') • AWS CLI 결과는 (대부분) JSON 이지만, EB CLI 결과는 multi-line string
 33 AWS CLI => EB CLI =>
  • 34. Custom CLI 만들기 (cont.) • 기존의 AWS/EB CLI를 wrapping하는 'run.py' 34 AWS CLI EB CLI
  • 35. Custom CLI 만들기 (cont.) • 'subprocess.Popen'으로 AWS/EB CLI를 실행 • 'stdout'를 PIPE 설정하면, 결과 내용을 저장할 수 있음. • 'cwd'를 이용해서 실행 path를 변경할 수 있음. 35
  • 36. Custom CLI 만들기 (cont.) • AWS/EB CLI 를 위한 'env' 설정 36
  • 37. Custom CLI 만들기 (cont.) • 'subprocess.call'을 사용하지 않은 이유 37
  • 38. Custom CLI 만들기 (cont.) • '-f', '--force' option 지원 -> OptionParser를 이용 38
  • 39. 지난 6달간 실제 서비스로 운영 경 험
  • 40. 난 할 수 있다 • 많은 고려 사항들. 잊을 만하면 발생되는 버그. 40 (출처: 한겨례)
  • 41. Lesson Learned • 장점 • 패치 작업의 일상화로 인한 심적 부담감이 낮아지고, fail-over가
 빠르고 쉬워짐. • memory leak 문제를 신경쓰지 않음. • 오랜 기간 서버를 운영할 시에 발생되는 장애가 없어짐
 (예: 한달에 한번 발생되는 비정상 동작) • 새로 입사한 개발자에게 바로 개발 환경을 제공 가능 41
  • 42. Lesson Learned (cont.) • 장점 • 별도의 QA 환경을 원하는 때에만 운영이 가능
 -> 즉, 비용 절감 • AWS EC2의 최저 사양 t2.nano만으로도 전체 backend infra 구축이
 가능해짐.
 -> 매일 새로 EC2를 생성하므로 추가 CPU credit을 얻는 것 같은
 효과가 발생 42
  • 43. Lesson Learned (cont.) • 단점 • AWS 환경, Linux package repository 변화에 따른 예상치 못한 장애
 (즉, 가장 빠른 beta tester로서 겪는 문제점) • Daily CD python script에 대한 유지보수
 -> 수정 빈도가 낮은 편이지만, 이전에 왜 이렇게 했는지 의도를
 파악하기 어려움 43
  • 45. 발표 내용 Wrap Up • 'Daily Continuous Deployment' (이하 'daily CD') 소개 및 장단점 • 요구 사항들 • GitHub repo 'Nova', 'Johanna' 소개 및 Live Demo • Custom CLI 개발 • 지난 6달간 실제 서비스로 운영 경험 • Wrap Up & QnA 45