CI (Continuous Intergration) - 지속적 통합
- 설정 브랜치로 머지하면 자동으로 build, jar파일 생성
- 여러명이 하나의 코드에 대해 수정을 해도 지속적인 통합 관리가 가능함.
- 고객의 요구사항에 빠르게 대응하기 위해 나온 XP의 실천방안
CD (Continuous Deployment) - 지속적 배포
설정 브랜치로 git push > 생성된 jar파일 AWS에 업로드, 배포
빌드의 결과물을 프로덕션으로 자동, 지속 배포.
CI의 연장선 개념
아래는 ci(지속적 통합)를 위한 간단한 yml파일 준비 예시
# 브랜치는 main(최종 dev 배포만을 위한 브랜치) - dev(각 개발 브랜치 합치는 브랜치{빌드 및 테스트 검사}) - feature/1-어쩌구(각 개발 브랜치)
name: Java CI with Gradle
# 'feature/'로 시작하는 브랜치에서 push하면 워크플로우를 실행.
on:
push:
branches:
- 'feature/*'
permissions:
contents: read
# ubuntu-latest 경로에서 실행
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
# 1. 워크플로우 실행 전에 checkout 필요.
- uses: actions/checkout@v3
# 2. JDK 17 버전 설치 (다른 JDK 버전 설치 가능.)
- name: JDK 17 설치
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# 3. gradle clean build 및 test 실행.
- name: Gradle로 빌드 및 테스트
run: ./gradlew clean build test
# 4. 빌드 및 테스트가 성공 ? merge : false
# git merge "${GITHUB_REF#refs/heads/}" --no-ff 명령 = 현재 브랜치(푸시하려는 브랜치)의 변경 사항을 다른 브랜치로 병합하는데 사용
# ${GITHUB_REF}는 refs/heads/branch-name 형식으로 현재 브랜치의 전체 참조를 포함하는 GitHub Actions에서 제공하는 환경 변수
- name: dev 브랜치로 병합
if: ${{ success() }}
# 빌드와 테스트가 성공한 경우 아래 실행.
run: |
git checkout dev
git merge "${GITHUB_REF#refs/heads/}" --no-ff
git push origin dev
개발자가 직접 코드를 병합하고 빌드, 테스트를 검증하는 것은 많은 시간이 소요되고 귀찮으며 프로젝트의 크기가 커질수록 양이 많아질 수밖에 없다. 이를 개선한 것이 CI/CD라고 보면 편할 것 같다. -> 개발 환경 구축
그러나 CI/CD만 가지고 개발 환경이 완벽하다곤 할 수 없다. CI로 코드의 통합이 이뤄지고 CD를 통해 자동 배포가 실행되는데 새로운 서버를 배포하기 위해 기존 서버는 종료되고 새로운 서버가 시작된다. 이러한 과정 중간에 고객, 사용자가 서버를 사용할 수 없는 시간이 발생한다. 예를 들어 8080 포트 하나로 서버가 돌아가는데 자동 배포를 위해 이 8080포트의 기존 서버가 종료되고 8080포트에서 새로운 서버가 시작되는 것이다. 이를 보완하기 위해 무중단배포 라는 것이 있다.
무중단배포의 개념을 짧게나마 설명하자면 8080, 8081, 8082 등 한개 이상의 서버가 있다고 가정하겠다. 기존 배포중이던 8080서버에서 버전 업데이트가 진행되어 새로운 버전이 배포되어야 할 때 8080포트가 종료되는 동시에 8080포트와 똑같은 버전인 8081 포트가 자동적으로 배포된다. 그리고 8080포트의 업데이트가 완료되면 다시 8081포트가 꺼지는 동시에 8080포트가 연결된다. 그리고 8081 포트는 최신화 되어 임시 포트로 남아있는 것이다.
'TIL' 카테고리의 다른 글
개발자는 협업이 왜 중요하다는 건데 ? (0) | 2023.03.27 |
---|---|
SpringBoot DB 설계 - ERD 그리기 (0) | 2023.03.25 |
Stream() 사용 방법. (0) | 2023.03.20 |
백 & 프론트 협업시 발생하는 CORS에러 해결 방법. (0) | 2023.03.20 |
AWS - EC2, RDS 내 SpringBoot 프로젝트와 연결하기 (0) | 2023.03.18 |