본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 10. 31. · 60 Views
DevOps 핵심 개념 완벽 정리
초급 개발자를 위한 DevOps 핵심 개념 가이드입니다. CI/CD, 컨테이너화, 인프라 자동화 등 실무에서 필수적인 DevOps 도구와 개념을 실제 코드 예제로 배워보세요.
들어가며
이 글에서는 DevOps 핵심 개념 완벽 정리에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- Docker_컨테이너_기본
- Docker_Compose_멀티_컨테이너
- GitHub_Actions_CI_파이프라인
- 환경_변수_관리
- Health_Check_엔드포인트
- Nginx_리버스_프록시_설정
- 로깅_미들웨어
- Kubernetes_배포_설정
- 자동_재시작_스크립트
- 메트릭_수집_엔드포인트
1. Docker 컨테이너 기본
개요
Docker는 애플리케이션을 컨테이너로 패키징하여 어디서나 동일하게 실행할 수 있게 해줍니다. Dockerfile로 이미지를 정의합니다.
코드 예제
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
설명
Node.js 앱을 Docker 컨테이너로 만드는 기본 설정입니다. 이미지를 빌드하고 어디서나 실행할 수 있습니다.
2. Docker Compose 멀티 컨테이너
개요
여러 컨테이너를 한 번에 관리하고 실행할 수 있는 도구입니다. 웹 서버와 데이터베이스를 함께 띄울 때 유용합니다.
코드 예제
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
설명
웹 앱과 PostgreSQL을 docker-compose up 명령 하나로 함께 실행할 수 있습니다.
3. GitHub Actions CI 파이프라인
개요
코드를 푸시하면 자동으로 테스트와 빌드가 실행되는 CI 파이프라인입니다. 품질을 자동으로 검증합니다.
코드 예제
name: CI
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm install
- run: npm test
설명
GitHub에 코드를 푸시하면 자동으로 테스트가 실행되어 버그를 조기에 발견할 수 있습니다.
4. 환경 변수 관리
개요
비밀번호나 API 키 같은 민감한 정보를 안전하게 관리하는 방법입니다. .env 파일을 사용합니다.
코드 예제
require('dotenv').config();
const dbConfig = {
host: process.env.DB_HOST,
password: process.env.DB_PASSWORD,
port: process.env.DB_PORT || 5432
};
console.log('Connected to:', dbConfig.host);
설명
환경 변수로 설정값을 분리하면 코드에 비밀번호를 직접 넣지 않아 보안이 강화됩니다.
5. Health Check 엔드포인트
개요
서비스가 정상적으로 작동하는지 확인하는 간단한 엔드포인트입니다. 모니터링과 로드밸런서에 필수입니다.
코드 예제
app.get('/health', (req, res) => {
const healthcheck = {
uptime: process.uptime(),
status: 'OK',
timestamp: Date.now()
};
res.status(200).send(healthcheck);
});
설명
/health 경로로 요청하면 서버 상태를 확인할 수 있어 장애를 빠르게 감지할 수 있습니다.
6. Nginx 리버스 프록시 설정
개요
Nginx를 사용하여 여러 백엔드 서버로 트래픽을 분산하는 설정입니다. 로드 밸런싱의 기초입니다.
코드 예제
server {
listen 80;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
설명
80 포트로 들어온 요청을 3000 포트의 앱으로 전달합니다. 여러 서버로 확장 가능합니다.
7. 로깅 미들웨어
개요
모든 HTTP 요청을 자동으로 기록하는 미들웨어입니다. 문제 발생 시 원인을 추적할 수 있습니다.
코드 예제
app.use((req, res, next) => {
const start = Date.now();
res.on('finish', () => {
const duration = Date.now() - start;
console.log(`${req.method} ${req.url} ${res.statusCode} ${duration}ms`);
});
next();
});
설명
요청 메서드, URL, 응답 코드, 처리 시간을 자동으로 로그에 남겨 성능 분석이 가능합니다.
8. Kubernetes 배포 설정
개요
Kubernetes로 앱을 배포하고 3개의 복제본을 유지하는 설정입니다. 고가용성을 보장합니다.
코드 예제
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
template:
spec:
containers:
- name: web
image: myapp:1.0
ports:
- containerPort: 3000
설명
앱을 3개의 파드로 실행하여 하나가 죽어도 서비스가 계속 작동합니다.
9. 자동 재시작 스크립트
개요
PM2를 사용하여 Node.js 앱이 크래시해도 자동으로 재시작되게 하는 설정입니다.
코드 예제
module.exports = {
apps: [{
name: 'myapp',
script: './server.js',
instances: 2,
autorestart: true,
max_memory_restart: '1G',
env: { NODE_ENV: 'production' }
}]
};
설명
앱이 비정상 종료되면 자동으로 다시 시작되고, 메모리가 1GB 초과 시에도 재시작됩니다.
10. 메트릭 수집 엔드포인트
개요
앱의 성능 지표를 Prometheus 형식으로 노출하는 엔드포인트입니다. 모니터링 시스템과 연동됩니다.
코드 예제
const promClient = require('prom-client');
const register = new promClient.Registry();
const counter = new promClient.Counter({
name: 'http_requests_total',
help: 'Total HTTP requests'
});
app.get('/metrics', (req, res) => {
res.set('Content-Type', register.contentType);
res.end(register.metrics());
});
설명
/metrics 엔드포인트로 앱의 요청 수, 응답 시간 등을 수집하여 Grafana로 시각화할 수 있습니다.
마치며
이번 글에서는 DevOps 핵심 개념 완벽 정리에 대해 알아보았습니다. 총 10가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#DevOps #Docker #CI/CD #Kubernetes #Infrastructure
댓글 (0)
함께 보면 좋은 카드 뉴스
빌드와 배포 자동화 완벽 가이드
Flutter 앱 개발에서 GitHub Actions를 활용한 CI/CD 파이프라인 구축부터 앱 스토어 자동 배포까지, 초급 개발자도 쉽게 따라할 수 있는 빌드 자동화의 모든 것을 다룹니다.
실전 인프라 자동화 프로젝트 완벽 가이드
Ansible을 활용하여 멀티 티어 웹 애플리케이션 인프라를 자동으로 구축하는 실전 프로젝트입니다. 웹 서버, 데이터베이스, 로드 밸런서를 코드로 관리하며 반복 가능한 인프라 배포를 경험합니다.
CI/CD 파이프라인 통합 완벽 가이드
Jenkins, GitLab CI와 Ansible을 연동하여 자동화된 배포 파이프라인을 구축하는 방법을 다룹니다. Ansible Tower/AWX의 활용법과 실무에서 바로 적용 가능한 워크플로우 설계 패턴을 단계별로 설명합니다.
Ansible 성능 최적화와 디버깅 완벽 가이드
Ansible 플레이북의 실행 속도를 극적으로 향상시키고, 문제 발생 시 효과적으로 디버깅하는 방법을 다룹니다. 병렬 실행, 캐싱, SSH 최적화부터 디버그 모드와 프로파일링까지 실무에서 바로 적용할 수 있는 기법들을 소개합니다.
Vault를 통한 시크릿 관리 완벽 가이드
Ansible Vault를 활용한 시크릿 관리의 모든 것을 다룹니다. 민감한 정보를 안전하게 암호화하고, CI/CD 파이프라인에서 효과적으로 활용하는 방법까지 실무 중심으로 설명합니다.