웹 개발, 앱 개발 등을 하다 보면 CI/CD라는 용어를 자주 듣게 되는데, 정확히 무엇을 의미하는 걸까? 이번 포스팅에서는 CI/CD의 개념과 함께 GitLab CI/CD를 활용해 Cloudtype으로 자동 배포하는 방법까지 알아볼 예정이다!
CI/CD는 Continuous Integration(지속적 통합)과 Continuous Delivery/Deployment(지속적 배포)의 약자로, 애플리케이션 개발 단계를 자동화하여 애플리케이션을 더 짧은 주기로 고객에게 제공하는 방법이다.
지속적 통합은 개발자들이 코드 변경사항을 중앙 저장소에 자주 병합하는 개발 방식이다.
👉 개발자가 코드를 커밋할 때마다 자동으로 빌드되고 테스트되어 문제를 빠르게 발견하고 해결할 수 있음
CI의 주요 기능
예를 들어, 팀원 A가 기능을 개발하고 있고 팀원 B가 다른 기능을 개발하고 있을 때, 두 개발자가 동시에 같은 파일을 수정하면 충돌이 발생할 수 있다. CI를 사용하면 이러한 충돌을 초기에 발견하고 해결할 수 있다.
지속적 배포는 개발자의 변경사항이 테스트를 통과한 후 자동으로 프로덕션 환경까지 릴리스되는 방식이다.
⠀
Continuous Delivery(지속적 전달)와 Continuous Deployment(지속적 배포)는 비슷하지만 약간 다르다.
CD의 주요 기능
개발 생산성 향상
➜ 반복적인 작업을 자동화하여 개발자가 코드 작성에 더 집중할 수 있음
버그 조기 발견
➜ 지속적인 통합과 테스트로 버그를 초기에 발견하고 수정 가능
배포 위험 감소
➜ 작은 변경사항을 자주 배포하므로 각 배포의 위험이 적음
신속한 피드백
➜ 개발자가 변경한 내용이 즉시 테스트되고 결과를 확인할 수 있음
안정적인 릴리스
➜ 자동화된 테스트와 배포 프로세스로 안정적인 릴리스 가능
이제 실제로 GitLab CI/CD를 구성하여 Cloudtype으로 자동 배포하는 방법에 대해 알아보자!
우선 Cloudtype 문서에 접속해야 한다.
https://docs.cloudtype.io/guide/cicd/gitlab-cicd



ssh-rsa --- @cloudtype



이렇게 나오면 정상적으로 생성된 거임
이제 API key 생성해야함.
인증 메뉴를 선택하고 API 키 항목의 새로운 API 키 생성 버튼을 클릭합니다.

생성된 API 키는 아래와 같다.
eyJ --- 6aAI
Settings > CI/CD 페이지로 이동하고 Variable 항목의 Add variable 버튼 클릭

다음 설정값으로 변수를 추가합니다.
API_KEY_TOKEN
이제 설정 다 끝나서, 프로젝트에서 .gitlab-ci.yml 파일만 설정하고 gitlab에 푸쉬하면 자동으로 배포됨
# CI/CD 파이프라인의 단계를 정의하는 섹션
# 여기서는 'deploy'라는 하나의 단계만 사용
stages:
- deploy
# 'deploy-job'이라는 작업을 정의
# 이 작업은 위에서 정의한 'deploy' 단계에서 실행됨
deploy-job:
# 작업이 실행될 Docker 컨테이너 이미지 지정
# Node.js 16 버전 환경에서 실행됨 (Vue.js 프로젝트에 적합)
image: node:16
# 캐시 설정: 빌드 간에 특정 파일이나 디렉토리를 캐시하여 성능 향상
# 여기서는 'node_modules' 디렉토리를 캐시하여 npm 패키지 재설치 시간 절약
cache:
paths:
- node_modules/
# 작업 실행 조건 설정
# 'main' 브랜치에 변경사항이 푸시될 때만 작업이 실행됨
# 다른 브랜치 변경은 이 작업을 트리거하지 않음
only:
- main
# 이 작업이 속한 단계 지정
# 위에서 정의한 'deploy' 단계에 속함
stage: deploy
# 실제 작업 내용을 정의하는 스크립트 섹션
# 각 명령어는 순차적으로 실행됨
script:
# Cloudtype CLI 전역 설치
# 클라우드타입 서비스와 상호작용하기 위한 명령줄 도구
- npm i -g @cloudtype/cli
# Cloudtype 계정에 로그인
# $API_KEY_TOKEN: GitLab 저장소에 설정된 시크릿 변수
# 이 토큰으로 인증하여 클라우드타입 API에 접근 권한 얻음
- ctype login -t $API_KEY_TOKEN
# 올바른 프로젝트로 전환
# 이 명령어로 배포 대상을 '@rmsals8/mariadb' 프로젝트의 'main' 스테이지로 지정
# 이전에는 다른 프로젝트('@rmsals8/capston')에 배포되고 있었음
- ctype use @rmsals8/mariadb:main
# .cloudtype 디렉토리 생성
# 클라우드타입 설정 파일을 저장할 디렉토리
# -p 옵션은 상위 디렉토리가 없을 경우 함께 생성
- mkdir -p ./.cloudtype
# 배포 설정 파일(vue-login.yaml) 생성
# | 문자와 함께 여러 줄의 텍스트를 작성하는 YAML 문법
# cat <<EOF > 파일명: 여러 줄의 텍스트를 파일에 작성하는 쉘 명령어
- |
cat <<EOF > ./vue-login.yaml
# 앱 이름 지정: 클라우드타입 대시보드에 표시되는 이름
name: vue-login
# 앱 유형: 'web'은 정적 웹사이트를 의미
app: web
# 앱 설정 옵션들
options:
# Node.js 버전 지정: Vue.js 프로젝트에 적합한 버전
nodeversion: "16"
# 빌드 명령어: npm run build로 Vue.js 프로젝트 빌드
build: npm run build
# SPA(Single Page Application) 모드 활성화
# 이는 Vue Router와 같은 클라이언트 측 라우팅을 지원
spa: true
# 빌드 환경 변수: 현재는 비어 있음
buildenv: []
# URL 경로 재작성 규칙: 현재는 비어 있음
rewrites: []
# 컨텍스트 정보: 소스 코드 위치 및 프리셋 정의
context:
# Git 저장소 정보
git:
# 저장소 URL: GitLab CI/CD 변수를 사용하여 현재 저장소 경로 지정
# $CI_PROJECT_NAMESPACE: 현재 GitLab 프로젝트의 네임스페이스(사용자/그룹)
# $CI_PROJECT_NAME: 현재 GitLab 프로젝트의 이름
url: git@gitlab.com:$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME.git
# 배포할 브랜치: main 브랜치의 코드가 배포됨
branch: main
# 프리셋: Vue.js 프로젝트에 맞는 빌드 및 배포 설정
preset: vue
EOF
# 생성된 설정 파일 내용 출력 (디버깅용)
# 이 명령어로 생성된 설정 파일 내용을 CI/CD 로그에서 확인 가능
- cat ./vue-login.yaml
# 클라우드타입에 배포 실행
# 위에서 생성한 설정 파일을 사용하여 애플리케이션 배포
# 이 명령어가 성공적으로 실행되면 앱이 클라우드타입에 배포됨
- ctype apply -f ./vue-login.yaml
이 파일을 프로젝트 루트 디렉토리에 생성하고 GitLab에 푸시합니다.
GitLab에 코드를 푸시하면 CI/CD 파이프라인이 자동으로 실행되고 로그가 출력됩니다. 그리고 cloudtype으로 돌아가보면, 변경사항이 적용되서 배포되었음을 확인할 수 있다.


CI/CD는 현대 소프트웨어 개발에서 필수적인 프로세스로, 개발팀의 생산성을 높이고 소프트웨어의 품질을 향상시키는 데 큰 도움이 된다. 이 글에서는 CI/CD의 개념부터 GitLab CI/CD와 Cloudtype을 연동하여 자동 배포하는 방법까지 알아봤다.
이렇게 구성된 자동화 파이프라인을 통해 개발자는 코드 작성에만 집중할 수 있고, 배포 과정은 자동화되어 생산성이 향상될 수 있다! 작은 변경사항을 자주 통합하고 배포함으로써 개발 주기를 단축하고 고객에게 더 빠르게 가치를 전달할 수 있게 된다.
추가적인 내용이나 질문이 있다면 댓글로 남겨주세요!