DM Log

[CI/CD #1] DevOps와 CI/CD 이해 (feat. Jenkins) 본문

개발공부/Infra

[CI/CD #1] DevOps와 CI/CD 이해 (feat. Jenkins)

Dev. Dong 2025. 10. 25. 21:26

Waferfall vs Agile

Waferfall 모델

  • 순차적 개발 방식으로 요구사항 → 설계 → 개발 → 테스트 → 배포 단계가 명확히 구분
  • 각 단계가 완료되어야 다음 단계로 진행
  • 장점: 문서화와 절차가 명확
  • 단점: 변경 대응이 어렵고 피드백 주기 김

Agile 모델

  • 반족적 이며 짧은 개발 주기 단위로 피드백 반영
  • 팀 간 협업과 지속적인 개선 중신
  • DevOps, CI/CD 문화의 근가이 되는 개발 철학

Cloud Native Application

클라우드 확경에서 탄력적으로 동작하도록 설계된 애플리케이션

MSA

  • 애플리케이션을 여러 독립 서비스 단위로 분리
  • 각 서비스는 자체 배포, 확장, 장애 복구 가능
  • 예: 주문 서비스, 결제 서비스, 사용자 인증 서비스 등

Inner Architecture

  • 마이크로서비스 내부 구조
  • 핵심 요소:
    • REST API, DB, 서비스 로직 등 개별 컴포넌트 구성
    • 단일 책임 원칙(SRP) 기반 설계
    • 서비스 간 통신 gRPC, HTTP 기반

Outer Archietecture

  • 여러 마이크로 서비스를 조합하고 관리하는 상위 구조
  • 주요 구성:
    • API Gateway: 요청 라우팅 및 인증 처리
    • Service Discovery: 동적 서비스 탐색
    • Load Balancer / Message Queue: 트래픽 분산 및 비동기 처리

Outer Architecutre Capabliy

  • Observability: 로그, 메트릭, 트레이싱 기반 모니터링
  • Scalability: Auto-scaling, Horizontal 확장
  • Resilience: Circuit Breaker, Retry, Timeout 등 장애 대응 전략

Containerization

 

  • “환경에 구애받지 않는 배포”의 핵심 기술
  • Docker를 사용해 앱과 의존성을 하나의 이미지로 패키징
  • Kubernetes와 결합 시 자동 배포/복구 가능
  • DevOps의 실질적 기반으로 CI/CD 파이프라인과 직접 연결됨

 

DevOps

  • Development + Operations의 합성어로,
    개발과 운영의 경계를 허물고 협업과 자동화를 강조.
  • 목표: 빠른 배포, 안정적 운영, 지속적인 피드백.
  • 주요 구성요소:
    • Culture: 협업 중심 문화.
    • Automation: 빌드, 테스트, 배포 자동화.
    • Measurement: 성능/품질 측정.
    • Sharing: 지식과 개선 사항 공유.

CI / CD

CI (Continuous Integration)

 

  • 코드 변경 시마다 자동 빌드, 테스트, 통합 수행.
  • 코드 충돌 및 오류를 조기에 발견 가능.

 

CD (Continuout Deployment / Delivery)

 

  • 통합된 코드를 자동으로 스테이징 또는 운영 환경에 배포.
  • 사람이 개입하지 않아도 신뢰할 수 있는 자동 배포 프로세스 구축.

 


CI / CD Flow

 

  1. 개발자가 Git에 코드 푸시
  2. Jenkins(Git Hook) → 빌드 자동 시작
  3. 테스트 수행 (단위, 통합, 기능 테스트)
  4. 도커 이미지 빌드 및 레지스트리 푸시
  5. Kubernetes 배포 / 운영 서버 반영
  6. 모니터링 및 피드백 루프

 


JenKins

Jenkins Pipeline

 

  • CI/CD 자동화를 위한 스크립트 기반 파이프라인
  • Groovy DSL 문법으로 빌드-테스트-배포 단계를 정의

 

Jenkins 초기 설치 (Docker 기반)

  1. Docker 설치 후 Jenkins 실행
    docker run -d \ -v jenkins_home:/var/jenkins_home \ -p 8080:8080 -p 50000:50000 \ --restart=on-failure \ --name jenkins-server \ jenkins/jenkins:lts-jdk21
  2. 초기 비밀번호 확인Jenkins 접속
    docker exec -it jenkins-server cat /var/jenkins_home/secrets/initialAdminPassword

  3. Jenkins 접속 - 브라우저에서 http://localhost:8080 접속 → 패키지 설치 → admin 계정 생성
  4. Global JDK 설정 주의점
    Docker 내부에 JDK가 기본 포함되지 않으면, Jenkins 관리 → Global Tool Configuration에서 수동 설정 필요

Item 생성 및 빌드

  1. Jenkins 대시보드 → “New Item” → Freestyle project 선택
  2. Build Steps → “Execute Shell” 선택
  3. 리눅스 명령어 기반으로 빌드 스크립트 입력
  4. 빌드 완료 후 ∨ 클릭 → Console Output에서 로그 확인.
  5. Jenkins 내부 쉘 접근
docker exec -ti jenkins-server bash

 


구분 핵심 키워드 설명

개발 문화 Agile, DevOps 협업과 자동화 중심
아키텍처 MSA, Container 유연한 확장성과 독립 배포
자동화 CI/CD 빌드-테스트-배포 자동화
도구 Jenkins 대표적인 CI/CD 도구