Waylog Blog

CI/CD 파이프라인 구축 with GitHub Actions

DevOps

개발자가 코드를 작성하는 시간보다 배포하는 데 쓰는 시간이 더 길다면 뭔가 잘못된 것입니다. 반복적인 테스트, 빌드, 배포 과정을 자동화하는 것. 이것이 **CI/CD (Continuous Integration / Continuous Deployment)**의 핵심이며, 현대적 개발 워크플로우의 꽃입니다. 수많은 CI 도구(Jenkins, CircleCI 등)가 있지만, GitHub 저장소와 가장 완벽하게 통합되는 GitHub Actions가 대세로 자리 잡았습니다.

1. CI (지속적 통합): 버그를 미리 잡자

여러 개발자가 동시에 코드를 수정하다 보면 충돌이 나거나, 남의 코드를 망가뜨리기 쉽습니다. CI는 PR(Pull Request)이 올라올 때마다 자동으로 테스트를 돌려서 "이 코드는 안전하다"는 것을 검증해 줍니다.

name: CI
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      - run: npm ci
      - run: npm test

이제 테스트를 통과하지 못한 코드는 Merge 버튼이 비활성화되도록 설정할 수 있습니다. 메인 브랜치의 신성함을 지키는 문지기인 셈입니다.

2. CD (지속적 배포): 클릭 한 번으로 배포하기

테스트가 통과된 코드를 실제 서버에 올리는 과정입니다. 과거에는 FTP로 파일을 업로드하거나 SSH로 접속해서 git pull을 쳤지만, 이제는 자동화가 답입니다. AWS S3에 정적 파일을 올리거나, Docker 이미지를 빌드해서 레지스트리에 쏘는 작업을 워크플로우에 정의할 수 있습니다.

3. GitHub Actions의 장점

  • 접근성: 별도의 서버 구축이 필요 없습니다. .github/workflows 폴더에 YAML 파일만 만들면 됩니다.
  • 마켓플레이스: 수많은 개발자가 만들어둔 액션(AWS 로그인, 슬랙 알림 등)을 uses 키워드로 가져다 쓰기만 하면 됩니다. 레고 블록 조립하듯 파이프라인을 구축할 수 있습니다.
  • 비용: 공개 저장소(Public Repo)는 무제한 무료입니다.

4. 모범 사례 (Best Practices)

  • Secrets 관리: AWS 키나 DB 비밀번호 같은 민감 정보는 절대 코드에 적지 말고, GitHub Repository Secrets에 저장해서 변수로 불러와야 합니다.
  • 캐싱 활용: 매번 npm install을 새로 하면 시간이 오래 걸립니다. actions/cache를 사용하여 의존성 설치 시간을 단축하세요.
  • 단계적 배포: dev 브랜치에 푸시하면 개발 서버로, main 브랜치에 푸시하면 운영 서버로 배포되게 나누는 것이 좋습니다.

자동화된 파이프라인은 개발자에게 "자유"를 줍니다. 배포 걱정은 기계에게 맡기고, 우리는 더 가치 있는 코드 생산에 집중합시다.