본문 바로가기

CS 스터디

DevOps

주제 선정 이유

- DevOps가 해야 하는 일을 명확히 이해하고, 왜 하는지에 대한 본질적인 부분을 이해하는게 중요하기 때문

- 무엇을 하고, 왜 하는지 궁금

 

 

DevOps(데브옵스)

- 소프트웨어의 개발(Development)과 운영(Operations)의 합성어

- 개발과 운영을 다하는 것이 DevOps가 아닌가? 라고 생각할 수 있지만,

- 현재의 데브옵스는 단순한 개발과 운영의 통합을 의미하는 것이 아님

- 개발팀과 운영팀간의 생각 차이에 대해서 인지하고, 그 간극을 줄여보자는 취지에서 탄생

- 이러한 취지가 지속적으로 발전을 거듭하여 현재는 SW 개발, 더 나아가서 우리의 일에 관한 포괄적인 철학과 방법론으로 발전

 

 

DevOps의 5가지 철학

1. 문화(Culture)

- DevOps를 통해 하나의 문화를 만들어 나감

 

사람

- 사람의 모여 팀이 존재하고, 인원이 몇 명인지, 그 팀의 가치가 무엇인지, 사람들 간의 의사소통이 존재 

- 팀, 인원, 가치, 의사소통

 

일(Task)

- 일을 위한 프로세스와 방법론 존재, 어떤 방식으로 하느냐에 따라서 문화가 완전히 달라짐 

- 프로세스, 방법론

 

서비스

- 서비스의 방향성 혹은 가치에 따라서 문화가 만들어짐

- 서비스의 가치, 성격

 

자원

- SW/HW 와 같은 유무형의 기술도 문화의 한 부분이 될 수 있음 -> 기술의 성숙도가 존재하기 때문 

- H/W, S/W, 기술, 도구

 

시간

- 일정에 따른 변경 가능성 등, 주어진 시간에 따른 퍼포먼스로 기업 문화가 변화하고 진화, 현재 서비스에서 속도라는 단어가 가장 화두

- 일정, 변경 가능성, 회복탄력성, 예측

 

 

올바른 기업 문화를 갖는 것이 중요

좋은 문화를 만드는 것은 굉장히 복잡하고 어려운 문제

 

 

 

2. 자동화(Automation)

- 자동화를 통해 효율성과 빠른 속도를 지향, 안정성 등을 갖출 수 있음

- 프로그래밍 언어와 도구를 통해 자동화를 하고, 재사용 가능한 인프라를 만듬

- 지속적 통합 및 배포를 통해서 변경에 따른 소요 시간을 최소화

- 데브옵스는 변경에 유연하고 탄련적인 서비스를 구축해야 함

- 어떠한 사고에 대해서도 예측하고, 대응할 수 있어야 함

 

인프라 및 보안

- 클라우드, 네트워크, 접근제어, 암호화

 

언어 및 도구

- 프로그래밍 및 도구

 

지속적 통합 / 배포

- CI/CD 파이프라인 구성 고려

 

모니터링

- 모니터링 시스템 및 장애대응

 

3. 측정(Measurement)

- 지표를 측정하여 지속적으로 개선

- 변경사항 발생 시, 항상 측정 -> 예측 불가능한 영역을 최대한 예측 가능한 영역으로 바꿈

- 우리의 방향성에 대해서 항상 깊게 고민하고 의심해야 함

- 어플리케이션 성능, 새발 속도 모니터링

- 지속적으로 나아지고 있는지, 아닌지 측정

- 측정 지표들은 중요한 의사결정들을 추측이 아닌 예측과 확신으로 만들어줌 

 

4. 공유(Sharing)

- 홀로 개발하고 성장하는 시대는 없음 

- 공유를 통해 함께 발전

- 구성원 모두가 대부분의 데이터를 언제든 접근할 수 있고, 확인할 수 있어야 함 -> 언제든 접근 가능한 투명한 데이터

- 지식은 각자 배울 수는 있어도 항상 함께 공유해야 함 -> 지식의 공유 OpenMind

- 개인의 문제가 아닌, 우리의 문제로 인지해야 함 -> 문제 발생시 함께 해결

- 회사의 규모와 인원이 커짐에 따라서, 일의 속도는 반비례하지 않고 가속도 그래프를 그려야 함

- 팀원이 함께하고, 같이 노력해야 가속도 곡선을 그릴 수 있음 -> 일의 가속도

 

5. 축적(File up & Pile up)

- 모든 일의 성공과 실패 결과물들은 항상 축적되어야 함

- 기록을 축적하여 자산을 만들어 나감

 

 

DevOps의 철학 정리

- 어떤 요구사항을 효율적으로 만족시키기 위하여, 일을 자동화하며 변경사항 지표들을 측정하고, 공유하고, 이 모든 결과물들을 지속적으로 축적해 나아가는 문화를 만들어가는 철학, 방법론, 기술

 

 

속도와 효율화

- 현대의 서비스는 너무나도 복잡함

- 우리는 수많은 복잡한 문제들을 DevOps 철학과 방법론으로 풀어나갈 수 있음

 

 

DevOps 엔지니어의 역할

- DevOps 엔지니어가 갖추어야할 철학과 기술은 무엇?

- DevOps의 역할은 무엇?

- DevOps 엔지니어가 되려면 어떻게?

- 훌륭한 DevOps가 되려면 어떤 기술을 갖추고 무엇을 공부?

- 방향성 중요, 올바른 개념과 많이 쓰이는 기술들을 배우는게 중요

 

 

DevOps 엔지니어

- 올바른 DevOps 문화를 위해 서비스 혹은 S/W LifeCycle에서 반복적인 일들을 자동화하고, 기술적 문제 혹은 팀의 차이를 기술적으로 예방하고, 해소시키는 사람

- 다른 역할들에 비해서, DevOps 엔지니어의 역량에 따라서 할 수 있는 일들이 정해짐

- 굉장히 큰 영향력 -> 어떤 기술들과 개념들을 다양한 곳에 적용할 수 있기 때문

- 기획팀, 마케팅의 업무를 자동화한 것도 DevOps 엔지니어의 역할이 될 수 있기 때문

- DevOps 엔지니어들이 주로 하는 일 -> 파이프라인 구성, 빌드 자동화

- DevOps 엔지니어링과 관련된 기술을 다양한 곳에 접목하는 것

 

 

Soft Skill

- 소프트 스킬은 사회 기술, 의사 소통 기술, 성격 또는 성격 특성, 태도, 직업 속성, 소셜 인텔리전스 및 감성 인텔리전스 지수 등의 조합으로, 사람들이 환경을 탐색하고 다른 사람들과 잘 일하는 능력

- 문제를 인식하는 능력, 정확하게 선택과 집중을 구별하는 능력, 결정 및 판단 능력 등

 

1. 문제 인식

- 문제가 무엇이 있는지, 정확한 원인이 무엇인지 파악

 

2. 선택과 집중

- 문제를 적합한 방법을 통해 해결하고, 해결의 우선순위를 올바르게 설정

 

3. 결정

- 수 많은 선택지에 대해서, 추측이 아닌 확신을 갖고 빠르게 결정

 

4. 업의 속성

- 제공하는 서비스의 본질과 가치를 이해

 

5. 사용자

- 사용자를 이해하고, 요구사항에 대해서 빠르게 피드백

 

Technical Skill

- 기술적 스킬은 특정한 일을 효과적으로 수행하는 지식과 능력

- IT 영역에서는 프로그래밍 언어 작성 능력, S/W 디자인, 데이터베이스 및 서버 관리 등 특정한 기술의 지식과 수행 능력

 

1. 프로그래밍

- Go, Python 등, 능숙하게 다를 수 있는 언어는 큰 장점

ex) Go, Python, Node.js

 

2. 운영체제

- Linux와 같은 운영체제를 능숙하게 다르눈 것과 개념을 반드시 알아야 함

ex) Shell, OS metrixs, File System, 7 layers

 

3. 서버관리

- 서버를 관리하는 기술과 운영지식을 통해 신뢰할 수 있는 서비스를 구축

ex) IaC, CI/CD, API, 가용성, 성능 등

 

4. 오픈소스

- 인프라를 이루는 S/W 들을 이해하고, 자동화 도구들을 다룰 수 있어야 함

ex) nginx, Tomcat, MySQL, Redis, Ansible, Terraform 등

 

5. 클라우드

- 퍼블릭 클라우드를 능숙하게 다루고, 직접 구축 및 설계를 할 수 있어야 함

ex) AWS, Azure, GCP, Alibaba 등

 

 

Infrastructure as Code, 코드로써의 인프라

- 인프라를 이루는 서버, 미들웨어 그리고 서빗 등, 인프라 구성요소들을 코드를 통해 구축하는 것

- IaC는 코드로써의 장점, 즉 작성 용이성, 재사용성, 유지보수 등의 장점을 가짐

 

 

Terraform by Hashicorp

- 테라폼은 인프라를 만들고, 변경하고, 기록하는 IaC를 위해 만들어진 도구로써, 문법이 쉬워 비교적 다루기 수비고 사용자가 매우 많아 참고할 수 있는 예제 많음

- AWS, Azure, GCP 같은 퍼블릭 클라우드 뿐만 아니라, 다양한 서비스들 역시 지원