주제 선정 이유
- 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 같은 퍼블릭 클라우드 뿐만 아니라, 다양한 서비스들 역시 지원