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

CI/CD 구축 및 자동 배포 시스템 최적화

by 백수A 2025. 3. 29. 23:08

CI/CD 구축 및 자동 배포 시스템 최적화

1. 문제 상황: 수동 배포의 비효율성

초기에는 코드 변경 사항을 직접 서버에 배포하는 방식으로 운영했지만, 프로젝트가 커지면서 여러 문제가 발생했다.

  • 수동 배포로 인해 개발자가 직접 서버에 접속해야 하는 비효율성이 존재한다.
  • 배포 과정에서 실수가 발생하여 장애로 이어지는 경우가 많다.
  • 팀원 간 배포 방식이 일관되지 않아 운영 중 혼란이 발생한다.
  • 배포 후 버그가 발견되었을 때 롤백 과정이 복잡하다.

이러한 문제를 해결하기 위해 CI/CD를 도입하고 자동 배포 시스템을 구축하는 것이 필요하다.

2. 해결 과정: CI/CD 파이프라인 구축

2.1 CI/CD 개념 이해

CI/CD는 코드 변경 사항을 자동으로 테스트하고 배포하는 시스템을 의미한다.

  • CI(Continuous Integration): 코드 변경 사항을 자동으로 빌드 및 테스트하여 문제를 조기에 발견
  • CD(Continuous Deployment/Delivery): 검증된 코드를 자동으로 배포하여 신속한 서비스 제공

이를 통해 배포 시간을 단축하고, 운영 환경에서의 오류를 최소화할 수 있다.

2.2 CI/CD 도구 선택

CI/CD를 구축하기 위해 다음과 같은 도구를 사용할 수 있다.

분야 대표적인 도구
CI/CD 서버 Jenkins, GitHub Actions, GitLab CI/CD, CircleCI
컨테이너 기반 배포 Docker, Kubernetes
버전 관리 Git, GitHub, GitLab

2.3 GitHub Actions을 활용한 CI/CD 구축

GitHub Actions를 사용하여 CI/CD 파이프라인을 구축해보겠다.

1) 프로젝트에 CI/CD 설정 파일 추가

GitHub Actions는 .github/workflows/ 디렉터리 아래에 YAML 파일을 생성하면 자동으로 실행된다.

mkdir -p .github/workflows
touch .github/workflows/deploy.yml

2) CI/CD 파이프라인 설정

아래는 GitHub Actions을 이용한 CI/CD 설정 파일의 예제이다.

name: Deploy to Server

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: 코드 체크아웃
        uses: actions/checkout@v3

      - name: Docker 이미지 빌드
        run: docker build -t my-app .

      - name: 컨테이너 실행
        run: docker run -d -p 80:80 my-app

이렇게 설정하면 main 브랜치에 코드가 푸시될 때 자동으로 배포가 진행된다.

2.4 배포 자동화

CI/CD를 구축한 후에도 성능을 최적화하는 것이 중요하다. 이를 위해 다음과 같은 최적화 방법을 적용할 수 있다.

1) 병렬 빌드 및 캐싱

GitHub Actions 또는 Jenkins에서는 빌드 시간을 단축하기 위해 캐싱을 활용할 수 있다.

      - name: 캐싱 활용
        uses: actions/cache@v3
        with:
          path: ~/.npm
          key: npm-cache-${{ hashFiles('**/package-lock.json') }}
          restore-keys: npm-cache-

이렇게 하면 의존성 설치 속도가 향상되어 배포 시간이 줄어든다.

2) 무중단 배포(Blue-Green Deployment)

기존 서버에서 실행 중인 애플리케이션을 중단하지 않고 새 버전을 배포하는 방식이다.

  • Blue 서버: 현재 운영 중인 서버
  • Green 서버: 새로운 버전이 배포될 서버

배포가 완료되면 트래픽을 Green 서버로 전환하여 무중단 배포를 수행할 수 있다.

2.5 롤백 기능 추가

배포 후 문제가 발생했을 때 빠르게 이전 버전으로 복구할 수 있도록 롤백 기능을 추가해야 한다.

      - name: 롤백 실행
        if: failure()
        run: git revert HEAD

이렇게 하면 배포가 실패할 경우 자동으로 이전 버전으로 복구할 수 있다.

3. 최종 정리

CI/CD는 개발 및 배포 과정을 자동화하여 개발자의 부담을 줄이고, 서비스 안정성을 높이는 데 중요한 역할을 한다. 이번 글에서는 GitHub Actions을 활용한 CI/CD 구축과 최적화 방법을 살펴보았다.

핵심 요약:

  • CI/CD를 도입하면 배포 속도가 빨라지고 실수를 줄일 수 있다.
  • GitHub Actions, Jenkins, GitLab CI/CD 등 다양한 도구를 활용할 수 있다.
  • GitHub Actions을 활용해 코드 푸시 시 자동 배포가 이루어지도록 설정할 수 있다.
  • 병렬 빌드 및 캐싱을 적용하면 빌드 속도가 향상된다.
  • Blue-Green Deployment를 활용하면 무중단 배포가 가능하다.
  • 롤백 기능을 추가하면 배포 실패 시 신속하게 복구할 수 있다.

CI/CD 시스템을 최적화하면 개발 생산성을 높이고, 보다 안정적인 서비스 운영이 가능하다.