Post

[매일매일] CI/CD 파이프라인이란? – 지속적인 개발 흐름의 핵심

개발한 코드를 자동으로 빌드하고 테스트하고, 문제 없이 잘 되면 배포까지 쭉!이게 바로 우리가 말하는 CI/CD 파이프라인입니다.이번 글에서는 CI(지속적 통합), CD(지속적 전달/배포) 의 개념부터 실제 도구까지 핵심만 정리해봅니다.

✅ CI (Continuous Integration) – 코드는 매일매일 합쳐야 맛이지!

“작은 변경을 자주! 그리고 빠르게 확인하자”

CI는 개발자가 작업한 코드를 공통 저장소(Repository) 에 자주 병합(Merge)하면서,매 병합마다 자동으로 빌드 + 테스트 를 수행하는 방식입니다.

✅ 왜 중요한가요?실시간으로 버그를 빠르게 찾고통합 시 충돌을 최소화하며코드 퀄리티를 유지할 수 있습니다​🔧 예시 도구GitHub ActionsJenkinsTravis CIGitLab CI

✅ CD – 이름이 같아도 두 가지 의미?CD는 두 가지로 나뉩니다.1. Continuous Delivery (지속적 전달)

자동 배포 바로 직전까지, 운영자가 수동 승인만 하면 배포됨.

CI → 테스트 통과 → 빌드 결과(artifact) 생성 → 배포 대기

운영자가 직접 눌러야 배포되므로 “신중한 팀”에 적합합니다.

  1. 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 #매일매일

This post is licensed under CC BY 4.0 by the author.