TIL

15주차 내일배움캠프 화요일 TIL

news0516 2025. 2. 4. 23:05




1. CI(Continuous Integration)란?

  • 개념:
    개발자가 코드를 변경하여 커밋하거나 푸시할 때마다 자동으로 빌드, 의존성 설치, 린트 검사, 테스트 실행 등 일련의 검증 과정을 수행하는 시스템이다. 수행 트리거는 yml 파일 내에서 설정할 수 있다.
  • 실행 방식:
    GitHub Actions와 같은 도구를 사용하면, 커밋(push) 또는 풀 리퀘스트(PR) 이벤트가 트리거될 때 미리 작성된 워크플로우(예: ci.yml) 파일에 따라 작업들이 자동으로 실행된다.
  • 결과 처리:
    만약 린트 검사나 테스트 등에서 문제가 발생하면, 해당 단계에서 오류가 발생하여 전체 CI 파이프라인이 실패하게 됩니다. 이는 보통 브랜치 보호 정책을 통해 PR 머지가 진행되지 않도록 하여, 문제를 해결한 후에야 코드가 통합되도록 합니다.

2. CI/CD 워크플로우 파일 구성 및 명령어 사용

  • YAML 파일 구성:
    • name과 run-name으로 워크플로우 이름과 실행 메시지를 설정합니다.
    • on 섹션을 통해 어떤 이벤트(예: push, pull_request 등)가 발생할 때 실행할지 정의합니다.
  • Job 및 Step 구성:
    • CI Job:
      • 코드 체크아웃(actions/checkout)
      • Node.js 환경 설정(actions/setup-node)
      • 의존성 설치 (npm ci)
      • 린트 검사 (npm run lint)
      • 테스트 실행 (npm run test:ci)
    • CD Job:
      • CI Job의 성공 후 실행되도록 needs를 사용하여 의존성을 설정합니다.
      • 다시 코드 체크아웃 및 Node.js 환경 설정 후, 배포 스크립트(예: npm run deploy)를 실행합니다.
  • 쉘 명령어 사용 예시:
    • echo: 로그 메시지를 출력하여 현재 환경(이벤트, 브랜치, OS 등)을 확인.
    • ls: 작업 디렉토리 내 파일 목록을 출력해 디버깅에 도움.
    • npm ci와 npm run lint, npm run test:ci: 각각 의존성 설치, 린트 검사, 테스트 실행을 수행.

3. 자동 배포(CD: Continuous Deployment/Delivery)

  • CD의 역할:
    CI 작업(코드 빌드, 테스트 등)이 성공하면, 자동으로 실제 배포 단계로 진행하여 최신 코드를 서버나 도메인에 배포합니다.
  • 배포 스크립트:
    package.json에 배포 관련 스크립트(예: "deploy": "npm run deploy:prod")를 정의한 후, 워크플로우 파일의 CD Job에서 해당 명령어를 실행하도록 구성합니다.
  • CD 워크플로우 설정 예시:
    • 별도의 CD Job을 생성하고, CI Job이 성공한 후(needs: ci) 실행합니다.
    • 배포 과정에서 필요한 인증 정보(예: API 토큰, SSH 키 등)는 GitHub Secrets에 저장해 사용합니다.
    • 배포 도메인이나 기타 환경 정보는 GitHub Environments에 설정할 수 있으며, 워크플로우 파일 내 environment 키워드를 통해 참조합니다.

4. GitHub Environments와 Secrets의 역할

  • GitHub Environments:
    • 배포 대상(예: production, staging 등)에 대한 정보를 관리합니다.
    • 배포 도메인, 배포 전 승인 절차 등을 설정할 수 있으며, 워크플로우 파일에서 environment 키워드를 통해 자동으로 적용할 수 있습니다.
  • GitHub Secrets:
    • API 토큰, SSH 키, 비밀번호 등 민감한 정보를 안전하게 저장합니다.
    • 워크플로우 파일 내에서 ${{ secrets.Your_Secret_Name }}로 참조하여, 배포 스크립트나 기타 작업에서 자동으로 사용할 수 있습니다.

5. 질문 요약

  • CI는 변경사항이 커밋되면 자동으로 빌드, 린트 검사, 테스트 등 작업을 실행하여 코드 품질을 검증합니다.
    • CI 단계에서 문제가 발생하면 로그에서 오류를 확인하고 수정해야 하며, 브랜치 보호 정책에 따라 PR 머지가 차단될 수 있습니다.
  • 배포 스크립트만으로는 자동 배포가 되지 않으며,
    • CI/CD 도구(예: GitHub Actions)를 사용해 워크플로우 파일을 작성해야 합니다.
    • 배포를 위해 package.json에 배포 스크립트를 정의하고, CD Job에서 이를 실행하는 방식으로 구성합니다.
  • CD 워크플로우는
    • CI Job이 성공한 후 자동으로 실행되도록 구성되며,
    • GitHub Secrets와 Environments를 사용해 필요한 인증 정보와 환경설정을 적용한 후 배포 명령어(예: npm run deploy)를 실행합니다.