DevOps란?
DevOps는 개발(Development)과 운영(Operations)을 통합하여 빠른 소프트웨어 배포와 높은 품질을 동시에 달성하는 문화·관행·도구의 조합입니다. 정보처리기사에서 CI/CD와 DevOps는 중요 출제 영역입니다.
CI/CD 개념
CI (Continuous Integration, 지속적 통합)
- 개발자가 코드를 자주(하루 여러 번) 중앙 리포지토리에 병합
- 매 커밋마다 자동으로 빌드·테스트 수행
- 통합 문제를 조기 발견하여 수정 비용 최소화
CD (Continuous Delivery vs Continuous Deployment)
- 지속적 전달(Continuous Delivery): 언제든지 릴리스 가능한 상태 유지. 프로덕션 배포는 수동 승인
- 지속적 배포(Continuous Deployment): 승인 없이 자동으로 프로덕션까지 배포
CI/CD 파이프라인 단계
- 소스 코드 커밋 → 빌드 → 단위 테스트 → 정적 분석 → 통합 테스트 → 보안 스캔 → 스테이징 배포 → 인수 테스트 → 프로덕션 배포
Jenkins
- 오픈소스 CI/CD 자동화 서버. 가장 많이 사용되는 도구
- Jenkinsfile: 파이프라인을 코드로 정의 (Pipeline as Code)
- 선언형(Declarative) vs 스크립트형(Scripted) 파이프라인
- 풍부한 플러그인 생태계 (1,800+)
기타 CI/CD 도구
- GitHub Actions: GitHub 내장 CI/CD. YAML 워크플로우 정의
- GitLab CI: GitLab 내장 CI/CD. .gitlab-ci.yml 파일
- ArgoCD: Kubernetes GitOps 지속적 배포 도구
Docker와 컨테이너
- 컨테이너: OS를 공유하며 격리된 실행 환경 제공. VM보다 가볍고 빠름
- Dockerfile: 이미지 빌드 명령을 정의한 파일
- 이미지(Image): 컨테이너 실행에 필요한 읽기 전용 템플릿
- 컨테이너(Container): 이미지의 실행 인스턴스
- 레지스트리(Registry): 이미지 저장소 (Docker Hub, ECR, GCR)
Docker 주요 명령
- docker build: Dockerfile로 이미지 빌드
- docker run: 컨테이너 실행
- docker push/pull: 레지스트리에 이미지 업로드/다운로드
- docker-compose: 다중 컨테이너 애플리케이션 정의·실행
GitOps
Git 리포지토리를 단일 진실 소스(SSOT)로 사용하여 인프라와 애플리케이션 배포를 선언적으로 관리하는 방식입니다.
- Git에 변경 사항 커밋 → 자동으로 클러스터 상태 동기화
- ArgoCD, Flux가 대표적인 GitOps 도구
시험 핵심 포인트
- CI: 자동 빌드·테스트 / CD Delivery: 릴리스 준비 / CD Deployment: 자동 배포
- 컨테이너 vs VM: 컨테이너는 OS 커널 공유, VM은 하이퍼바이저로 완전 격리
- Dockerfile: 이미지 빌드 명령 정의
- Jenkins Jenkinsfile: Pipeline as Code
- DevOps 핵심 지표: 배포 빈도, 변경 리드타임, 변경 실패율, 서비스 복구 시간
마무리
CI/CD와 DevOps는 현대 소프트웨어 개발의 표준입니다. 각 단계의 목적과 대표 도구를 연결하여 암기하고, 컨테이너와 VM의 차이를 명확히 이해하세요.