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 시스템을 최적화하면 개발 생산성을 높이고, 보다 안정적인 서비스 운영이 가능하다.