데브옵스 학습 로드맵
코드를 만드는 일과 서비스를 운영하는 일 사이를 잇는 분야입니다. 서버를 다루고, 배포를 자동화하고, 운영 중인 시스템의 상태를 확인하기까지의 기본기를 순서대로 익힙니다.
milanm/DevOps-Roadmap의 단계 구성을 참고했습니다.
전체 학습 순서
| 단계 | 주제 | 목표 |
|---|---|---|
| 01 | Git과 버전 관리 | 변경 이력을 남기고 다른 사람과 협업하기 |
| 02 | 프로그래밍 언어 한 가지 | 반복 작업을 코드로 자동화하기 |
| 03 | 리눅스와 셸 스크립트 | 서버에 접속해 직접 조작하기 |
| 04 | 네트워크와 보안 기초 | 요청이 서버에 닿기까지의 경로 이해하기 |
| 05 | 서버와 트래픽 처리 | 웹 서버, 프록시, 로드 밸런서 구성하기 |
| 06 | 컨테이너 | 실행 환경을 이미지로 고정하기 |
| 07 | 컨테이너 오케스트레이션 | 여러 컨테이너를 선언적으로 운영하기 |
| 08 | 코드형 인프라 | 인프라와 설정을 코드로 관리하기 |
| 09 | CI/CD | 빌드·테스트·배포 자동화하기 |
| 10 | 모니터링과 관측 | 장애를 먼저 감지하고 원인 찾기 |
| 11 | 클라우드 제공자 한 곳 | 관리형 서비스 위에서 인프라 구성하기 |
| 12 | 개발 프로세스와 협업 | 팀의 개발·배포 흐름에 맞춰 일하기 |
| 보너스 | 데브섹옵스 | 보안 점검을 파이프라인 안으로 넣기 |
01. Git과 버전 관리
- 저장소 초기화, 커밋, 브랜치, 병합
- 원격 저장소: clone, fetch, pull, push
- 충돌 해결과 되돌리기: revert와 reset의 차이
- 풀 리퀘스트 기반 협업과 코드 리뷰
- 브랜치 전략: 트렁크 기반 개발과 GitHub Flow
- 태그와 릴리스, 커밋 메시지 규칙
- GitHub, GitLab 등 호스팅 서비스의 차이
02. 프로그래밍 언어 한 가지
- Python, Go, JavaScript 중 하나를 선택
- 기본 문법: 조건문, 반복문, 함수, 자료 구조
- 파일 읽기·쓰기와 JSON·YAML 다루기
- HTTP 요청 보내기와 응답 처리
- 명령행 인자와 환경 변수 읽기
- 종료 코드와 오류 처리
- 반복 작업을 스크립트로 옮겨 보기
운영 도구 대부분이 이 언어들로 작성되어 있습니다. 설정 파일을 읽는 수준을 넘어 직접 고칠 수 있어야 합니다.
03. 리눅스와 셸 스크립트
- 배포판의 차이: Ubuntu, Debian, RHEL 계열
- 파일과 디렉터리:
ls,cd,cp,mv,find - 텍스트 처리:
cat,grep,sed,awk, 파이프와 리다이렉션 - 권한과 소유자:
chmod,chown, 사용자와 그룹 - 프로세스와 자원:
ps,top,kill,df,free - 패키지 관리와 systemd 서비스 등록
- SSH 접속과 키 인증,
scp와rsync - Bash 스크립트: 변수, 조건문, 반복문, 종료 코드
- cron으로 주기 작업 등록하기
04. 네트워크와 보안 기초
- OSI 7계층과 TCP/IP, TCP와 UDP의 차이
- IP 주소, 서브넷, 포트, NAT
- DNS 레코드와 질의 과정, TTL
- HTTP와 HTTPS, TLS 인증서와 갱신
- 방화벽과 보안 그룹, 인바운드·아웃바운드 규칙
- VPN과 사설망 구성
- 진단 도구:
ping,traceroute,dig,netstat,tcpdump
"접속이 안 된다"는 문제의 원인은 대부분 이 범위 안에 있습니다. 어느 구간에서 끊겼는지 좁혀 가는 순서를 몸에 익혀 둡니다.
05. 서버와 트래픽 처리
- 웹 서버: Nginx, Apache, IIS
- 정적 파일 제공과 가상 호스트 설정
- 정방향 프록시와 역방향 프록시의 차이
- 로드 밸런싱 방식: 라운드 로빈, 최소 연결, 헬스 체크
- 캐시 서버와 CDN 엣지
- TLS 종료 지점과 인증서 배치
- 접근 로그와 오류 로그 읽기
06. 컨테이너
- 가상 머신과 컨테이너의 차이
- 이미지와 레이어, 레지스트리
- Dockerfile 작성과 멀티 스테이지 빌드
- 이미지 경량화와 빌드 캐시 활용
- 컨테이너 네트워크와 포트 매핑
- 볼륨과 데이터 영속성
- Docker Compose로 여러 서비스 묶어 실행하기
- OCI 표준과 containerd, Podman
07. 컨테이너 오케스트레이션
- 쿠버네티스 구조: 컨트롤 플레인과 워커 노드
- 워크로드: Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet
- 일회성 작업: Job과 CronJob
- 네트워크: Service, Ingress, Ingress Controller
- 설정과 비밀: ConfigMap, Secret
- 저장소: PersistentVolume과 PersistentVolumeClaim
- 자원 요청과 제한, 오토스케일링
- 헬스 체크: liveness, readiness, startup 프로브
kubectl기본 사용과 Helm 차트- cert-manager, external-dns 같은 클러스터 부가 서비스
- 서비스 메시의 역할과 도입 판단 기준
08. 코드형 인프라
- 수동 구성의 문제와 선언적 관리의 이점
- 인프라 프로비저닝: Terraform, OpenTofu, Pulumi
- 상태 파일의 역할과 원격 저장, 잠금
- 모듈화와 환경별 변수 분리
- 구성 관리: Ansible, Chef, Puppet
- 멱등성과 반복 실행 안전성
- 로컬 환경 재현: Vagrant
- 계획 확인 후 적용하는 절차와 변경 검토
09. CI/CD
- 지속적 통합과 지속적 배포의 범위
- 파이프라인 단계: 빌드, 테스트, 패키징, 배포
- 트리거: 푸시, 풀 리퀘스트, 태그, 스케줄
- 도구: GitHub Actions, GitLab CI, Jenkins, CircleCI, Azure Pipelines
- 캐시와 병렬 실행으로 파이프라인 시간 줄이기
- 아티팩트 저장과 버전 관리, 컨테이너 레지스트리 푸시
- 비밀 값 주입과 파이프라인 권한 분리
- 배포 전략: 블루-그린, 카나리, 롤링 업데이트
- 롤백 절차와 배포 승인 단계
10. 모니터링과 관측
- 지표, 로그, 추적의 역할 구분
- 지표 수집과 시각화: Prometheus, Grafana
- 로그 수집: Elastic Stack, Loki
- 분산 추적과 OpenTelemetry
- 클라우드 제공자의 모니터링 서비스
- 상용 도구: Datadog, Splunk, Dynatrace
- 대시보드 구성과 알림 임계치 설정
- SLI·SLO와 오류 예산
- 알림 피로를 줄이는 기준과 온콜 운영
- 장애 대응 절차와 사후 회고
11. 클라우드 제공자 한 곳
- AWS, Azure, Google Cloud 중 하나를 선택
- 계정과 권한 관리, 최소 권한 원칙
- 가상 네트워크와 서브넷, 보안 그룹
- 가상 서버와 이미지, 오토스케일링 그룹
- 관리형 데이터베이스와 객체 스토리지
- 관리형 쿠버네티스 서비스
- 서버리스: 함수와 이벤트 기반 실행
- 비용 구조와 요금 알림 설정
한 곳을 깊게 익히면 다른 제공자는 이름만 바꿔 읽을 수 있습니다.
12. 개발 프로세스와 협업
- 애자일과 스크럼, 칸반의 차이
- 이슈 추적과 작업 흐름: Jira, Azure Boards
- SDLC 단계와 환경 분리: 개발, 스테이징, 운영
- 코드 리뷰 기준과 머지 정책
- 테스트 자동화의 범위와 품질 게이트
- 문서화와 런북, 장애 대응 절차 공유
- 변경 관리와 릴리스 노트
보너스. 데브섹옵스
- 보안을 배포 흐름 안으로 옮기는 이유
- 정적 분석(SAST)과 동적 분석(DAST)
- 의존성 취약점 점검과 SBOM
- 컨테이너 이미지 스캔: Trivy
- 런타임 위협 탐지: Falco
- 비밀 관리: HashiCorp Vault, 클라우드 시크릿 서비스
- 코드에 포함된 비밀 값 탐지와 차단
- 정책 기반 통제와 OWASP DevSecOps 가이드라인
- 공급망 보안과 SLSA
자주 쓰이는 도구
| 분류 | 도구 |
|---|---|
| 작업 관리 | Jira, Asana, Trello, Azure Boards |
| 소스 관리 | Git, GitHub, GitLab, Bitbucket |
| CI/CD | GitHub Actions, GitLab CI, Jenkins, CircleCI, Argo CD |
| 코드 분석 | SonarQube, Veracode |
| 아티팩트 관리 | Artifactory, 컨테이너 레지스트리, npm, NuGet |
| 구성 관리 | Terraform, Ansible, Puppet, Chef |
| 컨테이너 | Docker, Kubernetes, OpenShift |
| 모니터링 | Prometheus, Grafana, Elastic Stack, Datadog |
도구는 목적을 이해한 뒤에 고릅니다. 같은 분류 안의 도구는 대체로 비슷한 문제를 다른 방식으로 풉니다.
기본기를 익힌 다음
필요해지는 시점에 주제를 골라 확장합니다.
- GitOps: 저장소를 단일 기준으로 삼는 배포, Argo CD와 Flux
- 신뢰성 공학: 오류 예산 운영, 용량 계획, 카오스 엔지니어링
- 플랫폼 엔지니어링: 내부 개발자 플랫폼과 셀프 서비스 환경
- 비용 최적화: 자원 사용률 분석, 스팟 인스턴스, FinOps
- 멀티 클러스터: 지역 분산, 재해 복구와 복구 목표 설정
도구를 늘리기보다, 지금 운영 중인 것 하나를 끝까지 설명할 수 있는지부터 확인해 보세요.