Continuous Integration (CI, 지속적 통합): CI는 개발자들이 작성한 코드를 자동으로 통합하는 과정을 의미합니다. 여러 개발자가 동시에 작업한 코드가 하나로 통합되어 빌드 및 테스트되며, 코드 품질을 유지하고 충돌을 방지하는 데 도움을 줍니다.
Continuous Delivery (CD, 지속적 제공): CD는 CI를 통해 통합된 코드를 자동으로 테스트, 빌드하여 언제든지 배포할 수 있는 상태로 유지하는 과정입니다. 애플리케이션을 언제든지 제품 환경에 출시할 수 있도록 준비되어 있으며, 수동으로 배포하는 번거로움을 줄여줍니다.
Continuous Deployment (CD, 지속적 배포): CD는 CD의 한 단계로, 테스트 및 빌드된 코드를 자동으로 제품 환경에 배포하는 과정을 의미합니다. 애플리케이션의 변경사항이 자동으로 실시간으로 고객에게 제공되며, 배포 주기를 짧게 유지하여 빠른 피드백과 혁신을 가능하게 합니다.
CI/CD 자동화를 통해 개발자들은 코드의 품질을 유지하고 더욱 효율적인 작업을 수행할 수 있으며, 빠르고 안정적인 배포를 실현할 수 있습니다.
Continuous Integration (CI)은 코드를 지속적으로 통합하는 과정을 의미합니다. 이 과정에서 코드를 단순히 합치는 것뿐만 아니라 코드의 유효성을 검사하고 테스트하는 작업이 포함됩니다. CI의 주요 내용을 정리하면 다음과 같습니다:
코드 통합: CI는 개발자들이 작성한 코드를 주기적으로 통합하는 작업을 수행합니다. 이는 보통 코드 변경 사항을 관리하는 버전 관리 시스템(GitHub의 PR 등)을 통해 이루어집니다.
자동화된 테스트: CI 과정에서는 코드의 품질을 검증하기 위해 자동화된 테스트를 실행합니다. 단위 테스트, 통합 테스트, 기능 테스트 등 다양한 수준의 테스트가 포함될 수 있습니다.
유효성 검사: CI는 코드의 구문 오류, 정적 분석 결과, 의존성 충돌 등의 유효성을 검사합니다. 이를 통해 머지 후 코드가 제대로 동작할지에 대한 의문을 최소화하고 안정성을 확보합니다.
즉각적인 피드백: CI는 테스트 결과 및 유효성 검사를 실시간으로 피드백해줍니다. 문제가 발견되면 해당 정보를 개발자에게 전달하여 빠르게 문제를 파악하고 수정할 수 있도록 도움을 줍니다.
CI를 통해 코드의 지속적인 통합과 테스트를 자동화함으로써 개발자는 코드 변경의 안정성을 확보하고 효율적으로 작업할 수 있습니다. 또한, 즉각적인 피드백을 통해 문제를 신속하게 대응하고 품질을 개선할 수 있습니다.
Continuous Deployment (CD)는 Continuous Integration (CI) 과정을 통해 성공적으로 통합된 코드를 실제 사용자가 사용하는 프로덕션 환경에 자동으로 배포하는 것을 의미합니다. CD는 종종 Continuous Delivery (CD)와 혼용되어 사용되는데, 이 둘은 다음과 같은 의미를 갖습니다:
Continuous Delivery (CD): Continuous Delivery는 CI 과정을 통해 개발된 코드를 개발환경에서 프로덕션 환경으로 자동으로 전달(배포)하는 것을 의미합니다. 이 단계에서는 배포를 위한 마지막 검증 및 테스트가 진행되며, 배포 준비가 완료된 코드는 언제든지 배포될 수 있는 상태를 유지합니다.
Continuous Deployment (CD): Continuous Deployment는 Continuous Delivery의 확장된 개념으로, 자동화된 배포 프로세스를 통해 개발된 코드가 실제 사용자가 접근하는 프로덕션 환경까지 자동으로 배포되는 것을 의미합니다. CI/CD 파이프라인을 통해 테스트를 통과한 코드는 자동으로 프로덕션 환경에 배포되어 사용자에게 즉시 제공됩니다.
CD를 통해 개발자는 코드 변경 사항을 빠르게 사용자에게 전달하고, 소프트웨어의 지속적인 개선과 배포를 실현할 수 있습니다. 자동화된 배포 프로세스를 통해 개발자는 배포 과정에서 발생할 수 있는 인간의 실수를 최소화하고, 빠른 피드백을 통해 안정적인 서비스를 제공할 수 있습니다.
CI/CD는 자동화된 파이프라인을 통해 일련의 과정을 처리하며, CI/CD 플랫폼을 사용하여 이를 구축하고 관리합니다. CI/CD 플랫폼은 설치형과 클라우드형으로 구분됩니다.
설치형 CI/CD 플랫폼:
클라우드형 CI/CD 플랫폼:
CI/CD 플랫폼을 선택할 때는 설치형과 클라우드형의 장단점을 고려하여 개발자의 요구사항과 프로젝트의 특성에 맞게 선택해야 합니다.
어느 정도 규모가 있는 개발팀은 CI/CD를 구축하는 이유는 효율성 때문입니다. CI/CD 구축에는 노력과 비용이 필요하지만, 이를 통해 개발자들은 배포 과정에 대한 수동 작업을 줄이고 프로덕트의 개발과 개선에 더 많은 리소스를 투입할 수 있습니다.
다음은 CI/CD 구축의 효율성에 대한 이유입니다:
빠른 배포와 빠른 피드백:
자동화된 품질 보증:
효율적인 리소스 활용:
지속적인 개선과 혁신:
이러한 이유로 개발팀은 CI/CD를 구축하여 개발과 배포 과정을 자동화하고, 개발자들의 업무 효율성과 소프트웨어 품질 향상을 이루고자 합니다.
GitHub Actions는 GitHub에서 제공하는 클라우드형 CI/CD 툴입니다. GitHub에서 자체적으로 제공하기에 GitHub 레파지토리와의 연동이 쉽고, 레파지토리 안에서 CI/CD까지 함께 구축하고 관리할 수 있다는 이점으로 인해 현재 많은 인기를 얻고 있습니다.
출처: GitHub Actions 공식문서(https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions)
use
키워드와 함께 사용할 수 있으며 브랜치로 체크아웃하고, 환경을 설정하는 등 복잡하지만 자주 사용되는 과정들을 미리 정의해두고 편리하게 활용할 수 있습니다.정적 웹사이트들은 S3를 통해서 호스팅 할 수 있습니다. 하지만 매번 CRA의 dependencies를 설치하고, build script를 실행하고, AWS에 로그인해서 S3 버킷에 들어간뒤에, 기존의 자료들을 삭제하고 새로운 파일들을 업로드하는 것은 꽤나 번거로운 일입니다. 이제 GitHub Actions를 통해서 아래의 과정을 자동화 시켜보겠습니다.
name: CI/CD
on:
push:
branches:
- master
workflow_dispatch:
jobs:
cicd:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: "master"
- run: npm ci
- run: npm run test
- run: npm run build
- name: deploy to s3
uses: jakejarvis/s3-sync-action@master
with:
args: --delete
env:
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: 'ap-northeast-2'
SOURCE_DIR: 'build'
개발자가 처음 개발을 시작할 때는 주로 "프론트엔드 개발"이라고 하면 UI와 기능을 코드로 개발하는 것이 전체 업무로 오해할 수 있습니다. 하지만 실제로 개발자의 역할은 기능 개발에만 한정되지 않습니다.
현대의 IT 팀에서 개발자는 다음과 같은 역할을 맡고 있습니다:
기획과 분석:
기능 개발:
배포 및 운영:
사용자 피드백과 개선:
기능 개발만을 담당하는 것이 아니라 배포 및 운영에 대한 이해와 책임을 가지는 이유는 다음과 같습니다:
전체 개발 과정을 이해할 수 있는 시야 확보:
문제 대응 및 트러블 슈팅:
프론트엔드 개발자도 배포에 대한 기본적인 지식과 이해를 가져야 합니다. 이를 통해 소프트웨어 개발 프로세스의 전체 과정을 이해하고, 개발한 제품이 배포 과정에서 문제가 발생했을 때 적절한 대응을 할 수 있습니다.