[백엔드 기초] CI / CD

2025. 11. 12. 17:46·Spring/백엔드 기초

💡 오늘의 학습목표

1. CI/CD 와 DevOps문화에 대해 이해하고 구축할 수 있다.

2. AWS CodePipeline 생성 및 실행하고, AWS CodeDeploy 생성할 수 있다.

3. CI/CD를 이용하여 자동 배포를 진행할 수 있다.


CI/CD

: 지속적 통합(CI - Continuous Integration)과 지속적 배포 (CD -Continuous Deployment)는 개발자들이 작업한 코드를 지속적으로 통합하고 Production으로 배포하는 프로세스까지 자동화하는 것을 의미하는 용어

즉, 개발자가 개발한 소프트웨어를 빠르고 안정적으로 배포하는 절차를 자동화하기 위한 개념

 

이러한 배포 자동화 작업에 대한 문화적, 철학적 접근법과 기술적 관행으로 DevOps가 있다.

 

DevOps

: Software Development (Dev)와 Operation (Ops) 라는 두 개의 용어가 합쳐져 애플리케이션과 서비스를 빠른 속도로 제공할 수 있도록 조직의 역량을 높이는 개발 문화와 도구의 조합을 의미

 

1️⃣ AWS Code Pipeline

: 코드 변경 사항을 소스 저장소에서 감지하여 프로덕션 환경까지 자동으로 릴리스하는 전체 워크플로우를 시각화하고 자동화하는 CI/CD 서비스이다.

파이프라인은 여러 단계로 구성되며, 각 단계에서 AWS CodeBuild를 사용해 코드를 빌드 및 테스트하고 AWS CodeDeploy를 사용해 실제 배포를 수행하도록 통합할 수 있다.

2️⃣ AWS Code Deploy

: EC2, ECS, Lambda 등 대상 환경에 새 애플리케이션 버전을 안전하게 배포하는 자동화 서비스로, 다운타임을 최소화하는 롤링 업데이트나 블루/그린 배포 전략을 지원한다.

 

두 서비스를 함께 사용하면 AWS 환경에 최적화된 강력하고 유연한 배포 자동화 파이프라인을 구축하여신속하고 안정적으로 서비스를 업데이트 할 수 있다.

 

다양한 CI/CD 툴의 특징 이해하기

1️⃣ Jenkins

: CI/CD 중 가장 오래된 툴로, 자동화된 비서처럼 코드를 수정하거나 기능을 추가하면 자동으로 확인하고 결과를 알려준다.

 

2️⃣ CircleCI

: 클라우드에서 작동하는 도구로, 코드를 업로드하면 알아서 빌드(코드 실행 가능 여부 확인)하고 테스트를 실행해준다. 

 

3️⃣ Gitlab CI/CD

: GitHub와 동일한 소스코드 관리 플랫폼으로 GitLab의 CI/CD는 기본적으로 포함된 기능, 코드를 작성하고 GitLab에 업로드하면 자동으로 빌드, 테스트, 배포 과정을 처리한다.

 

4️⃣ GitHub Action

: GitHub에 내장된 CI/CD 플랫폼으로 코드 변경사항을 자동으로 빌드, 테스트, 배포할 수 있게 해준다.

저장소 내 .github/workflows 디렉토리에 YAML 파일을 작성하여 push 나 pull request 같은 이벤트가 발생할 때 실행될 워크플로우를 정의한다.

 

기존 배포 과정 생각해보기

1️⃣ 저장소에 매번 새로 pull 해주는 작업을 사람이 해야하는 것

: 배포할 때마다 서버에 소스코드를 pull 해주거나, 작업이 누락된 채로 서버 신규배포가 발생했을 때 이슈 발생 가능성이 있음 

 

2️⃣ jar 파일 빌드하기

: 소스코드를 pull 해온 이후, 더 높은 우선순위로 인해 jar 파일 빌드 및 배포과정이 누락되는 이슈가 발생할 수 있음

 

3️⃣ 환경 변수 설정하기

: 환경변수의 내용의 변화로 인해 수정이 필요한 경우에서 변경 누락을 했을때 이슈가 발생할 수 있음

 

4️⃣ 서비스 파일 등록 & 재시작하는 로직을 누락했을 때

: 서비스 파일등록 절차누락으로 인해 EC2 터미널을 벗어났을 때 서비스가 에러를 발생시키게 됨 

 

👉 모든 에러 및 이슈 발생은 휴먼에러로 인해 생길 수 있는 사례들이라고 볼 수 있다.

 

CI/CD 파이프라인 구성 요소

0️⃣ 전체 흐름

: CI/CD를 구성하기 위한 전체 흐름은 아래와 같다.

[Source] → [Build] → [Test(Optional)] → [Artifact 저장] → [Deploy]

① 코드 변경(Push)

② 자동 빌드 + 테스트

③ 결과물 생성 및 저장

④ 자동 배포

 

1️⃣ Source - 코드 변경 감지 및 트리거

  • 핵심 역할 : 개발자의 코드 변경 (Push, Merge 등)을 감지해 파이프라인을 자동으로 재시작
  • 일반 도구 : GitHub, GitLab, Bitbucket, AWS CodeCommit 등
  • 대표 트리거 예시
    • main 브랜치에 코드 푸시
    • Pull Request Merge
    • 특정 태그 생성 (v1.0.0 등)

 

2️⃣ Build - 실행 가능한 산출물 만들기

  • 핵심 역할 : 코드를 컴파일하거나 패키징하여 실행 가능한 형태 (JAR, Docker 이미지 등)로 만듦
  • 일반 도구 : Jenkins, GitHub Actions, GitLab CI, Circle CI, AWS CodeBuild, Azure Pipelines 등
  • 일반 작업 예시
    • 의존성 설치 (OpenJDK)
    • 단위 테스트 실행 (규무가 큰 서비스일 경우 반드시 수행)
    • 애플리케이션 빌드 (java -jar)
    • 결과물 아카이빙 (S3)

 

3️⃣ Artifact - 빌드 결과물 저장 및 버전 관리

  • 핵심 역할 : 빌드된 결과물을 안전하게 저장하고 버전 관리함
  • 일반 도구 : S3, Nexus, JFrog Artifactory, Docker Registry (ECR, Docker Hub)
  • 예시 
    • build/libs/payment-system-0.0.1-SNAPSHOT.jar
    • myservice:v1.2.3 (Docker 이미지)

 

4️⃣ Deploy - 자동 배포

  • 핵심 역할 : 검증된 결과물을 테스트, 스테이징, 프로덕션 환경에 자동 배포
  • 일반 전략
    • Blue/Green Deployment : 새 버전과 구 버전을 병렬로 운영 후 전환
    • Rolling Update : 일정 비율씩 새 버전으로 교체
    • Canary Release : 일부 사용자에게만 새 버전 제공 후 점진적 확장
  • 도구 예시
    • Jenkins
    • GitLab CD
    • AWS CodeDeploy

 

CI/CD 파이프라인으로 자동화할 수 있는 것들

 

구분 자동화되는 주요 행동 설명
1️⃣ 변경 감지 자동화 코드 변경이나 Pull Request 발생 시
파이프라인 자동 시작
사람이 직접 빌드 명령을 내리지 않아도 됨
2️⃣ 환경 준비 자동화 빌드•테스트•배포에 필요한 OS, 의존성, 환경변수, 컨테이너 자동 세팅 일관된 실행 환경을 보장
3️⃣ 품질 검증 자동화 단위 테스트, 통합 테스트, 코드 스멜/보안 취약점 검사 자동 실행 코드 품질 확보
4️⃣ 아티팩트 생성 및 버전 관리 자동화 빌드 결과물 생성 → 저장소 업로드 → 버전 태깅 결과물 관리 자동화
5️⃣ 배포 파이프라인 실행 자동화 스테이징 → 운영 등 환경별 순차 배포 자동화 환경 간 일관성 확보
6️⃣ 배포 후 검증 자동화 헬스 체크, API 응답 확인, smoke test 자동 수행 배포 성공 여부 자동 판별
7️⃣ 롤백 자동화 배포 실패 시 이전 버전으로 자동 복귀 장애 시 신속한 복구
8️⃣ 알림 및 승인 자동화 빌드•배포 결과를 Slack/메일로 알림, 승인 요청 자동 발송 협업 자동화
9️⃣ 인프라 프로비저닝 자동화 서버•네트워크•IAM 등 클라우드 리소스 생성 자동화 (IaC) 인프라 관리 자동화
🔟 모니터링 & 피드백 루프 자동화 로그 수집 → 메트릭 분석 → 경보 → 파이프라인 개선 DevOps 주기 완성 

 

CI/CD 파이프라인 구축하기

✅ AWS IAM(Identity and Access Management)은 AWS 클라우드 환경에 있는 수많은 리소스에 대해 누가, 무엇을 할 수 있는지를 중앙에서 관리하는 서비스 

 

AWS CodePipeline 생성하기
실습과정 기록하기

 

AWS CodeDeploy 생성하기

(이슈 해결중..)

'Spring > 백엔드 기초' 카테고리의 다른 글

[개념정리] WebSocket 과 STOMP  (0) 2025.12.02
[백엔드 기초] 데이터베이스 기초  (0) 2025.11.13
[백엔드 기초] 클라우드 개념 이해하기 (보충작성 필요)  (1) 2025.11.11
[백엔드 기초] Validation 개념 정리  (0) 2025.10.30
[백엔드 기초] RestTemplate  (0) 2025.10.24
'Spring/백엔드 기초' 카테고리의 다른 글
  • [개념정리] WebSocket 과 STOMP
  • [백엔드 기초] 데이터베이스 기초
  • [백엔드 기초] 클라우드 개념 이해하기 (보충작성 필요)
  • [백엔드 기초] Validation 개념 정리
stark77
stark77
하마의 IT 자기개발 이모저모, 백엔드 개발자로 거듭나기
  • stark77
    하마의 개발자 성장일기
    stark77
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 컴퓨터구조와 운영체제
        • 컴퓨터구조
        • 운영체제
      • SQL 기초
      • Spring
        • 백엔드 기초
        • Spring 실습
      • JAVA
        • Java 실습
      • HTML&CSS
        • HTML&CSS 실습
      • Git&GitHub
        • Git&GitHub 실습
      • 내배캠 끄적끄적
        • Today I Learned
      • 유용한 툴 및 사이트 정리
      • 취미
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Github
    String.format
    HTML&CSS
    백엔드 기초다지기
    jsp
    Til
    git
    SpringSecurity
    다형성
    RestTemplate
    thymleaf
    객체지향
    Stomp
    algorithm
    java
    웹소켓
    MVC
    객체지향프로그래밍
    네트워크 기초
    Spring
    프로세스와 쓰레드
    Java 문법기초
    백엔드 기초
    경합조건과 교착상태
    Spriingboot
    JPA
    for문
    WebSocket
    실시간 데이터 처리
    BEAN
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
stark77
[백엔드 기초] CI / CD
상단으로

티스토리툴바