devOps

Github Action으로 시작하는 DevOps: CI/CD 파이프라인 구축 가이드

2024.12.07개발팀장ㅣDerek

 

DevOps란 무엇인가? 🤔

 

DevOps는 개발(Development)과 운영(Operations)을 통합한 소프트웨어 개발 방법론입니다. 단순히 기술 도입에 그치지 않고, 문화(Culture), 프로세스(Process), 그리고 도구(Tools)를 결합해 지속적인 개선을 목표로 합니다. 이를 통해 개발 속도를 높이고 협업을 강화하며, 소프트웨어 품질을 향상시키는 것을 목적으로 합니다.

 

DevOps의 주요 원칙 💡

 

  1. 자동화(Automation)를 통해 반복적인 작업을 제거하여 효율성 증대
  2. 피드백 루프(Feedback Loop)를 활용한 지속적인 개선
  3. 협업(Collaboration)을 통한 팀 간의 경계 해소 및 시너지 창출

 

DevOps는 단순히 '어떤 도구를 사용하느냐'의 문제가 아니라 개발 조직의 문화와 사고방식을 바꾸는 데 초점을 맞춥니다. 이제 DevOps의 핵심 요소 중 하나인 CI/CD에 대해 알아보겠습니다.


 

CI/CD 파이프라인의 개념과 구현 🛠️

 

CI/CD란 무엇인가요?

 

CI/CD는 지속적인 통합(Continuous Integration)지속적인 배포(Continuous Deployment)를 의미합니다. 이는 개발 및 배포의 반복적인 프로세스를 자동화하여 팀 생산성과 코드 품질을 동시에 향상시키는 DevOps의 핵심 구성 요소입니다.

 

1. CI(Continuous Integration)

 

  • 개발자가 작성한 코드를 공유 저장소에 자주 병합(Merge)합니다.
  • 코드 병합 시, 자동화된 빌드 및 테스트를 통해 코드 품질동작 안정성을 확보합니다.

     

2. CD(Continuous Deployment)

 

  • CI 결과물을 자동으로 운영 환경(Production Environment)에 배포합니다.
  • 배포 주기가 짧아져, 사용자 피드백을 신속하게 반영할 수 있습니다.

     

CI/CD 파이프라인 구성 🛤️

 

  1. 코드 병합 시 자동 빌드 및 테스트 실행
  2. 테스트 통과 시 운영 환경에 자동 배포
  3. 모니터링 도구를 통한 배포 후 성능 확인 및 검증

     

대표적인 CI/CD 구현 도구 🔧

 

  • GitHub Actions: GitHub 저장소에서 직접 통합 및 배포 자동화 가능
  • GitLab CI/CD: GitLab에 내장된 CI/CD 기능으로, 단일 플랫폼에서 통합 가능
  • Jenkins: 오픈소스 CI 도구로, 플러그인 생태계가 풍부

     


 

DevOps에서의 자동화 도구 활용 🌟

 

DevOps의 성공은 효율적인 자동화에 달려 있습니다. DevOps 환경에서 널리 사용되는 세 가지 대표적인 자동화 도구를 살펴보겠습니다.

 

GitHub Actions: GitHub 저장소에 최적화된 CI/CD 플랫폼

 

  • 특징: GitHub의 저장소와 직접 연동되며, 워크플로우 자동화에 최적화된 도구

     

  • 장점

     

    • GitHub 내에서 CI/CD를 설정 및 관리할 수 있음
    • Marketplace에서 수많은 액션(Action)을 활용해 워크플로우를 쉽게 확장 가능
    • 간단한 .yml 파일로 파이프라인 설정 가능

       

  • 사용 사례:

     

    1. 코드 푸시(Push) 시 자동 빌드 및 테스트 실행
    2. 특정 브랜치 병합 시 프로덕션 환경에 배포
    3. 코드 변경 시 Lint, 테스트 및 컨테이너 이미지 생성 자동화

       

GitHub Actions는 GitHub를 사용 중인 팀에게 매우 강력한 도구로, 기존 워크플로우에 간단히 통합할 수 있다는 점에서 많은 사랑을 받고 있습니다.

 

Jenkins: 오픈소스 CI 도구

 

  • 특징: 강력한 플러그인 생태계와 직관적인 GUI 제공

     

  • 장점: 다양한 빌드 워크플로우를 지원하며, 사용자 요구에 따라 쉽게 확장 가능

     

  • 사용 사례:
    1. 코드 병합 시 테스트와 빌드 자동화
    2. 배포 전 성능 테스트 및 검증

       

GitLab CI/CD: 통합된 CI/CD 플랫폼

 

  • 특징: GitLab의 저장소와 연동되어 한 플랫폼 내에서 버전 관리와 CI/CD를 모두 제공

     

  • 장점: 간단한 YAML 파일로 파이프라인을 설정 가능

     

  • 사용 사례:
    1. 코드 커밋 트리거로 자동화된 배포 파이프라인 실행
    2. Docker 컨테이너 기반 배포 지원

       

이처럼 자동화 도구는 팀의 생산성을 높이고, 코드 품질을 유지하는 데 중요한 역할을 합니다.

 


 

GitHub Actions를 활용한 CI/CD 스크립트 예제 🔧

 

GitHub Actions는 CI/CD 프로세스를 자동화하는 데 매우 유용한 도구입니다. 간단한 YAML 파일로 워크플로우를 설정할 수 있어, 초보자도 쉽게 접근 가능합니다.

다음은 GitHub Actions를 사용해 기본적인 CI/CD 파이프라인을 설정하는 예제입니다.

 

name: CI/CD Pipeline

on:
  push:
    branches:
      - main  # main 브랜치로 푸시될 때 실행
  pull_request:
    branches:
      - main  # main 브랜치에 대한 PR 생성 시 실행

jobs:
  build:
    runs-on: ubuntu-latest  # 실행 환경: 최신 우분투

    steps:
      # 1. 코드 체크아웃
      - name: Checkout code
        uses: actions/checkout@v3

      # 2. Node.js 환경 설정
      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '16'  # 사용할 Node.js 버전

      # 3. 의존성 설치
      - name: Install dependencies
        run: npm install

      # 4. 코드 테스트
      - name: Run tests
        run: npm test

  deploy:
    needs: build  # build 작업 완료 후 실행
    runs-on: ubuntu-latest

    steps:
      # 1. 코드 체크아웃
      - name: Checkout code
        uses: actions/checkout@v3

      # 2. 배포 스크립트 실행 (예: AWS S3, Heroku, Docker 등)
      - name: Deploy to Production
        run: echo "배포 스크립트를 여기에 작성하세요!"

 

 

주요 구성 요소 설명 📝

 

  • on 섹션: 어떤 이벤트가 발생했을 때 워크플로우를 실행할지 정의합니다. 위 예제에서는 pushpull_request 이벤트가 트리거입니다.
  • jobs 섹션: 각 작업(Job)을 정의합니다. 예제에서는 builddeploy 두 가지 작업이 있습니다.
  • steps 섹션: 각 작업 내에서 실행될 단계를 나열합니다. 예를 들어, checkout 단계는 코드를 가져오고, npm install은 의존성을 설치하는 단계입니다.
  •  

배포에 활용할 수 있는 도구 및 스크립트 예시 🚀

 

AWS S3에 정적 웹사이트 배포

 

 

- name: Deploy to S3
  uses: jakejarvis/s3-sync-action@v1
  with:
    args: --acl public-read --follow-symlinks --delete
  env:
    AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}  # S3 버킷 이름
    AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
    AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

 

 

Docker 이미지 빌드 및 푸시

 

 

- name: Log in to DockerHub
  uses: docker/login-action@v2
  with:
    username: ${{ secrets.DOCKER_USERNAME }}
    password: ${{ secrets.DOCKER_PASSWORD }}

- name: Build and push Docker image
  uses: docker/build-push-action@v4
  with:
    context: .
    push: true
    tags: username/repository:tag

 

 

Heroku에 배포

 

 

- name: Deploy to Heroku
  uses: akhileshns/heroku-deploy@v4.1.4
  with:
    heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
    heroku_app_name: "your-app-name"
    heroku_email: "your-email@example.com"

 

GitHub Actions는 이러한 다양한 배포 스크립트를 지원하며, GitHub Marketplace에서 수많은 플러그인을 활용할 수 있습니다.

 

DevOps 문화와 팀 협업 사례 🌍

 

DevOps의 진정한 성공은 기술보다 조직 문화에 달려 있습니다. 팀 간 협력을 강화하고, 공동 목표를 달성하기 위해서는 DevOps 철학이 조직 전반에 뿌리내려야 합니다.

 

성공 사례 💼

 

  1. Netflix

     

    • Chaos Engineering을 통해 실패를 시뮬레이션하여 시스템 안정성 강화
    • 배포 후 장애 가능성을 최소화

       

  2. Google

     

    • SRE(Site Reliability Engineering) 팀이 개발자와 운영자 간 협력을 도모
    • SLA(Service Level Agreement) 기준을 충족하며 신뢰 구축

       

이러한 사례는 DevOps가 단순한 기술 도입이 아니라, 팀 간 신뢰 형성과 책임 공유가 핵심임을 보여줍니다.

 


 

글을 마치며

 

DevOps는 단순한 기술이 아니라 팀의 협업 문화와 생산성을 변화시키는 힘을 가지고 있습니다. CI/CD 파이프라인 구축, 자동화 도구 활용, 그리고 모니터링 및 로깅 도입을 통해 DevOps의 철학을 실현할 수 있습니다. 🚀

 


 

Q&A

 

Q1: DevOps를 처음 도입하려면 어떤 단계가 필요할까요?

 

A1: DevOps 도입은 문화 구축에서 시작됩니다. 팀 간의 신뢰를 형성하고, CI/CD와 같은 핵심 프로세스를 자동화하며, 모니터링 도구를 도입해 성능을 추적하세요.

 

Q2: CI와 CD는 반드시 함께 사용해야 하나요?

 

A2: 그렇지 않습니다. 초기에는 CI만 도입해도 충분하며, 팀이 익숙해지면 CD로 확장할 수 있습니다.

 

Q3: DevOps 도구 선택 시 중요한 기준은 무엇인가요?

 

A3: 팀의 요구사항에 맞는 도구를 선택하는 것이 중요합니다. 예산, 기존 인프라, 도구의 학습 곡선 등을 고려하세요.

추천컬럼

추천컬럼 이미지

200건 이상 프로젝트 성공으로 실력이 검증된 개발 회사?

2024.09.20
추천컬럼 이미지

프로그램개발, 합리적인 가격을 위해 잊으면 안되는 MVP

2024.09.20

상담만 받아보셔도 좋습니다 긱다이브의 상담으로 업체 비교를 시작해보세요

CONTACT US