DevOps 개념 – CI/CD 파이프라인 구축하기

DevOps 개념 – CI/CD 파이프라인 구축하기


DevOps는 개발(Development)과 운영(Operations)을 결합한 개념으로, 소프트웨어 개발과 운영 팀 간의 협업을 촉진하여 소프트웨어 배포 주기를 단축하고 품질을 향상시키는 것을 목표로 합니다. 이번 포스팅에서는 "DevOps", "CI/CD", "파이프라인 구축"을 중심으로, CI/CD 파이프라인의 개념과 구축 방법을 설명하겠습니다. 중급 개발자를 대상으로 상세히 설명하고, 예제를 통해 실습해 보겠습니다.


DevOps란?


DevOps는 개발과 운영 팀 간의 협업을 촉진하여 소프트웨어 개발, 테스트, 배포, 모니터링 등의 과정을 자동화하고 최적화하는 방법론입니다. DevOps의 주요 목표는 지속적인 통합(Continuous Integration)과 지속적인 배포(Continuous Deployment)를 통해 소프트웨어 개발 주기를 단축하고 품질을 높이는 것입니다.


DevOps의 주요 원칙


  1. 자동화: 반복적인 작업을 자동화하여 효율성을 높입니다.
  2. 협업: 개발팀과 운영팀 간의 협업을 촉진하여 문제 해결을 가속화합니다.
  3. 지속적인 피드백: 지속적인 모니터링과 피드백을 통해 소프트웨어의 품질을 개선합니다.
  4. 스케일링: 시스템을 확장 가능하게 만들어, 증가하는 요구사항을 충족합니다.

CI/CD란?


CI/CD는 지속적인 통합(Continuous Integration)과 지속적인 배포(Continuous Deployment)를 의미합니다. CI/CD는 DevOps의 핵심 구성 요소로, 코드 변경 사항을 자동으로 테스트하고 배포하는 프로세스를 자동화하여 소프트웨어 개발 주기를 단축하고 품질을 향상시킵니다.


지속적인 통합(CI)


지속적인 통합(CI)은 개발자가 코드 변경 사항을 자주 저장소에 통합하는 방식입니다. CI 프로세스는 다음과 같은 단계를 포함합니다:


  1. 코드 커밋: 개발자가 코드 변경 사항을 버전 관리 시스템에 커밋합니다.
  2. 빌드: 코드가 빌드되고, 종속성이 해결됩니다.
  3. 테스트: 코드에 대한 자동화된 테스트가 실행됩니다.
  4. 피드백: 테스트 결과가 개발자에게 피드백으로 제공됩니다.

지속적인 배포(CD)


지속적인 배포(CD)는 CI 이후의 단계로, 빌드된 코드를 자동으로 배포하는 프로세스입니다. CD 프로세스는 다음과 같은 단계를 포함합니다:


  1. 배포: 빌드된 코드가 스테이징 환경이나 프로덕션 환경에 배포됩니다.
  2. 모니터링: 배포된 애플리케이션의 상태를 모니터링합니다.
  3. 롤백: 문제가 발생할 경우, 이전 버전으로 롤백합니다.

CI/CD 파이프라인 구축


이제 GitHub Actions를 사용하여 간단한 CI/CD 파이프라인을 구축하는 방법을 알아보겠습니다. GitHub Actions는 GitHub에서 제공하는 CI/CD 도구로, 코드 변경 사항을 자동으로 빌드하고 테스트하며, 배포할 수 있습니다.


프로젝트 설정


먼저, GitHub에 새로운 저장소를 생성합니다. 그리고 로컬에 저장소를 클론합니다.


git clone https://github.com/사용자명/저장소명.git
cd 저장소명

예제 애플리케이션


간단한 Node.js 애플리케이션을 예제로 사용하겠습니다. app.js 파일을 만들고 다음 코드를 작성합니다.


const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello, World!');
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}/`);
});

package.json 파일을 만들고 다음 코드를 작성합니다.


{
  "name": "ci-cd-example",
  "version": "1.0.0",
  "description": "CI/CD example with GitHub Actions",
  "main": "app.js",
  "scripts": {
    "start": "node app.js",
    "test": "echo \"No tests specified\" && exit 0"
  },
  "dependencies": {
    "express": "^4.17.1"
  }
}

GitHub Actions 설정


GitHub Actions 워크플로를 설정하기 위해 .github/workflows 디렉토리를 만들고, ci-cd.yml 파일을 생성합니다.


mkdir -p .github/workflows
touch .github/workflows/ci-cd.yml

ci-cd.yml 파일에 다음 내용을 작성합니다.


name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'

    - name: Install dependencies
      run: npm install

    - name: Run tests
      run: npm test

    - name: Build and deploy
      run: echo "Deploying application..."
      # 실제 배포 스크립트를 여기에 작성합니다.

이 워크플로는 다음과 같은 작업을 수행합니다:


  1. 코드 체크아웃
  2. Node.js 설정
  3. 종속성 설치
  4. 테스트 실행
  5. 빌드 및 배포

코드 커밋 및 푸시


변경 사항을 커밋하고 원격 저장소에 푸시합니다.


git add .
git commit -m "Add CI/CD pipeline with GitHub Actions"
git push origin main

GitHub 저장소로 이동하여 Actions 탭에서 워크플로가 실행되는 것을 확인할 수 있습니다.


고급 CI/CD 파이프라인


더 복잡한 CI/CD 파이프라인에서는 여러 환경에 걸쳐 다양한 단계를 추가할 수 있습니다. 예를 들어, 스테이징 환경과 프로덕션 환경에 대한 배포 단계를 추가할 수 있습니다.


스테이징과 프로덕션 배포


다음은 스테이징과 프로덕션 환경으로의 배포를 포함한 CI/CD 파이프라인 예제입니다.


name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'

    - name: Install dependencies
      run: npm install

    - name: Run tests
      run: npm test

  deploy-staging:
    runs-on: ubuntu-latest
    needs: build

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Deploy to staging
      run: echo "Deploying to staging..."
      # 실제 스테이징 배포 스크립트를 여기에 작성합니다.

  deploy-production:
    runs-on: ubuntu-latest
    needs: build

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Deploy to production
      if: github.ref == 'refs/heads/main'
      run: echo "Deploying to production..."
      # 실제 프로덕션 배포 스크립트를 여기에 작성합니다.

환경 변수 사용


배포 스크립트에서 환경 변수를 사용하는 것이 일반적입니다. GitHub Secrets를 사용하여 민감한 정보를 안전하게 저장하고 사용할 수 있습니다.


GitHub 저장소 설정에서 Secrets 탭으로 이동하여 새로운 Secret을 추가합니다. 예를 들어, PRODUCTION_API_KEY라는 Secret을 추가합니다.


워크플로 파일에서 Secret을 사용하는 방법은 다음과 같습니다:


- name: Deploy to production
  if: github.ref == 'refs/heads/main'
  run: echo "Deploying to production..."
  env:
    API_KEY: ${{ secrets.PRODUCTION_API_KEY }}
  # 실제 프로덕션 배포 스크립트를 여기에 작성합니다.

결론


CI/CD 파이프라인은 DevOps의 핵심 요소로, 소프트웨어 개발과 배포를 자동화하여 효율성과 품질을 높일 수 있습니다. 이번 포스팅에서는 GitHub Actions를 사용하여 간단한 CI/CD 파이프라인을 구축하는 방법을 설명했습니다. 더 나아가 스테이징과 프로덕션 환경으로의 배포, 환경 변수 사용 등 고급 기능을 살펴보았습니다. 이 포스팅이 CI/CD 파이프라인을 이해하고 구축하는 데 도움이 되길 바랍니다.

이 포스팅이 도움이 되셨다면, 질문이나 추가 정보가 필요하시면 언제든지 댓글로 남겨주세요.

다음 이전