이미지 로딩 중...
CodeDeck AI
2025. 11. 8. · 5 Views
DevOps 핵심 개념 완벽 정리
DevOps의 핵심 개념과 실전 도구를 코드로 배워봅니다. Docker, CI/CD, Infrastructure as Code 등 실무에서 꼭 필요한 DevOps 기술을 실습 코드와 함께 설명합니다.
들어가며
이 글에서는 DevOps 핵심 개념 완벽 정리에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- Dockerfile_기본_구조
- Docker_Compose_멀티_컨테이너
- GitHub_Actions_CI_파이프라인
- Kubernetes_Pod_배포
- Terraform_인프라_코드화
- Ansible_자동화_스크립트
- Prometheus_모니터링_설정
- GitOps_배포_자동화
- 헬스체크_엔드포인트
- 환경변수_설정_관리
1. Dockerfile_기본_구조
개요
Docker 컨테이너를 생성하기 위한 Dockerfile의 기본 구조입니다. 베이스 이미지부터 애플리케이션 실행까지의 과정을 정의합니다.
코드 예제
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "app.py"]
설명
Python 베이스 이미지를 사용하여 작업 디렉토리를 설정하고, 의존성을 설치한 후 애플리케이션을 실행합니다. 8000번 포트를 노출합니다.
2. Docker_Compose_멀티_컨테이너
개요
여러 서비스를 함께 실행하기 위한 Docker Compose 설정입니다. 웹 애플리케이션과 데이터베이스를 함께 관리합니다.
코드 예제
version: '3.8'
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
설명
웹 서비스는 현재 디렉토리에서 빌드하고, PostgreSQL 데이터베이스는 공식 이미지를 사용합니다. 환경변수로 비밀번호를 설정합니다.
3. GitHub_Actions_CI_파이프라인
개요
코드 푸시 시 자동으로 테스트를 실행하는 CI 파이프라인입니다. 지속적 통합의 핵심 개념을 구현합니다.
코드 예제
name: CI
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: pip install -r requirements.txt
- run: pytest tests/
설명
코드가 푸시될 때마다 자동으로 의존성을 설치하고 테스트를 실행합니다. 테스트 실패 시 배포를 방지할 수 있습니다.
4. Kubernetes_Pod_배포
개요
Kubernetes에서 애플리케이션을 배포하기 위한 Pod 정의입니다. 컨테이너 오케스트레이션의 기본 단위입니다.
코드 예제
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: web
image: myapp:1.0
ports:
- containerPort: 8000
설명
myapp이라는 이름의 Pod를 생성하고, 컨테이너 이미지를 지정합니다. 8000번 포트로 서비스를 제공합니다.
5. Terraform_인프라_코드화
개요
Infrastructure as Code(IaC)를 구현하는 Terraform 예제입니다. 클라우드 리소스를 코드로 관리합니다.
코드 예제
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "WebServer"
}
}
설명
AWS EC2 인스턴스를 코드로 정의합니다. AMI ID와 인스턴스 타입을 지정하여 자동으로 서버를 프로비저닝할 수 있습니다.
6. Ansible_자동화_스크립트
개요
서버 설정을 자동화하는 Ansible playbook입니다. 반복 작업을 코드로 관리하여 일관성을 보장합니다.
코드 예제
---
- hosts: webservers
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
- name: Start Nginx
service:
name: nginx
state: started
설명
웹서버 그룹에 Nginx를 설치하고 시작합니다. 여러 서버에 동일한 설정을 일괄 적용할 수 있습니다.
7. Prometheus_모니터링_설정
개요
애플리케이션 메트릭을 수집하는 Prometheus 설정입니다. 시스템 상태를 실시간으로 모니터링합니다.
코드 예제
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'myapp'
static_configs:
- targets: ['localhost:8000']
labels:
env: 'production'
설명
15초마다 메트릭을 수집하도록 설정합니다. localhost:8000에서 실행 중인 애플리케이션의 성능 데이터를 모니터링합니다.
8. GitOps_배포_자동화
개요
Git 저장소를 기반으로 배포를 자동화하는 ArgoCD 애플리케이션 정의입니다. 선언적 배포 방식을 구현합니다.
코드 예제
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
spec:
source:
repoURL: https://github.com/user/repo
path: k8s/
destination:
server: https://kubernetes.default.svc
설명
Git 저장소의 k8s 디렉토리에 있는 매니페스트를 자동으로 클러스터에 동기화합니다. Git이 배포의 단일 진실 공급원이 됩니다.
9. 헬스체크_엔드포인트
개요
애플리케이션의 상태를 확인하는 헬스체크 API입니다. 로드밸런서와 오케스트레이터가 서비스 가용성을 판단합니다.
코드 예제
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/health')
def health():
return jsonify({"status": "healthy"}), 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
설명
/health 엔드포인트로 GET 요청 시 상태를 반환합니다. Kubernetes나 로드밸런서가 이를 통해 컨테이너의 정상 작동 여부를 확인합니다.
10. 환경변수_설정_관리
개요
12-Factor App 원칙에 따라 환경별 설정을 분리합니다. 민감한 정보를 코드에서 분리하여 보안을 강화합니다.
코드 예제
import os
DATABASE_URL = os.getenv('DATABASE_URL', 'sqlite:///default.db')
SECRET_KEY = os.getenv('SECRET_KEY', 'dev-secret')
DEBUG = os.getenv('DEBUG', 'False') == 'True'
print(f"DB: {DATABASE_URL}, Debug: {DEBUG}")
설명
환경변수에서 설정값을 읽어오고, 없으면 기본값을 사용합니다. 개발/스테이징/프로덕션 환경별로 다른 설정을 적용할 수 있습니다. 중급 개발자를 위한 DevOps 핵심 개념 10가지를 실전 코드와 함께 정리했습니다. 각 개념은 실무에서 바로 활용할 수 있는 예제로 구성되어 있습니다.
마치며
이번 글에서는 DevOps 핵심 개념 완벽 정리에 대해 알아보았습니다. 총 10가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#DevOps #Docker #CI/CD #Kubernetes #Infrastructure