DevOps 치트 시트

실습 랩을 통해 DevOps 학습하기

실습 랩과 실제 시나리오를 통해 DevOps 관행을 학습하십시오. LabEx 는 필수 운영, 인프라 관리, CI/CD 파이프라인, 컨테이너화, 모니터링 및 자동화를 다루는 포괄적인 DevOps 과정을 제공합니다. 애플리케이션 배포, 코드형 인프라 관리, 워크플로 자동화 및 효율적인 소프트웨어 제공을 위한 최신 DevOps 관행 구현 방법을 학습합니다.

Infrastructure as Code (IaC)

Terraform: 인프라 프로비저닝

선언적 구성 언어를 사용하여 인프라를 정의하고 프로비저닝합니다.

# Terraform 초기화
terraform init
# 인프라 변경 사항 계획
terraform plan
# 인프라 변경 사항 적용
terraform apply
# 인프라 파괴
terraform destroy
# 구성 파일 형식 지정
terraform fmt
# 구성 유효성 검사
terraform validate
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

terraform plan은 무엇을 수행합니까?
즉시 인프라 변경 사항을 적용합니다
적용하지 않고 변경될 내용을 보여줍니다
모든 인프라를 파괴합니다
Terraform 을 초기화합니다

Ansible: 구성 관리

애플리케이션 배포 및 구성 관리를 자동화합니다.

# 플레이북 실행
ansible-playbook site.yml
# 특정 호스트에서 플레이북 실행
ansible-playbook -i inventory site.yml
# 구문 확인
ansible-playbook --syntax-check site.yml
# 특정 사용자로 실행
ansible-playbook -u ubuntu site.yml

CloudFormation: AWS 네이티브 IaC

JSON/YAML 템플릿을 사용하여 AWS 리소스를 프로비저닝합니다.

# 스택 생성
aws cloudformation create-stack --stack-name mystack --template-body file://template.yml
# 스택 업데이트
aws cloudformation update-stack --stack-name mystack --template-body file://template.yml
# 스택 삭제
aws cloudformation delete-stack --stack-name mystack

컨테이너 관리

Docker: 컨테이너화

컨테이너에서 애플리케이션을 빌드, 배송 및 실행합니다.

# 이미지 빌드
docker build -t myapp:latest .
# 컨테이너 실행
docker run -d -p 8080:80 myapp:latest
# 실행 중인 컨테이너 나열
docker ps
# 컨테이너 중지
docker stop container_id
# 컨테이너 제거
docker rm container_id

Kubernetes: 컨테이너 오케스트레이션

대규모로 컨테이너화된 애플리케이션을 배포하고 관리합니다.

# 구성 적용
kubectl apply -f deployment.yml
# 파드 가져오기
kubectl get pods
# 배포 확장
kubectl scale deployment myapp --replicas=5
# 로그 보기
kubectl logs pod_name
# 리소스 삭제
kubectl delete -f deployment.yml
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

kubectl apply -f deployment.yml은 무엇을 수행합니까?
YAML 파일에 정의된 리소스를 생성하거나 업데이트합니다
클러스터의 모든 리소스를 삭제합니다
새 리소스만 생성합니다
적용하지 않고 생성될 내용을 보여줍니다

Helm: Kubernetes 패키지 관리자

차트를 사용하여 Kubernetes 애플리케이션을 관리합니다.

# 차트 설치
helm install myrelease stable/nginx
# 릴리스 업그레이드
helm upgrade myrelease stable/nginx
# 릴리스 나열
helm list
# 릴리스 제거
helm uninstall myrelease

CI/CD 파이프라인 관리

Jenkins: 빌드 자동화

지속적 통합 파이프라인을 설정하고 관리합니다.

// Jenkinsfile 예시
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean compile'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
        stage('Deploy') {
            steps {
                sh './deploy.sh'
            }
        }
    }
}

GitHub Actions: 클라우드 CI/CD

GitHub 리포지토리에서 직접 워크플로를 자동화합니다.

# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Setup Node
        uses: actions/setup-node@v2
        with:
          node-version: '14'
      - run: npm install
      - run: npm test

GitLab CI: 통합된 DevOps

GitLab 의 내장 CI/CD 기능을 사용하여 완전한 DevOps 워크플로를 구현합니다.

# .gitlab-ci.yml
stages:
  - build
  - test
  - deploy
build_job:
  stage: build
  script:
    - echo "Building the app"
test_job:
  stage: test
  script:
    - echo "Running tests"

버전 관리 및 협업

Git: 버전 관리 시스템

변경 사항을 추적하고 코드 개발에 협업합니다.

# 리포지토리 복제
git clone https://github.com/user/repo.git
# 상태 확인
git status
# 변경 사항 추가
git add .
# 변경 사항 커밋
git commit -m "Add feature"
# 원격으로 푸시
git push origin main
# 최신 변경 사항 가져오기
git pull origin main
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

git pullgit fetch의 차이점은 무엇입니까?
차이점이 없습니다
git pull 은 변경 사항을 푸시하고, git fetch 는 변경 사항을 가져옵니다
git pull 은 로컬에서 작동하고, git fetch 는 원격에서 작동합니다
git fetch 는 병합 없이 변경 사항을 다운로드하고, git pull 은 변경 사항을 다운로드하고 병합합니다

브랜치 관리

다양한 개발 스트림 및 릴리스를 관리합니다.

# 브랜치 생성
git checkout -b feature-branch
# 브랜치 병합
git merge feature-branch
# 브랜치 나열
git branch -a
# 브랜치 전환
git checkout main
# 브랜치 삭제
git branch -d feature-branch
# 이전 커밋으로 되돌리기
git reset --hard HEAD~1
# 커밋 기록 보기
git log --oneline

GitHub: 코드 호스팅 및 협업

리포지토리를 호스팅하고 협업 개발을 관리합니다.

# GitHub CLI 명령어
gh repo create myrepo
gh repo clone user/repo
gh pr create --title "New feature"
gh pr list
gh pr merge 123
gh issue create --title "Bug report"
gh release create v1.0.0
# 풀 리퀘스트 생성
git push -u origin feature-branch
# 그런 다음 GitHub/GitLab에서 PR 생성

코드 검토 및 품질

동료 검토 및 자동화된 검사를 통해 코드 품질을 보장합니다.

# 커밋 전 훅 예시
#!/bin/sh
# 커밋 전에 테스트 실행
npm test
if [ $? -ne 0 ]; then
  echo "Tests failed"
  exit 1
fi

모니터링 및 관측 가능성

Prometheus: 메트릭 수집

시계열 데이터를 사용하여 시스템 및 애플리케이션 메트릭을 모니터링합니다.

# CPU 사용량
cpu_usage_percent{instance="server1"}
# 메모리 사용량
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
# HTTP 요청 속도
rate(http_requests_total[5m])
# 경고 규칙 예시
ALERT HighCPUUsage
  IF cpu_usage_percent > 80
  FOR 5m

Grafana: 시각화 대시보드

모니터링 데이터를 위한 대시보드 및 시각화를 생성합니다.

# 대시보드 생성
curl -X POST http://admin:admin@localhost:3000/api/dashboards/db \
  -H "Content-Type: application/json" \
  -d @dashboard.json
# 대시보드 가져오기
curl http://admin:admin@localhost:3000/api/dashboards/uid/dashboard-uid

ELK Stack: 로그 관리

인프라 전반의 로그 데이터를 수집, 검색 및 분석합니다.

# Elasticsearch 쿼리
# 로그 검색
GET /logs/_search
{
  "query": {
    "match": {
      "message": "error"
    }
  }
}
# Logstash 구성
input {
  file {
    path => "/var/log/app.log"
  }
}
filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}" }
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
  }
}

애플리케이션 성능 모니터링

애플리케이션 성능 및 사용자 경험 메트릭을 추적합니다.

# New Relic 에이전트 설정
# 애플리케이션에 추가
require 'newrelic_rpm'
# Datadog 메트릭
from datadog import DogStatsdClient
statsd = DogStatsdClient('localhost', 8125)
statsd.increment('web.requests')
statsd.histogram('web.response_time', 0.75)

클라우드 플랫폼 관리

AWS CLI: Amazon Web Services

명령줄에서 AWS 서비스와 상호 작용합니다.

# AWS CLI 구성
aws configure
# EC2 인스턴스 나열
aws ec2 describe-instances
# S3 버킷 생성
aws s3 mb s3://my-bucket-name
# Lambda 함수 배포
aws lambda create-function --function-name myfunction --runtime python3.8 --role arn:aws:iam::123456789:role/lambda-role --handler lambda_function.lambda_handler --zip-file fileb://function.zip
# 실행 중인 서비스 나열
aws ecs list-services --cluster my-cluster

Azure CLI: Microsoft Azure

Azure 리소스 및 서비스를 관리합니다.

# Azure 로그인
az login
# 리소스 그룹 생성
az group create --name myResourceGroup --location eastus
# 가상 머신 생성
az vm create --resource-group myResourceGroup --name myVM --image Ubuntu2204 --admin-username azureuser --generate-ssh-keys
# 웹 앱 나열
az webapp list

Google Cloud: GCP

Google Cloud Platform 에서 애플리케이션을 배포하고 관리합니다.

# GCP 인증
gcloud auth login
# 프로젝트 설정
gcloud config set project my-project-id
# App Engine 애플리케이션 배포
gcloud app deploy
# Compute Engine 인스턴스 생성
gcloud compute instances create my-instance --zone=us-central1-a
# Kubernetes 클러스터 관리
gcloud container clusters create my-cluster --num-nodes=3

멀티 클라우드 관리

여러 클라우드 공급자에 걸쳐 리소스를 관리하기 위한 도구입니다.

# Pulumi (멀티 클라우드 IaC)
import pulumi_aws as aws
import pulumi_gcp as gcp
# AWS S3 버킷 생성
bucket = aws.s3.Bucket("my-bucket")
# GCP 스토리지 버킷 생성
gcp_bucket = gcp.storage.Bucket("my-gcp-bucket")

보안 및 비밀 관리

HashiCorp Vault: 비밀 관리

HashiCorp Vault 는 비밀에 안전하게 액세스하기 위한 도구입니다. 비밀은 API 키, 암호 또는 인증서와 같이 액세스를 엄격하게 제어하려는 모든 것입니다.

# 비밀 쓰기
vault kv put secret/myapp/config username=myuser password=mypassword
# 비밀 읽기
vault kv get secret/myapp/config
# 비밀 삭제
vault kv delete secret/myapp/config
# 인증 방법 활성화
vault auth enable kubernetes
# 정책 생성
vault policy write myapp-policy myapp-policy.hcl

보안 스캐닝: Trivy 및 SonarQube

컨테이너 및 코드를 보안 취약점에 대해 스캔합니다.

# Trivy 컨테이너 스캔
trivy image nginx:latest
# 파일 시스템 스캔
trivy fs /path/to/project
# SonarQube 분석
sonar-scanner -Dsonar.projectKey=myproject -Dsonar.sources=. -Dsonar.host.url=http://localhost:9000

SSL/TLS 인증서 관리

보안 통신을 위한 SSL 인증서를 관리합니다.

# Certbot을 사용한 Let's Encrypt
certbot --nginx -d example.com
# 인증서 갱신
certbot renew
# 인증서 만료 확인
openssl x509 -in cert.pem -text -noout | grep "Not After"
# 자체 서명 인증서 생성
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

컨테이너 보안

컨테이너화된 애플리케이션 및 런타임 환경을 보호합니다.

# 비루트 사용자로 컨테이너 실행
docker run --user 1000:1000 myapp
# 이미지 취약점 스캔
docker scan myapp:latest
# Distroless 이미지 사용
FROM gcr.io/distroless/java:11
COPY app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

성능 최적화

시스템 성능 모니터링

서버 관리, 배포 설정 또는 프로덕션에서 방금 발생한 문제 해결 등, 이 명령어들은 더 빠르고 스마트하게 작업하는 데 도움이 됩니다.

# CPU 및 메모리 사용량
htop
# 디스크 사용량
df -h
# 네트워크 연결
netstat -tulpn
# 프로세스 모니터링
ps aux | grep process_name
# 시스템 부하
uptime
# 메모리 세부 정보
free -h

애플리케이션 성능 튜닝

애플리케이션 성능 및 리소스 활용률을 최적화합니다.

# JVM 성능 모니터링
jstat -gc -t PID 1s
# Node.js 성능
node --inspect app.js
# 데이터베이스 쿼리 최적화
EXPLAIN ANALYZE SELECT * FROM table WHERE condition;
# Nginx 성능 튜닝
nginx -t && nginx -s reload

부하 테스트 및 벤치마킹

다양한 부하 조건에서 애플리케이션 성능을 테스트합니다.

# Apache Bench
ab -n 1000 -c 10 http://example.com/
# wrk HTTP 벤치마킹
wrk -t12 -c400 -d30s http://example.com/
# Artillery 부하 테스트
artillery run load-test.yml
# Kubernetes 수평 포드 자동 스케일러
kubectl autoscale deployment myapp --cpu-percent=70 --min=1 --max=10

데이터베이스 성능

데이터베이스 성능 및 쿼리를 모니터링하고 최적화합니다.

# MySQL 성능
SHOW PROCESSLIST;
SHOW STATUS LIKE 'Threads_connected';
# PostgreSQL 모니터링
SELECT * FROM pg_stat_activity;
# Redis 모니터링
redis-cli --latency
redis-cli info memory

DevOps 도구 설치

패키지 관리자

시스템 패키지 관리자를 사용하여 도구를 설치합니다.

# Ubuntu/Debian
apt update && apt install -y docker.io kubectl terraform
# CentOS/RHEL
yum install -y docker kubernetes-client terraform
# macOS Homebrew
brew install docker kubectl terraform ansible

컨테이너 런타임 설치

Docker 및 컨테이너 오케스트레이션 도구를 설정합니다.

# Docker 설치
curl -fsSL https://get.docker.com | sh
systemctl start docker
systemctl enable docker
# Docker Compose 설치
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

클라우드 CLI 도구

주요 클라우드 공급자를 위한 명령줄 인터페이스를 설치합니다.

# AWS CLI
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip && ./aws/install
# Azure CLI
curl -sL https://aka.ms/InstallAzureCLIDeb | bash
# Google Cloud SDK
curl https://sdk.cloud.google.com | bash

환경 구성

환경 변수 관리

다양한 환경 전반에서 구성을 안전하게 관리합니다.

# .env 파일 예시
DATABASE_URL=postgresql://user:pass@localhost/db
API_KEY=your-api-key-here
ENVIRONMENT=production
# 환경 변수 로드
export $(cat .env | xargs)
# Docker 환경 변수
docker run -e NODE_ENV=production -e API_KEY=secret myapp
# Kubernetes configmap
kubectl create configmap app-config --from-env-file=.env

서비스 검색 및 구성

서비스 검색 및 동적 구성을 관리합니다.

# Consul 서비스 등록
consul services register myservice.json
# 서비스 상태 가져오기
consul health service web
# Etcd 키-값 저장소
etcdctl put /config/database/host localhost
etcdctl get /config/database/host

개발 환경 설정

컨테이너를 사용하여 일관된 개발 환경을 설정합니다.

# 개발 Dockerfile
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "run", "dev"]
# 개발용 Docker Compose
version: '3.8'
services:
  app:
    build: .
    ports:
      - '3000:3000'
    volumes:
      - .:/app
      - /app/node_modules
  database:
    image: postgres:13
    environment:
      POSTGRES_DB: myapp

프로덕션 환경 강화

프로덕션 환경을 보호하고 최적화합니다.

# Systemd 서비스 구성
[Unit]
Description=My Application
After=network.target
[Service]
Type=simple
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/start
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target

자동화 및 오케스트레이션

Ansible 을 사용한 인프라 자동화

인프라 프로비저닝 및 구성 관리를 자동화합니다.

# Ansible 플레이북 예시
---
- hosts: webservers
  become: yes
  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present
    - name: Start nginx
      service:
        name: nginx
        state: started
        enabled: yes
    - name: Deploy application
      copy:
        src: /local/app
        dest: /var/www/html

워크플로 오케스트레이션

복잡한 워크플로 및 데이터 파이프라인을 오케스트레이션합니다.

# Apache Airflow DAG 예시
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime

dag = DAG('data_pipeline',
          start_date=datetime(2023, 1, 1),
          schedule_interval='@daily')

extract = BashOperator(task_id='extract_data',
                       bash_command='extract.sh',
                       dag=dag)
transform = BashOperator(task_id='transform_data',
                         bash_command='transform.sh',
                         dag=dag)
extract >> transform

이벤트 기반 자동화

시스템 이벤트 및 웹훅을 기반으로 자동화를 트리거합니다.

# GitHub 웹훅 핸들러
#!/bin/bash
if [ "$1" == "push" ]; then
  git pull origin main
  docker build -t myapp .
  docker run -d --name myapp-$(date +%s) myapp
fi
# Prometheus alertmanager 웹훅
curl -X POST http://webhook-handler/deploy \
  -H "Content-Type: application/json" \
  -d '{"service": "myapp", "action": "restart"}'

ChatOps 통합

협업 자동화를 위해 DevOps 작업을 채팅 플랫폼과 통합합니다.

# Slack 봇 명령어 예시
/deploy myapp to production
/rollback myapp to v1.2.3
/scale myapp replicas=5
/status infrastructure
# Microsoft Teams 웹훅
curl -H "Content-Type: application/json" \
  -d '{"text": "Deployment completed successfully"}' \
  $TEAMS_WEBHOOK_URL

관련 링크