본문 바로가기
카테고리 없음

CI/CD 구축과 자동 배포 시스템

by 백수A 2025. 4. 1. 11:14

CI/CD 구축과 자동 배포 시스템

1. 문제 상황: 수동 배포로 인한 비효율성

팀에서 애플리케이션을 배포할 때 수동으로 작업을 수행하면서 다음과 같은 문제가 발생했다.

  • 개발자가 직접 코드를 빌드하고 서버에 배포해야 하므로 시간 소요
  • 사소한 실수로 인해 배포 중 오류 발생 가능
  • 테스트 과정이 수동으로 이루어져 품질 관리 어려움
  • 여러 명이 협업하는 경우 배포 시점 관리가 어려움

이러한 문제를 해결하기 위해 CI/CD 시스템을 구축하여 자동화된 빌드 및 배포 프로세스를 도입할 필요가 있다.

2. 해결 과정: CI/CD 개념과 구축 방법

2.1 CI/CD란?

CI/CD(Continuous Integration & Continuous Deployment)는 코드 변경 사항을 지속적으로 통합하고, 테스트 및 배포 과정을 자동화하는 개발 방법론이다.

  • CI(Continuous Integration): 코드가 변경될 때마다 자동으로 빌드하고 테스트하여 문제를 조기에 발견
  • CD(Continuous Deployment): 테스트를 통과한 코드가 자동으로 운영 서버에 배포

2.2 CI/CD 도구 선택

CI/CD 파이프라인을 구축할 때 사용할 수 있는 도구는 다음과 같다.

도구 특징
Jenkins 오픈소스 CI/CD 도구, 플러그인 지원
GitHub Actions GitHub과 통합된 CI/CD 시스템
GitLab CI/CD GitLab에 내장된 CI/CD 기능
CircleCI 클라우드 기반 CI/CD 서비스
ArgoCD Kubernetes 네이티브 CD 도구

3. Jenkins를 활용한 CI/CD 구축

3.1 Jenkins 설치

Ubuntu 환경에서 Jenkins를 설치하는 방법은 다음과 같다.

sudo apt update
sudo apt install openjdk-11-jdk -y
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins -y

설치 후 Jenkins를 실행한다.

sudo systemctl start jenkins
sudo systemctl enable jenkins

3.2 Jenkins 기본 설정

Jenkins 웹 UI(http://localhost:8080)에 접속하여 초기 설정을 완료한다.

  • 관리자 계정 생성
  • 필수 플러그인 설치 (Git, Docker, Kubernetes 등)
  • GitHub 또는 GitLab과 연동

3.3 Jenkins Pipeline 설정

Jenkinsfile을 사용하여 CI/CD 파이프라인을 정의한다.

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/myrepo.git'
            }
        }
        stage('Build') {
            steps {
                sh './gradlew build'
            }
        }
        stage('Test') {
            steps {
                sh './gradlew test'
            }
        }
        stage('Deploy') {
            steps {
                sh 'scp build/libs/myapp.jar user@server:/deploy/'
            }
        }
    }
}

4. GitHub Actions를 활용한 CI/CD 구축

GitHub Actions를 활용하여 자동 배포를 설정할 수도 있다.

4.1 GitHub Actions Workflow 설정

프로젝트의 .github/workflows/main.yml 파일을 생성하고 다음과 같이 설정한다.

name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v3

      - name: Set up JDK
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'adopt'

      - name: Build
        run: ./gradlew build

      - name: Deploy
        run: scp build/libs/myapp.jar user@server:/deploy/

5. Docker와 Kubernetes를 활용한 배포 자동화

5.1 Docker를 활용한 컨테이너 배포

Dockerfile을 작성하여 애플리케이션을 컨테이너화할 수 있다.

FROM openjdk:11
COPY build/libs/myapp.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

5.2 Kubernetes를 활용한 자동 배포

Kubernetes에서 배포를 자동화하려면 Deployment와 Service를 정의한다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myrepo/myapp:latest
        ports:
        - containerPort: 8080

6. 최종 정리

CI/CD를 구축하면 개발, 빌드, 테스트, 배포 과정을 자동화하여 생산성을 높이고, 배포 오류를 최소화할 수 있다.

핵심 요약:

  • CI/CD는 지속적인 통합(CI)과 지속적인 배포(CD)로 구성됨
  • Jenkins, GitHub Actions, GitLab CI/CD 등 다양한 도구 활용 가능
  • Jenkinsfile 또는 GitHub Actions Workflow를 통해 빌드 및 배포 자동화
  • Docker와 Kubernetes를 활용하여 컨테이너 기반 배포 가능
  • CI/CD 도입으로 개발 생산성을 향상하고 배포 안정성을 높일 수 있음

이러한 시스템을 구축하면 개발팀의 효율성을 극대화하고, 빠르고 안정적인 배포가 가능해진다.