DevOps 정의
소프트웨어 개발(Dev)과 IT 운영(Ops)을 결합한 일련이 관행으로 소프트웨어 개발 주기를 단축하고 지속적인 전달을 가능하게 한다.
DevOps Lifecycle
PLAN → CODE → BUILD → TEST → RELEASE → DEPLOY → OPERATE → MONITOR
주요 특징
| 항목 | 설명 |
| Automation | 반복적이고 수동적인 업무를 자동화. Jenkins, Ansible, Docker 등 사용 |
| Integration | 개발 중인 코드와 기존 코드를 통합 및 테스트 (CI/CD의 핵심) |
| Collaboration | 개발팀과 운영팀의 협업 문화 강화, 책임 공유 및 생산성 향상 |
| Configuration Management | 실행 환경별 리소스 및 설정 파일 관리 |
Automation
| 단계 | 주요 내용 | 대표 도구 |
| Plan | 요구사항 수집, 보안정책 설정, 성능 메트릭 정의 | Jira, GitHub, Azure DevOps |
| Code | 코드 작성, 버전 관리 | Git, GitLab |
| Build/Test | 빌드 및 단위/통합 테스트 자동화 | Jenkins, SonarQube, CircleCI |
| Deploy/Release | 검증된 빌드를 프로덕션에 배포 | Jenkins, Spinnaker |
| Monitor/Operate | 서비스 상태 모니터링 및 자동 스케일링 | Grafana, PagerDuty, Cloud Stack |
핵심 Practices
- Self-configuration (자체 구성)
- Continuous Build, Integration, Delivery, Deployment
- 자동화된 테스트 및 프로비저닝
- 자동 릴리즈 관리
- “Provisioning” = 시스템 리소스를 할당·배포·준비 상태로 만드는 과정 (예: 서버, OS, 스토리지, 계정 등)
CI / CD (Continuous Integration / Continuous Delivery)
CI (Continuous Integration)
- 코드 변경을 자주 병합해야 함
- 개발자들이 오랫동안 각자 개발 후 한꺼번에 병합하면 충돌(conflict) 과 시간 낭비 발생.
- 작은 단위로 자주 병합하여 문제 조기 발견
- 자동화된 통합 과정
- 코드 병합 → 빌드 → 테스트 과정을 자동화.
- CI 서버(Jenkins) 가 빌드와 테스트를 자동 수행.
- 코드 품질 및 생산성 향상
CD (Continuous Delivery / Deployment)
| 구분 | Delivery | Deployment |
| 배포 방식 | 스테이징(staging)까지 자동화 후 수동 배포 | 전체 배포까지 완전 자동화 |
| 주체 | 개발자/운영자가 수동 릴리즈 | 시스템이 자동으로 배포 |
| 목표 | 안정된 릴리즈 준비 | 즉시 사용자에게 배포 |
| 공통점 | CI로부터 전달된 빌드·테스트 결과를 자동화 |

