CI/CD란?

CI/CD는 소프트웨어 개발 및 배포 과정을 자동화하고 효율적으로 만드는 두 가지 주요 개념인 CI (Continuous Integration)와 CD (Continuous Delivery/Continuous Deployment)의 약자이다. 이를 통해 개발자는 코드 변경 사항을 빠르게 반영하고, 품질을 유지하며, 소프트웨어를 신속하게 배포할 수 있다.
1. CI (Continuous Integration)
CI는 코드 변경이 있을 때마다 자동으로 빌드하고 테스트하는 과정을 의미한다. 이 과정은 주로 다음과 같은 작업을 한다.
- 코드 변경 통합: 여러 개발자가 동시에 작업할 때, 각자의 변경 사항을 주기적으로 통합하여 하나의 코드베이스에서 개발을 진행
- 자동 빌드: 코드가 변경되면, 자동으로 빌드를 실행하여 코드가 제대로 컴파일되고 실행되는지 확인
- 자동 테스트: 빌드된 코드가 예상대로 동작하는지 자동으로 테스트한다. 이 과정에서 오류나 버그를 발견하면, 개발자는 빠르게 수정할 수 있다.
2. CD (Continuous Delivery/Continuous Deployment)
CD는 두 가지 의미를 가질 수 있는데 지속적 배포(Continuous Deployment)와 지속적 배포 준비(Continuous Delivery)이다. 우선 Continuous Delivery는 코드가 항상 배포 가능한 상태에 있도록 유지하는 과정이다. 이 과정에서는 모든 코드 변경 사항이 자동으로 빌드되고 테스트되며, 배포 가능한 상태로 준비된다. 그러나 실무에서 배포는 사람이 직접 승인하거나 추가적인 수동 단계가 필요하다.
1. Continuous Delivery(지속적 배포 준비)
- 코드가 항상 배포 준비 상태에 있음
- 자동화된 테스트와 빌드 후 배포 준비가 완료됨
- 실제 배포는 수동으로 승인하거나 필요 시 자동으로 수행
다음으로는 Continuous Deploymen을 알아보자. 모든 코드 변경이 자동으로 실제 환경에 배포되는 과정이다.
Continuous Delivery와의 차이는, 배포 준비가 끝난 후 자동으로 실시간 서버나 클라우드 환경에 코드가 배포된다는 점이다.
2. Continuous Deployment (지속적 배포)
- 모든 코드 변경이 자동으로 배포됨
- 사람의 개입 없이 자동으로 배포가 이루어짐
- 배포 후 바로 실시간 환경에서 실행됨
CI/CD 파이프라인: 자동화된 개발 및 배포 과정
CI/CD를 실현하기 위해서는 CI/CD 파이프라인이 필요하다.
파이프라인은 코드 변경이 일어날 때마다 자동으로 실행되는 일련의 단계들을 말하는데 아래의 간단한 파이프라인 예시를 보자.
- 코드 커밋: 개발자는 코드 변경을 GitHub, GitLab, Bitbucket 등 저장소에 커밋한다.
- 자동 빌드: CI 서버(예: Jenkins, GitHub Actions 등)가 자동으로 코드를 빌드한다. 빌드는 코드가 잘 컴파일되고 실행되는지 확인하는 과정이다.
- 자동 테스트: 빌드 후, 자동화된 테스트가 실행되어 코드가 예상대로 동작하는지 검사한다.
- 배포 준비: 테스트가 통과되면, 코드는 배포 준비 상태가 된다. 이 시점에서 코드가 실제 서버나 클라우드 환경에 배포될 준비가 되어 있다.
- 배포: Continuous Delivery에서는 사람이 승인하거나 자동화된 배포 시스템이 배포를 수행한다. Continuous Deployment에서는 배포가 자동으로 이루어진다.
- 모니터링 및 피드백: 배포 후, 애플리케이션을 모니터링하여 문제가 발생하지 않았는지 확인하고, 사용자의 피드백을 받는다.
CI/CD 도구들
- CI 도구: Jenkins, GitHub Actions, GitLab CI, CircleCI, Travis CI
- 배포 도구: Kubernetes, Docker, AWS, Azure, Heroku
- 모니터링 도구: Prometheus, Grafana, Sentry, New Relic
GitHub Actions

GitHub Actions는 GitHub에서 제공하는 CI/CD 도구로, 코드 변경 사항에 따라 자동으로 테스트, 빌드, 배포 등을 수행할 수 있게 해주는 서비스이다. 간단히 말하면, 코드가 GitHub 저장소에 푸시(push)될 때마다 자동으로 특정 작업을 수행하는 것이다.
GitHub Actions 외에도 다양한 CI/CD 도구들이 있다. 각각의 CI/CD 도구는 특징과 기능이 다르므로 프로젝트의 필요에 따라 선택해야 한다.
GitHub Actions Workflow는 GitHub에서 제공하는 자동화된 작업의 집합이다. 이 작업들은 코드가 변경될 때마다 자동으로 실행될 수 있으며, 보통 CI/CD 파이프라인을 구축하는 데 사용되고 있다. Workflow는 여러 작업(Job)을 포함하고 있으며, 각 작업은 순차적으로 또는 병렬로 실행될 수 있다.
GitHub Actions 구성(포함 관계)
1. Workflow
name: CI/CD Pipeline
on:
push:
branches:
- main # main 브랜치에 푸시되면 워크플로가 실행됨
pull_request:
branches:
- main # main 브랜치로의 풀 리퀘스트가 생성될 때 실행
jobs:
build:
runs-on: ubuntu-latest # Ubuntu 환경에서 실행
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up JDK
uses: actions/setup-java@v2
with:
java-version: '11'
- name: Build with Maven
run: mvn clean package -DskipTests # Maven을 사용하여 JAR 파일 빌드
- name: Upload JAR to S3
run: aws s3 cp target/your-app.jar s3://your-bucket-name/your-app.jar # 빌드된 JAR 파일을 S3로 업로드
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Deploy to EC2 with CodeDeploy
run: |
aws deploy create-deployment \
--application-name YourAppName \
--deployment-group-name YourDeploymentGroup \
--revision revisionType=S3, S3Location={bucket=your-bucket-name,key=your-app.jar} \
--deployment-config-name CodeDeployDefault.OneAtATime \
--description "Deployment of your app" # AWS CodeDeploy를 사용하여 EC2에 배포
- Workflow는 자동화된 작업의 집합으로, 특정 이벤트(예: 코드 푸시, 풀 리퀘스트 생성 등)가 발생했을 때 실행된다.
- 여러 작업(Job)을 포함하고 있으며, 각 작업은 순차적으로 또는 병렬로 실행될 수 있다.
- Workflow는 .github/workflows/ 디렉토리에 YAML 파일 형식으로 정의된다.
- 가장 큰 작업 단위이다.
2. Event

- Event는 워크플로가 실행되는 트리거(trigger)이다.
- 예를 들어, push, pull_request, issue와 같은 GitHub 이벤트가 발생할 때 Workflow가 실행될 수 있다.
- 예를 들어, 코드가 저장소에 푸시되면 push 이벤트가 발생하고, 이에 따라 Workflow가 실행된다.
3. Runner

- Runner는 GitHub Actions 워크플로가 실행되는 환경입니다.
- GitHub은 자체적인 runner를 제공하지만, 사용자가 직접 runner를 설정할 수도 있습니다.
- runner는 보통 다양한 OS(Windows, Ubuntu, macOS 등)에서 실행됩니다.
4. Job

- Job은 Workflow 내에서 실행되는 개별적인 작업이다.
- 각 Job은 독립적으로 실행되며, 한 번에 하나의 머신에서 실행된다.
- 각 Job은 여러 Step으로 구성된다.
5. Step
- Step은 Job 내에서 실행되는 개별적인 작업이다.
- 각 Step은 실행할 명령어 또는 액션(Action)을 포함하며, 순차적으로 실행된다.
- 예를 들어, "코드를 체크아웃"하거나 "의존성을 설치"하는 명령어가 Step에 해당한다.
6. Action
- Action은 GitHub에서 제공하는 미리 정의된 작업 또는 사용자가 만든 작업이다.
- 예를 들어, actions/checkout 액션은 코드 저장소의 코드를 체크아웃하는 작업을 자동으로 수행한다.
'[배포]' 카테고리의 다른 글
[배포] 🚀 GitHub Actions + EC2 + S3 + Secrets Manager + CodeDeploy를 통한 무중단 배포 자동화 (0) | 2025.04.07 |
---|---|
[AWS] EC2에 MySQL 설치 및 접속 (0) | 2025.04.05 |
[AWS] 🔐 보안 그룹 설정 (0) | 2025.04.05 |
[GitHub Actions] GitHub Actions 명령어 (0) | 2025.03.14 |
[배포] 배포 방식 (0) | 2025.02.04 |