DevOps 기초
1. DevOps 개념과 DevOps가 걸어온 길
DevOps 란?
- Developer + Operation 의 합성어
- 개발과 운영의 경계를 허물고 통합하고자 하는 문화 또는 철학
- 소프트웨어 개발 프로세스와 운영의 모든 단계의 통합과 자동화를 목표로함
DevSecOps 란?
- Developer + Security + Operation 의 합성어
- 소프트웨어 개발 프로세스의 모든 단계를 통합하고 보안까지 포함하도록 확장한 개념
- 소프트웨어 배포에 관여하는 모든 사람들이 보안을 최우선으로 하는 문화
- 개발 / 운영팀 대상 보안 교육
- 보안 이슈 공유 채널 구축
- 보안 사고 대응 플레이북 (playbook)
- 배포 프로세스에 보안감사 / 규정준수 포함
DevOps의 적용 사례
- 넷플릭스 에서는 개발자가 소프트웨어의 모든 단계에 참여할 수 있는 “Full-cycle Developer” 모델을 제시
- 기존의 개발 모델 vs Full-cycle developer model
기존의 개발 모델
Full-cycle developer model
2. DevOps 역할
- DevOps 업무의 주요 대상은 개발자
- 개발자가 운영에 참여할 수 있는 환경과 문화를 제공
- 개발자가 비즈니스 로직에 집중할 수 있도록 지원
DevOps 업무 도메인 - 1
네트워크
- 가상 네트워크 및 물리 네트워크 구성
- 프록시 / VPN 서버 운영
- DNS 서버 운영
클라우드 플랫폼
- 개발자들이 활용할 수 있도록 클라우드 환경 운영 ( 자체 클라우드, 퍼블릭 클라우드)
배포 플랫폼
- GitLab / GitHub등 개발 협업 플랫폼 운영
- CI/CD 파이프라인 시스템 구축 및 운영
- QA 테스트 및 성능 테스트를 위한 환경 제공
- 패키지 저장소 운영 및 배포 산출물 관리
보안 플랫폼
- LDAP, AD, SAML등을 활용하여 통합된 임직원 계정계 운영
- 서버 및 데이터베이스 접근제어 시스템 구축 및 운영
DevOps 업무 도메인 - 2
오케스트레이션 플랫폼
- K8S, ECS, Nomad와 같은 오케스트레이션 시스템 구축 및 운영
- Airflow, Argo Workflows와 같은 워크 플로우 엔진 구축 및 운영
데이터 플랫폼
- MySQL, DynamoDB, Redis와 같은 데이터베이스 구축 및 운영
- RabbitMQ, Kafka, SQS등과 같은 메시징 서비스 구축 및 운영
- 데이터 웨어하우스, BI 대시보드 구축 및 운영
관측 플랫폼
- 로그, 메트릭, 업타임, APM 정보를 관측할 수 있는 중앙화 된 시스템 구축 및 운영
- 주요 이벤트에 대한 알림 시스템 구축
서비스 운영
- 개발자들과 협업하여 서비스 공동 운영
DevOps 팀 핵심 지표 (KPI)
지표 | 설명 |
장애 복구 시간 (MTTR : Mean Time To Recovery) |
얼마나 빠르게 장애 상황에서 복구할 수 있는가? |
변경으로 인한 결함률 (Change Failure Rate) |
변경 사항으로 인한 장애가 얼마나 발생하는가? |
배포 빈도 (Deployment Frequency) |
얼마나 배포를 자주 하는가? |
변경 반영 소요 시간 (Lead Time for Changes) |
변경사항을 프로덕션 배포에 걸리는 소요 시간은 얼마인가? |
기업에서 요구하는 DevOps엔지니어 요건
[담당업무]
- DevOps 기능 개발 솔루션 자동화, 배포, 운영 등 CI/CD 개발 운영
- OS 및 AWS 설정과 리소스 생성을 자동화하여 코드로 관리 (IaC)
- 지속적인 시스템 모니터링을 통한 성능 추적 및 개선, 구축 및 운영
- Container Platform 적용 및 Orchestration 관리
[자격요건]
- 클라우드 관련 개발, 운영 경험자
- CI/CD 및 자동화에 대한 경험이 있으신 분
- 다양한 부서와의 협업에 원활한 커뮤니케이션이 가능하신 분
- 하나 이상의 프로그래밍 언어를 능숙하게 사용 가능 하신 분
- 코드에 대한 문서화가 익숙하신 분
- AWS 인프라 사용에 대한 경험치가 높은 분
[우대사항]
- 리눅스 기반의 시스템 성능 튜닝 및 내부 동작에 대한 깊은 이해가 있으신 분
- 관측 시스템, 배포 시스템을 직접 구축해 보신 경험이 있으신 분
- Docker로 이미지를 만들고 배포해 본 경험이 있으신 분
- AWS Certificate 보유자 국내 개인정보 보호법 및 HIPAA / GDPR 가이드를 준수하는 서비스를 개발한 경험이 있는 분
- 확장성 있는 글로벌(멀티 리전) 서비스를 개발한 경험이 있는 분
- Containerization과 Container Orchestraion Tool에 대한 운영 경험 대규모 트래픽 처리를 위한 인프라 구성 경험이 있으신 분
- 하나 이상의 스크립트 언어 활용 능력
3. Mutable vs Immutable (Pets vs Cattle)
- 가변(Mutable) 인프라와 불변(Immutable) 인프라
Pets vs cattle
pets
- 폐기 할 수 없는 인프라
- 장애 시 전체 점검 / 로그를 사람이 하나하나 확인
- 절대 다운될 수 없는 고유한 시스템
- 일반적으로 수동으로 구축, 관리
cattle
- 폐기할 수 있는 인프라
- 장애시 서버를 단순히 재구동 하거나 자동화를 통해 사람의 개입없이 해결
- 자동화된 도구를 사용
4. terraform 기초와 terraform의 활용
terraform 이란?
HCL 언어 사용
- HashiCorp 사 에서 GO언어 기반으로 개발한 HCL언어로 코드 작성
Reuse 및 테스트 활용
- 재사용 가능한 인프라 코드
- 반복적인 인프라 구성 테스트 진행
다양한 Provider 지원
- AWS, Azure, GCP 등 다양한 Provider 지원
클라이언트 아키텍처
- 별도의 서버구성이 필요 없는 클라이언트 기반 아키텍처만 지원
Immutable Infrastructure
- 환경이 원활하게 변경되는 인프라 구성 가능
인프라 프로비저닝
- IaC 도구 중 인프라 프로비저닝 용도로 사용
Terraform Life Cycle
Init
- terraform init
- 테라폼 구동을 위한 초기화
Plan
- terraform plan
- 인프라 변경 사항 확인
Apply
- terraform apply
- 인프라 변경사항 적용
Destroy
- terraform destroy
- 인프라 리소스 삭제
테라폼의 3가지 형상
- Terraform 구성 소스 : 현재 관리자가 작성 / 수정하고 있는 코드
- Terraform state : 가장 최근에 배포한 테라폼 코드 현상
- 실제 인프라 : 실제로 Cloud 환경에 배포되어 있는 인프라
테라폼 디렉토리 레이아웃
- **main.tf : 프로비저닝할 리소스를 정의함**
- **variables.tf : 소스코드에 사용할 변수들을 저의**
- **outputs.tf : 소스코드에 대한 실행 결과를 정의 및 출력**
- modules : 리소스를 모듈화 한 단위
- **backend.tf : 형상 관리를 하기 위한 설정을 정의**
- **provider.tf : 리소스 제공자와 버전 등을 정의**
테라폼을 사용하는 이유?
- 불변(Immutable)인프라를 위해 사용
- 인프라를 가축(cattles)과 같이 관리
- 프로비저닝과 인프라 재사용에 용이
'DevOps > AWS와 DevOps 기초' 카테고리의 다른 글
AWS 콘솔 사용하기(2) (0) | 2023.02.08 |
---|---|
AWS 콘솔 사용하기(1) (0) | 2023.02.06 |
AWS 계정 생성 하기 (0) | 2023.02.06 |
AWS 주요 서비스 소개 (0) | 2023.02.04 |
클라우드 서비스 개요 (0) | 2023.02.02 |