layout: false class: inverse # Docker & DevOps ### 도커와 데브옵스 .logo-wrapper.right.right-bottom.list-unstyled[ - [https://aluc.io](https://aluc.io) - [me@aluc.io](mailto:me@aluc.io) ] --- # $ whoami .left-half[ ``` { nickname: 'aluc', site: 'https://aluc.io', email: 'me@aluc.io', } ``` ] .right-half.list-unstyled[ ![ops](img/new-avatar.png) .center[**aluc**] ] --- # Table of Contents 1. Docker 1. Dev vs Ops 1. 전통적인 환경에 DevOps(Docker) 적용 1. DevOps 란? .footnote[.text[구체적인 사례와 함께 **Docker** 와 **DevOps** 에 대해 알아봅시다]] --- class: middle .center.width-img-40[![docker](./img/docker-official.svg)] .footnote[.text[**Docker**는 리눅스 **컨테이너** 기술로 **격리된 애플리케이션 실행환경**을 제공해 주는 툴입니다]] --- # What is the Container? ![container](./img/container.png) .footnote[.text[네! 이런 **컨테이너** 에서 따온 겁니다. 서로 격리된 컨테이너 안에 실행 가능한 애플리케이션이 들어있습니다]] --- # Isolation .margin-top-3em.center[![docker](./img/isolation.png)] .footnote[.text[**격리**는 서버 한대에 동시에 여러 애플리케이션을 실행 시킬때 유용합니다]] --- # VM vs Container .center[![docker](./img/vm-vs-container.png)] .footnote[.text[**도커**가 사용하는 **컨테이너**는 기존 가상머신과 비교했을때 **경량**이고 **성능도 우수**합니다]] --- class: page-group-img-without-header-2 ![dockerhub](./img/Docker_Pulls.jpg) .footnote[.text[또 누구라도 도커 이미지를 빌드하여 **도커 허브**에 올릴 수 있는데 앱 배포 과정도 크게 개선되었습니다]] --- class: page-group-img-without-header-2 ![dockerhub](./img/Docker_Pulls2.jpg) .footnote[.text[이제는 **도커**를 못 들어본 사람이 없을 정도로 많이 쓰이고 사실상 컨테이너 툴의 표준이 되었습니다]] --- class: middle # Docker # Build, Ship, and Run Any App, Anywhere .footnote[.text[앱 실행에 필요한 모든 것을 담아 **이미지**로 만들고 **업로드** 하고 어디서든 **컨테이너** 형태로 구동 시킵니다]] --- class: middle # Build ``` $ docker build -t my-name/my-awesome-server:v1 . ``` .footnote[.text[**프로그램 언어**나 **프레임워크**에 관계 없이 뭐든지 **도커 이미지**로 만들 수 있고]] --- class: middle # Ship ``` $ docker push my-name/my-awesome-server:v1 ``` .footnote[.text[원하는 이미지 저장소에 업로드(**Push**) 하고]] --- class: middle # Run ``` $ docker run my-name/my-awesome-server:v1 ``` .footnote[.text[Push 된 **이미지**를 어디서든 내려받아 **컨테이너**로 즉시 실행합니다]] --- class: middle, center # DEMO .footnote[.text[잠시 데모를 보신 후 다음 장 부터는 **데브옵스** 에 대해 알아보겠습니다]] --- class: page-group-margin-after-h1 # Development vs Operations .left-half[ ### 개발팀 - SW 엔지니어 (프로그래머) ] .right-half[ ### 운영팀 - 네트워크 엔지니어 - 시스템 엔지니어 ] .footnote[.text[제품을 만들어 비지니스 하기 위해 누군가는 **개발**을 누군가는 **운영**을 해야합니다]] --- background-image: url(./img/dev-vs-ops.jpg) .footnote[.text[Dev 와 Ops 를 소개합니다]] --- class: h1-has-margin-bottom, center-content # Dev 와 Ops 의 숙명적 충돌 **Dev**는 **변경**된 코드를 **빠르게** 서비스에 적용하기를 원함 VS **Ops**는 **안정적**으로 서비스를 **운영**하기를 원함 .footnote[.text[그리고 이 **Dev** 와 **Ops** 는 서로 상충되는 목표를 가지는 것 처럼 보입니다]] --- # 개발과 운영 입장 .left-half.list-unstyled[ .speech-bubble[ - 전 서비스 개발자에요. - 유저에게 멋진 기능을 보여줄래요~ ] ![dev](img/dev.png) .center[**Dev**] ] .right-half.list-unstyled[ .speech-bubble[ - 전 시스템 운영 엔지니어에요. - 안정적인 서비스를 책임져요~ ] ![ops](img/ops.png) .center[**Ops**] ] .footnote[.text[개발과 운영의 입장을 가상의 대화를 통해 알아봅시다]] --- # 개발과 운영 입장 .left-half.list-unstyled[ .speech-bubble[ - 새로운 기능이 추가 되었습니다. - 정말 멋진 기능이고 유저가 좋아할겁니다! ] ![dev](img/dev.png) .center[**Dev**] ] .right-half.list-unstyled[ .speech-bubble[ - 안정성이 먼저 입니다. - 새 기능이 문제 없는지 충분히 검증 안되면 서비스 못나갑니다. ] ![ops](img/ops.png) .center[**Ops**] ] --- # 개발과 운영 입장 .left-half.list-unstyled[ .speech-bubble[ - 엄청 중요한 패치입니다. - 최대한 빨리 적용해서 고쳐야 합니다. ] ![dev](img/dev.png) .center[**Dev**] ] .right-half.list-unstyled[ .speech-bubble[ - 그러게 왜 버그를 만들어요. - 지금 패치하면 스케쥴 다 꼬입니다. 다음주에 하시죠. ] ![ops](img/ops.png) .center[**Ops**] ] --- # 개발과 운영 입장 .left-half.list-unstyled[ .speech-bubble[ - 이번 업데이트에 새로운 모듈을 써서 성능을 개선했습니다. - 이것 저것 설치해주세요. ] ![dev](img/dev.png) .center[**Dev**] ] .right-half.list-unstyled[ .speech-bubble[ - 서비스에 문제 생기면 어쩌려구요. - 다른 서비스도 영향 받을 수 있습니다. 쓰던거 쓰세요. ] ![ops](img/ops.png) .center[**Ops**] ] --- # 개발과 운영 입장 .left-half.list-unstyled[ .speech-bubble[ - 후....... 답답한 운영! - 복지부동에다 새로운 기술의 중요성을 몰라! ] ![dev](img/dev.png) .center[**Dev**] ] .right-half.list-unstyled[ .speech-bubble[ - 그렇게 기술에 자신 있으면 버그나 좀 줄이시지! - 장애대응 님이 하실거임? ] ![ops](img/ops.png) .center[**Ops**] ] --- background-image: url(./img/fight-dev-ops.png) background-size: cover background-position: 0px 0px .footnote[.text[누구의 잘못이고 이들은 왜 충돌할 수 밖에 없는 걸까요?]] --- class: page-group-only-title, middle, center ~~**Dev**는 **변경**된 코드를 **빠르게** 서비스에 적용하기를 원함~~ ~~**Ops**는 **안정적**으로 서비스를 **운영**하기를 원함~~ The goal of both **Dev** and **Ops** is to **enable** the business .footnote[.text[회사 경영자로 빙의(憑依)하여 생각해보면 이 둘의 목표는 단지 **비지니스**를 **가능**하게 하는 것이죠]] --- class: page-group-only-title, middle, center # ["세상이 달라졌습니다"![link](./img/link.svg)][devops_slide] .footnote[.text[문제는 비지니스엔 항상 변화가 필요하다는 것입니다]] --- background-image: url(./img/fight-dev-ops.png) background-size: cover background-position: 0px 0px .footnote[.text[그리고 이 변화는 높은 확률로 서비스 장애의 근본 원인이었던 것 이었죠]] --- class: h1-has-margin-bottom, center-content # Two options 서비스의 안정성을 위해 변화를 **거부**하던지 or **ㅇㅇ**를 바꿔 변화가 필요한 만큼 자주 일어나는 것을 **허용**할 것인지 .footnote[.text[이제 두가지 옵션이 있습니다. 깊은 고민에 빠져있을 때 구원자가 나타났습니다]] --- class: page-cloud # Cloud 의 등장 ![cloud](./img/cloud.png) .footnote[.text[**누구나 쉽게** 인프라 구축을 가능케 한 **클라우드** 의 등장은 **Dev** vs **Ops** 충돌 구도에 변화를 주었습니다]] --- # 기존 IDC 환경 - 서버 설치, OS 설치, 네트워크 설정, 심지어 물리적 자원 까지 관리 필요 # Cloud 환경 - 클릭 몇번에 또는 API 콜을 통해 인프라 자원 생성 및 설정 가능 .footnote[.text[**SW 엔지니어**가 운영판에 뛰어들었고 개발과 운영 롤의 경계가 모호해졌습니다]] --- # DevOps 의 등장 ![loop](./img/devops-loop.png) .footnote[.text[이 SW 엔지니어들이 하는 일을 **데브옵스**라 부르기 시작했고 뭔가 만병통치약 같은 느낌이 듭니다]] --- # Traditional Enterprise JavaBeans Service - **Dev:** 개발 - **Dev:** 소스코드를 Build 하여 WAR 패키징 - **Dev:** WAR 파일을 S3 에 업로드 - --- - **Ops:** S3 의 WAR 파일을 각각의 인스턴스에 복사 - **Ops:** WAR 파일을 JBoss 서버에 배포 - **Ops:** Apache Web 서버를 관리 .footnote[.text[도대체 **데브옵스**가 뭘까요? 전통적인 환경과 비교하며 알아봅시다]] --- class: page-group-keynote .slideImg[![img](./img/devops/devops.001.png)] .footnote[.text[WEB - WAS - DB 계층으로 구성되어 있습니다. 인스턴스 안에 서버들을 띄워 볼까요?]] --- class: page-group-keynote .slideImg[![img](./img/devops/devops.002.png)] .footnote[.text[각 인스턴스 종류마다 특정 서버 조합을 띄우기 위한 종속성이 관리되어야 합니다]] --- class: page-group-keynote .slideImg[![img](./img/devops/devops.002.png)] .footnote[.text[서버 조합들은 트래픽, 인스턴스의 성능, 비용, 고가용성을 고려하여 결정된 것 들입니다]] --- class: page-group-keynote .slideImg[![img](./img/devops/devops.003.png)] .footnote[.text[WEB 서버가 WAS 서버에게 트래픽을 전달하기 위해선 ⚙️ 서버가 ★ 서버들의 IP를 알고 있어야 합니다]] --- class: page-group-keynote .slideImg[![img](./img/devops/devops.004.png)] .footnote[.text[★ 서버의 트래픽이 증가하여 B WAS 인스턴스를 확장 시켰지만 아직 트래픽을 받을 수 없습니다]] --- class: page-group-keynote .slideImg[![img](./img/devops/devops.005.png)] .footnote[.text[⚙️ 서버가 알고있는 ★ 서버의 IP 정보를 업데이트 한 뒤 ⚙️ 를 재부팅 시켜야 트래픽을 받을 수 있습니다]] --- class: page-group-keynote .slideImg[![img](./img/devops/devops.006.png)] .footnote[.text[만약 장애가 발생한 WAS 인스턴스로 트래픽이 전달 된다면 유저가 서비스 장애를 겪을 수 있습니다]] --- class: page-group-keynote .slideImg[![img](./img/devops/devops.007.png)] .footnote[.text[WEB 인스턴스 어딘가에 있는 ★ 서버의 IP 정보 **상태**를 업데이트하여 해결 해야 합니다]] --- class: page-group-keynote .slideImg[![img](./img/devops/devops.008.png)] .footnote[.text[이러한 구조가 여러 샤드(Shard)로 나뉘어져 있고 이제 관리해야할 **상태**는 더 많아졌습니다]] --- class: page-group-keynote .slideImg[![img](./img/devops/devops.008.png)] .footnote[.text[이런 복잡한 환경은 이제 숙련된 운영자들의 섬세한 작업이 필요한 영역이 되었습니다]] --- # 개선 포인트 1. 관리해야할 상태(**State**) 가 많다 -> 휴먼에러 포인트가 많다 1. WAS 서버가 추가, 제거 될 때마다 WEB 의 상태(**State**)가 변경되어야함 1. 상태(**State**)가 많아 인프라 구조를 유연하게 변경 & 개선하기 어렵다 1. 복잡한 환경이 되어 자주 배포를 할 수 없다 (**배포 주기가 길다**) 1. ★ 의 트래픽이 증가하여 **B 인스턴스를 추가**했을때 ◆ 도 함께 증가한다 (**비효율**) 1. 트래픽 상황의 변화에 따라 어떤 인스턴스는 놀고 어떤 인스턴스는 바쁘다 (**비효율**) .footnote[.text[**DevOps** 가 적용되지 않은 환경을 살펴본 SW 엔지니어들이 발견한 개선점 들입니다]] --- # 프로그래머 같은 작업의 반복을 참을 수 없도록 진화한 종족 .center.full-width-img[![programmer](./img/programmer.png)] .footnote[.text[**SW 엔지니어**들은 그들이 해오던 방식으로 문제를 해결하기 시작했습니다]] --- # DevOps Tool .center.full-width-img[![programmer](./img/main-qimg-6ca8588397df22f65dbd126d55550651-c.jpg)] .footnote[.text[개발과 운영에 필요한 툴들을 만들고 사용했습니다]] --- # DevOps Tool .center.full-width-img-10[![programmer](./img/periodic-table-of-devops-tools-v3.png)] .footnote[.text[이러한 툴들은 특성에 따라 개발/운영 사이클 전 과정을 커버합니다]] --- class: page-group-keynote .slideImg[![img](./img/devops/devops.009.png)] .footnote[.text[이제 **Stateful** 자원이었던 인스턴스는 **Stateless** 자원이 되어 상태 관리가 필요 없어졌는데요]] --- class: page-group-keynote .slideImg[![img](./img/devops/devops.010.png)] .footnote[.text[서버 실행에 필요한 모든 것이 외부와 격리된 컨테이너안으로 패키징되었기 때문입니다]] --- class: page-group-keynote .slideImg[![img](./img/devops/devops.011.png)] .footnote[.text[컨테이너 3~4개까지는 도커 명령어를 사용해서 한땀 한땀 하는 것도 괜찮습니다]] --- class: page-group-img-without-header-3 background-image: url(./img/lotsocontainers.jpg) background-size: cover # But... 😱 --- class: page-group-img-without-header-3 background-image: url(./img/container-fail.jpg) .footnote[.text[까딱하다간 서비스의 장애가 생길 수 있는데요]] --- # 프로그래머 같은 작업의 반복을 참을 수 없도록 진화한 종족 .center.full-width-img[![programmer](./img/programmer.png)] .footnote[.text[SW 엔지니어들은 그들이 해오던 방식으로 문제를 해결하기 시작했습니다]] --- # Container Orchestration .margin-top-3em.center[![contestants](./img/contestants.png)] .footnote[.text[컨테이너 배포와 관리를 자동화 해주는 **컨테이너 오케스트레이션** 툴이 등장하였습니다]] --- background-image: url(./img/orchestra.jpg) .footnote[.text[연주가들을 지휘하는 오케스트라의 지휘자처럼 오케스트레이션 툴은 **컨테이너**들을 관리합니다]] --- ### 절차적 방법: 무엇을 어떻게 해야 할 지. **(How)** ``` $ docker run -d my-awesome-server:v1 $ docker run -d my-awesome-server:v1 $ docker run -d my-awesome-server:v1 // or for( i=0; i<3; i++;) { exec("docker run -d my-awesome-server:v1") } ``` ### 선언적 방법: 원하는 것이 무엇 인지. **(What)** ``` web-server: image: my-awesome-server:v1 count: 3 ``` .footnote[.text[**절차적**인 방법으로 관리했던 컨테이너를 **선언적**인 방법으로 관리 할 수 있게 되었습니다]] --- class: page-group-keynote-2 # Container definition .configure[ ``` environment: PRD servers: ⚙️ : image: web-server:v1 count: 3 ◼: image: store-server:v1.0 count: 4 ●: image: vas-server:v2.3.2 count: 3 ★: image: star-server:v2 count: 3 ♦: image: mktweb-server:v0.8 count: 4 ▲: image: ureca-server:v5.0.3 count: 2 ``` ] .slideImg[![img](./img/devops/devops.009.png)] .footnote[.text[왼쪽의 **정의 파일**만 있으면 오케스트레이션 툴이 자동으로 컨테이너를 배포 할 수 있습니다]] --- class: page-group-keynote-2 # Automatic Bin packing .configure[ ``` environment: PRD servers: ⚙️ : image: web-server:v1 count: 3 ◼: image: store-server:v1.0 count: 4 ●: image: vas-server:v2.3.2 count: 3 ★: image: star-server:v2 count: 3 ♦: image: mktweb-server:v0.8 count: 4 ▲: image: ureca-server:v5.0.3 count: 2 ``` ] .slideImg[![img](./img/devops/devops.012.png)] .footnote[.text[**빈 패킹** 기능은 자원 요구 사항 및 기타 제약 조건에 따라 효율적으로 컨테이너를 배치합니다]] --- class: page-group-keynote-2 # Cluster .configure[ ``` environment: PRD servers: ⚙️ : image: web-server:v1 count: 3 ◼: image: store-server:v1.0 count: 4 ●: image: vas-server:v2.3.2 count: 3 ★: image: star-server:v2 count: 3 ♦: image: mktweb-server:v0.8 count: 4 ▲: image: ureca-server:v5.0.3 count: 2 ``` ] .slideImg[![img](./img/devops/devops.013.png)] .footnote[.text[가상 네트워크인 **클러스터** 안에 속한 컨테이너들은 마치 하나의 서버에 있는 것처럼 통신 할 수 있습니다]] --- class: page-group-keynote-2 # Service discovery and load balancing .configure[ ``` environment: PRD servers: ⚙️ : image: web-server:v1 count: 3 ◼: image: store-server:v1.0 count: 4 ●: image: vas-server:v2.3.2 count: 3 ★: image: star-server:v2 count: 3 ♦: image: mktweb-server:v0.8 count: 4 ▲: image: ureca-server:v5.0.3 count: 2 ``` ] .slideImg[![img](./img/devops/devops.014.png)] .footnote[.text[IP 주소 대신 **DNS** 로 통신하기 때문에 다른 서버의 접속 정보를 관리 할 필요도 없습니다]] --- class: page-group-keynote-2 # Horizontal scaling .configure[ ``` environment: PRD servers: ⚙️ : image: web-server:v1 count: 3 ◼: image: store-server:v1.0 count: 4 ●: image: vas-server:v2.3.2 count: 3 ★: image: star-server:v2 count: 3 scaling: cpu-percent: 80 max: 10 min: 2 ♦: image: mktweb-server:v0.8 count: 4 ▲: image: ureca-server:v5.0.3 count: 2 ``` ] .slideImg[![img](./img/devops/devops.014.png)] .footnote[.text[선언적인 방법으로 오토 스케일링 설정을 정의해 두면 자동으로 서버를 확장해줍니다]] --- class: page-group-keynote-2 # Horizontal scaling .configure[ ``` environment: PRD servers: ⚙️ : image: web-server:v1 count: 3 ◼: image: store-server:v1.0 count: 4 ●: image: vas-server:v2.3.2 count: 3 ★: image: star-server:v2 count: 3 scaling: cpu-percent: 80 max: 10 min: 2 ♦: image: mktweb-server:v0.8 count: 4 ▲: image: ureca-server:v5.0.3 count: 2 ``` ] .slideImg[![img](./img/devops/devops.015.png)] .footnote[.text[새롭게 추가된 컨테이너의 접속정보는 오케스트레이션 툴의 DNS 서버에 자동으로 추가됩니다]] --- class: page-group-keynote-2 # Self-healing .configure[ ``` environment: PRD servers: ⚙️ : image: web-server:v1 count: 3 ◼: image: store-server:v1.0 count: 4 ●: image: vas-server:v2.3.2 count: 3 ★: image: star-server:v2 count: 3 scaling: cpu-percent: 80 max: 10 min: 2 ♦: image: mktweb-server:v0.8 count: 4 ▲: image: ureca-server:v5.0.3 count: 2 ``` ] .slideImg[![img](./img/devops/devops.016.png)] .footnote[.text[장애 발생시에도 내부 DNS 정보를 업데이트 하여 장애난 컨테이너로 트래픽을 보내지 않게 하며]] --- class: page-group-keynote-2 # Self-healing .configure[ ``` environment: PRD servers: ⚙️ : image: web-server:v1 count: 3 ◼: image: store-server:v1.0 count: 4 ●: image: vas-server:v2.3.2 count: 3 ★: image: star-server:v2 count: 3 scaling: cpu-percent: 80 max: 10 min: 2 ♦: image: mktweb-server:v0.8 count: 4 ▲: image: ureca-server:v5.0.3 count: 2 ``` ] .slideImg[![img](./img/devops/devops.017.png)] .footnote[.text[정의된 상태를 만족시키기 위해 자동으로 정상 동작하는 인스턴스에 컨테이너를 띄워 복구합니다]] --- # Monitoring, Deployment Strategies, ... .bigimg[![img](./img/deployment-strategies.png)] .footnote[.text[그 밖의 여러 기능의 지원으로 **안정성**을 희생시키지 않으면서 **더 자주** 배포 할 수 있습니다]] --- # What Docker Can Do For Your Business .center[![img](./img/6-graph.png)] .footnote[.text[도커를 사용하면 제품을 **3배 더 빠르게** 시장에 출시할 수 있습니다~~라는 설명이 도커 사이트에 있습니다~~]] --- # Cycle Time - DevOps 의 주요 **측정 지표** - 하나의 요건이 발의 부터 **고객에게 전달**되어 완료 하기까지 걸린 시간 - 배포 주기가 짧을 수록 평균 **Cycle time** 이 감소하고 **배치 크기**가 작아짐 - **Cycle time** 이 작을 수록 고객에게 **가치 전달**이 빨라짐 - **배치 크기** 가 작을 수록 **Rollout(배포)/Rollback** 의 부담이 감소 .left-half[ ![img](./img/cycletime1.png) .center[**Traditional**] ] .right-half[ ![img](./img/cycletime2.png) .center[**DevOps**] ] .footnote[.text[**자주 배포**하면 **고객**은 **만족**하고 **개발자**의 삶의 질은 **윤택**해집니다]] --- # The Solution Delivery Pipeline .center.img80[![img](./img/solution-s-curve.png)] .footnote[.text[제품 개발/운영 사이클 전체에 **데브옵스**를 적용하면 충분히 가능한 일 입니다]] --- class: middle # Conway's law - 1967년 프로그래머 멜빈 콘웨이가 제안한 법칙 - 소프트웨어의 구조는 설계하는 조직의 커뮤니케이션 구조를 따라간다 .footnote[.text[**조직의 구조** 또한 데브옵스 도입시 매우 중요한 요소입니다]] --- class: page-group-only-title, center # ["Culture"![link](./img/link.svg)][10deploy_slide] ![finger1](./img/fingerpointing1.png) .footnote[.text[**문화**도 빼놓을 순 없죠]] --- class: page-group-only-title, center # ["Culture"![link](./img/link.svg)][10deploy_slide] ![finger1](./img/fingerpointing2.png) .footnote[.text[특히 한국의 기업에서 이 문화 바꾸기는 가장 중요하고 동시에 가장 어려운 부분이라 생각합니다]] --- class: h1-has-margin-bottom, center-content # Two options 서비스의 안정성을 위해 변화를 **거부**하던지 or **ㅇㅇ**를 바꿔 변화가 필요한 만큼 자주 일어나는 것을 **허용**할 것인지 .footnote[.text[앞에 나왔던 선택지를 다시 살펴봅시다. ㅇㅇ에 들어 갈 말은 무엇 일까요?]] --- class: h1-has-margin-bottom, center-content # Two options 서비스의 안정성을 위해 변화를 **거부**하던지 or **도구**와 **문화**를 바꿔 변화가 필요한 만큼 자주 일어나는 것을 **허용**할 것인지 .footnote[.text[다른 기업에서는 어떤 선택지를 골랐을까요?]] --- class: page-group-research # The current state and adoption of DevOps .source[출처: Unisphere Research (2016.9.9)] ![research-1](./img/research-1.png) .footnote[.text[이미 **데브옵스**를 도입 했거나 1년 안에 도입 계획이 있다고 답 한 비율이 **73%** 나 되었습니다]] --- # The current state and adoption of DevOps .source[출처: Unisphere Research (2016.9.9)] ![research-9](./img/research-9.png) .footnote[.text[데브옵스의 성공적인 도입을 위해 **경영진의 지원**과 **유연한 가용** 자원이 가장 중요하다고 꼽았습니다]] --- class: middle # DevOps 란? .list-unstyled[ - 서비스를 신속하게 시장에 제공 할 수 있도록 - **조직**의 역량을 향상시키는 **문화**, **철학**, **방식** 및 **도구**의 **조합** ] .footnote[.text[그리고 오늘날 **데브옵스**는 이렇게 정의됩니다]] --- # Get Started - 새롭게 시작하는 프로젝트에 도입 - IDC 에서 Cloud 환경으로 이주하는 프로젝트에 도입 - 개발 운영 인력이 함께 하는 DevOps TF 조직 - 배포 요청 단위의 결재 프로세스 개선 필요: - As Is: ㅇ월 ㅇ일 ㅇ 개의 요건이 배포됨 - To Be: ㅇㅇㅇ 요건이 ㅇ월 ㅇ일 까지 배포됨 - DevOps 툴 세미나 및 DevOps 엔지니어 양성 - 생산성을 증가시키고 문화에 영향을 주는 DevOps 툴 부터 도입하기(Git, Docker) .footnote[.text[데브옵스를 처음 시작 한다면 무엇을 어디서에서부터 해야 할지 생각해 봤습니다]] --- class: page-group-reference # References - https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html - https://subicura.com/remark/kubernetes-intro.html - https://www.youtube.com/watch?v=LdOe18KhtT4 - https://www.slideshare.net/chingu94/devops-62712241 - https://www.slideshare.net/ds5apn/dev-ops-2013041801pdf - https://www.slideshare.net/taehyunkim73700/ndc17-devops-devops-6 - https://www.slideshare.net/ssuser2f0173/devops-41731364 - http://bcho.tistory.com/817 - https://blog.docker.com/2016/04/the-modern-software-supply-chain-runs-on-docker/ - https://lenditkr.github.io/infrastructure/deploy-2/ - https://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr - http://www.toad.co.kr/sub/sub04_02.php?mode=view&idx=49 - https://www.devops.ch/2017/05/10/devops-explained/ - https://www.slideshare.net/Urbancode/continuous-delivery-in-the-enterprise - https://dzone.com/articles/continuous-delivery-vs-continuous-deployment-an-ov - https://www.docker.com/why-docker - https://coveralls.io/ - http://www.toad.co.kr/sub/sub04_02.php?mode=view&idx=49 - https://www.youtube.com/watch?v=F1-UEIG7u5g - https://www.facebook.com/jtbcnews/videos/1891617474231161/ --- class: page-group-reference # Image source - https://best-coloring.com/ - https://www.youtube.com/watch?v=Yn_4OZ-P2cM - http://www.kyosu.net/news/articleView.html?idxno=16235 - https://cloud.google.com/containers/?authuser=0&hl=ko - https://xebialabs.com/the-ultimate-devops-tool-chest/ - https://techbeacon.com/10-companies-killing-it-devops - https://medium.com/@neonrocket/devops-is-a-culture-not-a-role-be1bed149b0 - https://ieeexplore.ieee.org/document/7883285/ - https://sherryummen.in/tag/docker/ - https://www.slideshare.net/codedellemc/code-webinar-kubernetes-overview-and-16-update-with-matthew-de-lio - https://medium.com/devopslinks/an-overall-view-on-docker-ecosystem-containers-moby-swarm-linuxkit-containerd-kubernetes-5e4972a6a1e8 - https://www.slideshare.net/KarlIsenberg/container-orchestration-wars-2017-edition - https://feathericons.com/ - https://ds5apn.wordpress.com/2014/12/28/backup-dev-kthcorp-com-devops-new-culture/ --- class: middle, center # Thank you --- ### 조지다 <iframe width="740" height="452" src="https://www.youtube.com/embed/VS03V1x-Pfo?start=10&end=38" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe> .footnote[.text[문화, 철학... 이런 **데브옵스**의 정의가 너무 추상적이라 다른 말이 없을까 한번 생각해 보았습니다]] --- class: middle .header-with-tiny[ 저에게 더 와 닿는 # DevOps 란? ] .list-unstyled[ - 서비스 개발/운영시의 **비지니스 요구사항**을 - 사람을 조져서 뽑아내는 것이 아닌 **엔지니어링의 힘**으로 해결해나가는 것 ] --- class: middle, center # Thank you # Thank you [devops_slide]: https://www.slideshare.net/chingu94/devops-62712241 [10deploy_slide]: https://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr/71-Thank_you