[매일매일] CI/CD 파이프라인이란? – 지속적인 개발 흐름의 핵심
개발한 코드를 자동으로 빌드하고 테스트하고, 문제 없이 잘 되면 배포까지 쭉!이게 바로 우리가 말하는 CI/CD 파이프라인입니다.이번 글에서는 CI(지속적 통합), CD(지속적 전달/배포) 의 개념부터 실제 도구까지 핵심만 정리해봅니다.
✅ CI (Continuous Integration) – 코드는 매일매일 합쳐야 맛이지!
“작은 변경을 자주! 그리고 빠르게 확인하자”
CI는 개발자가 작업한 코드를 공통 저장소(Repository) 에 자주 병합(Merge)하면서,매 병합마다 자동으로 빌드 + 테스트 를 수행하는 방식입니다.
✅ 왜 중요한가요?실시간으로 버그를 빠르게 찾고통합 시 충돌을 최소화하며코드 퀄리티를 유지할 수 있습니다🔧 예시 도구GitHub ActionsJenkinsTravis CIGitLab CI
✅ CD – 이름이 같아도 두 가지 의미?CD는 두 가지로 나뉩니다.1. Continuous Delivery (지속적 전달)
자동 배포 바로 직전까지, 운영자가 수동 승인만 하면 배포됨.
CI → 테스트 통과 → 빌드 결과(artifact) 생성 → 배포 대기
운영자가 직접 눌러야 배포되므로 “신중한 팀”에 적합합니다.
- Continuous Deployment (지속적 배포)
CI 이후의 흐름이 전부 자동입니다.
CI → 테스트 통과 → 자동 배포까지 완료!
변경사항이 문제 없다면 바로 운영에 반영되는 구조입니다.빠른 서비스 출시를 원한다면 이 방식이 강력합니다.
🗂️ 빌드 아티팩트(산출물) 저장소는 어디에?CI/CD에서 빌드된 파일(JAR, Docker 이미지 등)은 중간에 보관됩니다.다음과 같은 저장소를 활용합니다:AWS S3DockerHub / Docker RegistryNexus Repository Manager
📈 전체 흐름 예시
graph LR A[개발자가 코드 Push] –> B[CI 서버에서 빌드 & 테스트] B –> C[테스트 통과 여부 확인] C –>|통과| D[배포 준비 또는 자동 배포] C –>|실패| E[알림 → 개발자 수정]
🚀 CI/CD 도구 모음
도구
특징
Jenkins
가장 널리 쓰이는 오픈소스 자동화 서버
GitHub Actions
GitHub 저장소와 밀접한 연동, 간편한 설정
GitLab CI/CD
GitLab에 내장된 강력한 파이프라인 기능
Travis CI
간단한 YAML 기반, 빠른 셋업
TeamCity
JetBrains 제공, 강력한 UI와 통계 기능
📝 한 줄 정리
CI/CD 파이프라인이란, 코드 변경 → 테스트 → 빌드 → 배포까지의 과정을 자동화한 일련의 흐름입니다.
🧭 CI/CD 전체 흐름도 (실무 예시)
graph TD A[개발자가 Git에 Push 또는 PR 생성] –> B[CI 트리거 - 빌드 서버 작동] B –> C[의존성 설치 & 코드 빌드] C –> D[테스트 실행 (단위/통합)] D –> E{테스트 결과 성공?} E –>|Yes| F[배포용 아티팩트 생성 (JAR/Docker)] F –> G{배포 방식} G –>|CD: 자동 배포| H[운영 서버에 자동 배포] G –>|CD: 수동 승인| I[운영자 승인 후 배포] E –>|No| J[Slack/메일 등으로 알림 후 종료]
🛠️ GitHub Actions CI/CD 예제 (Spring Boot + Docker)📄 .github/workflows/ci-cd.yml
name: CI/CD Pipeline
on: push: branches: [ “main” ] pull_request: branches: [ “main” ]
jobs: build-and-deploy: runs-on: ubuntu-latest
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
steps:
# 1. 소스코드 체크아웃
- name: Checkout source code
uses: actions/checkout@v3
# 2. JDK 설치
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# 3. Gradle 빌드
- name: Build with Gradle
run: ./gradlew clean build
# 4. Docker 이미지 빌드 및 푸시
- name: Docker Build & Push
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: your-dockerhub-username/your-app-name:latest
# 5. 서버로 SSH 배포 (옵션)
- name: Deploy via SSH
uses: appleboy/ssh-action@v1.0.0
with:
host: $
username: $
key: $
script: |
docker pull your-dockerhub-username/your-app-name:latest
docker stop your-container || true
docker rm your-container || true
docker run -d --name your-container -p 8080:8080 your-dockerhub-username/your-app-name:latest
🔐 필요한 GitHub Secrets
이름
설명
SERVER_HOST
배포 대상 서버 IP or 도메인
SERVER_USER
SSH 접속용 사용자 이름
SSH_PRIVATE_KEY
SSH 개인 키
DOCKERHUB_TOKEN
DockerHub 인증용 토큰 (필요 시)
✍️ 커스터마이징 팁Spring Boot 프로젝트면 ./gradlew build 이후 생성되는 build/libs/*.jar 파일을 직접 배포하거나,Docker 환경이라면 컨테이너 기반 배포로 구성합니다.위 예시는 main 브랜치 push 시 자동 실행되며, 배포 자동화까지 연계된 예입니다.
📚 참고 자료https://www.youtube.com/watch?v=sIPU_VkrguI
https://www.youtube.com/watch?v=SKILL1pT6f4
https://www.jetbrains.com/ko-kr/teamcity/ci-cd-guide/continuous-integration-vs-delivery-vs-deployment/#
지속적 통합 vs 전달 vs 배포 | TeamCity 가이드 포괄적인 TeamCity 가이드를 통해 CI(지속적 통합), 지속적 전달 및 지속적 배포의 차이점을 알아보세요. www.jetbrains.com
https://www.redhat.com/ko/topics/devops/what-is-ci-cd
CI/CD: 지속적 통합과 배포의 핵심 개념과 차이점 이해하기 CI/CD(지속적 통합/지속적 배포)는 애플리케이션 개발부터 배포까지 자동화된 프로세스로 효율성을 향상하는 방법입니다. CI/CD의 개념, 주요 툴, 구축 방법을 알아보세요 www.redhat.com
✍️ 김기성 – 오늘도 코드는 자동으로 흘러갑니다.기왕이면 안정적이고 빠르게! CI/CD는 더 이상 선택이 아니라 필수입니다.#백엔드 #CI #CD #지속적통합 #자동배포 #Jenkins #GitHubActions #매일매일