본문 바로가기

멋쟁이사자처럼_부트캠프/개념STUDY

CI/CD 개념 정리

CI/CD는 소프트웨어 개발에서 코드 작성(개발)부터 배포까지의 과정을 자동화해주는 방법론.

CI와 CD는 각각 다른 의미지만, 실제로는 하나의 파이프라인처럼 이어져 있음.

 

1. CI/CD란 무엇인가?

  • CI (지속적 통합): 코드 커밋 시 자동 테스트 & 빌드
  • CD (지속적 배포): 빌드된 결과물을 자동으로 배포
  • 왜 필요한가? (협업 효율, 버그 감소, 속도 향상)

 

CI: Continuous Integration (지속적 통합)

"모든 개발자가 자주, 매일같이 코드를 공유 저장소에 자주 통합한다."

● 핵심 개념

  • 머지(merge), 빌드, 테스트의 자동화
  • 여러 명이 개발할 때, 코드 병합(merge) 전에 자주 코드를 통합해서 충돌 가능성을 줄임
  • 자동 테스트를 돌려서, 올바른 코드인지 검증

● 예시

  • 누군가 main 브랜치에 코드를 올리면
    • GitHub Actions가 자동으로 실행됨
    • 테스트 코드 돌림 (gradle test, npm test 등)
    • 이상 없으면 통합 성공!

CD는 2가지 의미로 나뉨:

1. Continuous Delivery (지속적 제공)

"코드를 자동으로 빌드하고, 테스트해서 배포 직전 상태까지 자동화함."

  • 빌드 & 테스트까지 자동화된 후 → 운영 서버에 직접 배포는 사람이 함

2. Continuous Deployment (지속적 배포)

"배포도 사람이 안 하고, 자동으로 서버에 배포까지 함."

  • 테스트 통과하면 → 자동으로 EC2나 Render 같은 서버에 올라감

정리

단계 전통 방식 CI/CD 방식
코드 작성 로컬에서 작성 동일
코드 병합 수동 병합, 충돌 많음 CI로 자동 병합 & 테스트
테스트 수동 실행 자동화된 테스트
빌드 수동으로 빌드 자동 빌드
배포 서버에 직접 접속해서 배포 자동 배포 (CD)

 

CI/CD 왜 써야 할까?

  1. 시간 절약: 매번 빌드/테스트/배포 수동으로 안 해도 됨
  2. 버그 조기 발견: 코드 변경 직후 테스트 자동 수행
  3. 일관성 있는 배포: 사람 실수 방지
  4. 팀 협업에 유리: 여러 명이 동시에 일해도 안전하게 통합 가능

 

2. CI/CD 구성 요소

  • GitHub Actions (워크플로우 자동화 도구)
  • Docker (컨테이너화된 애플리케이션)
  • 배포 타겟: EC2, Render, Railway, Vercel 등
  • (Optional) Slack 알림, Test Coverage 등

 

3. GitHub Actions 실전 예제

name: CI/CD Pipeline

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 17
      uses: actions/setup-java@v2
      with:
        java-version: '17'
    - name: Build with Gradle
      run: ./gradlew build
    - name: Docker Build & Push
      run: |
        docker build -t myapp .
        # docker push myapp (옵션)

 

 

추가 개념)

https://devlog-wjdrbs96.tistory.com/300

 

[AWS] 블루/그린(Blue/Green) 배포 방식이란?

AWS 무중단 배포 과정 지금까지 Auto Scaling, 로드밸런서를 이용해서 서버를 구축하는 과정을 알아보았습니다. 그런데 현재 서버를 운영 중인데 새로운 소스 코드를 업데이트 해야 한다면 어떻게

devlog-wjdrbs96.tistory.com