Dev-ops

πŸš€ CI/CD μ›Œν¬ν”Œλ‘œμš° μ΅œμ ν™”

xeunnie 2025. 3. 23. 01:00
728x90
λ°˜μ‘ν˜•

πŸš€ CI/CD μ›Œν¬ν”Œλ‘œμš° μ΅œμ ν™”: μ˜μ‘΄μ„± 관리, ν…ŒμŠ€νŠΈ 병렬 μ‹€ν–‰, 닀쀑 Node 버전 지원 μ™„μ „ 정볡!

 

“CI/CDμ—μ„œ νŒ¨ν‚€μ§€ 버전 고정은 μ™œ ν•„μš”ν• κΉŒ? ν…ŒμŠ€νŠΈ 병렬 싀행을 ν•˜λ©΄ 속도가 μ–Όλ§ˆλ‚˜ 빨라질까? 맀트릭슀 μ „λž΅μ€ μ–΄λ–»κ²Œ ν™œμš©ν• κΉŒ?”

μ΅œμ ν™”λœ CI/CD μ›Œν¬ν”Œλ‘œμš°λ₯Ό κ΅¬μΆ•ν•˜λŠ” 핡심 μ „λž΅μ„ λͺ¨λ‘ μ‚΄νŽ΄λ³΄μž!

πŸ“Œ λͺ©μ°¨

 

1️⃣ νŒ¨ν‚€μ§€ 버전 κ³ μ • (Dependency Management)

2️⃣ ν…ŒμŠ€νŠΈ λΆ„ν•  (Sharding) & 병렬 μ‹€ν–‰ μ΅œμ ν™”

3️⃣ 닀쀑 Node 버전 지원 & 맀트릭슀 ν…ŒμŠ€νŠΈ μ „λž΅

4️⃣ μ‹€μ „ 예제 (GitHub Actions 기반)

5️⃣ κ²°λ‘ 

1️⃣ νŒ¨ν‚€μ§€ 버전 κ³ μ • (Dependency Management) πŸ—οΈ

 

πŸ“Œ μ™œ νŒ¨ν‚€μ§€ 버전 고정이 ν•„μš”ν• κΉŒ?

 

ν”„λ‘ νŠΈμ—”λ“œ CI/CD νŒŒμ΄ν”„λΌμΈμ—μ„œ νŒ¨ν‚€μ§€ 버전을 κ³ μ •ν•˜λŠ” 것은 맀우 μ€‘μš”ν•΄μš”.

🚨 이유:

CI/CD ν™˜κ²½μ—μ„œ μ‹€ν–‰ν•˜λŠ” μ½”λ“œκ°€ 개발 ν™˜κ²½κ³Ό λ‹€λ₯΄λ©΄ 예기치 μ•Šμ€ 였λ₯˜ λ°œμƒ 😨

μ’…μ†λœ νŒ¨ν‚€μ§€μ˜ μ—…λ°μ΄νŠΈλ‘œ 인해 λΆˆμ•ˆμ •ν•œ λΉŒλ“œκ°€ 생성될 수 있음

μ—¬λŸ¬ κ°œλ°œμžκ°€ 같은 ν”„λ‘œμ νŠΈλ₯Ό λ‹€λ£° λ•Œ μΌκ΄€λœ μ‹€ν–‰ ν™˜κ²½ μœ μ§€

 

βœ… ν•΄κ²° 방법:

βœ”οΈ lock νŒŒμΌμ„ μœ μ§€ (package-lock.json, yarn.lock)

βœ”οΈ νŒ¨ν‚€μ§€ 버전 λͺ…μ‹œμ μœΌλ‘œ κ³ μ • (dependencies와 devDependenciesμ—μ„œ ^λ‚˜ ~ 제거)

βœ”οΈ μ˜μ‘΄μ„± 캐싱 ν™œμš© (cache: yarn μ„€μ • λ“±)

 

πŸ“Œ CI/CDμ—μ„œ νŒ¨ν‚€μ§€ 버전 κ³ μ • 예제 (GitHub Actions)

jobs:
  install:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Cache Node.js modules
        uses: actions/cache@v3
        with:
          path: ~/.yarn/cache # Yarn Berry μ‚¬μš© μ‹œ
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-

      - name: Install dependencies
        run: yarn install --frozen-lockfile

πŸ’‘ yarn install --frozen-lockfile

package.jsonκ³Ό yarn.lock이 μΌμΉ˜ν•˜μ§€ μ•ŠμœΌλ©΄ 였λ₯˜ λ°œμƒ (μΌκ΄€λœ νŒ¨ν‚€μ§€ ν™˜κ²½ μœ μ§€)

2️⃣ ν…ŒμŠ€νŠΈ λΆ„ν•  (Sharding) & 병렬 μ‹€ν–‰ μ΅œμ ν™” 🏎️

 

πŸ“Œ Sharding (샀딩)μ΄λž€?

 

πŸš€ CI/CDμ—μ„œ **Sharding(샀딩)**은 ν…ŒμŠ€νŠΈλ₯Ό μ—¬λŸ¬ 개의 μž‘μ€ 쑰각(Shard)으둜 λ‚˜λˆ μ„œ 병렬 μ‹€ν–‰ν•˜λŠ” κΈ°λ²•μ΄μ—μš”.

즉, ν•œ 개의 λ¨Έμ‹ μ—μ„œ λͺ¨λ“  ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” λŒ€μ‹ , μ—¬λŸ¬ λ¨Έμ‹ μ—μ„œ ν…ŒμŠ€νŠΈλ₯Ό λ‚˜λˆ μ„œ μ‹€ν–‰ν•˜λ©΄ 속도가 훨씬 λΉ¨λΌμ Έμš”!

 

βœ… Sharding의 μž₯점

βœ”οΈ ν…ŒμŠ€νŠΈ 속도 κ·ΉλŒ€ν™” (Build Time 단좕!)

βœ”οΈ 병렬 μ‹€ν–‰μœΌλ‘œ μ‹€ν–‰ μ‹œκ°„ 절반 μ΄ν•˜λ‘œ κ°μ†Œ κ°€λŠ₯

βœ”οΈ 큰 ν”„λ‘œμ νŠΈμ—μ„œλ„ 효율적인 ν…ŒμŠ€νŠΈ μ‹€ν–‰

 

πŸ“Œ 예제: Cypress 병렬 ν…ŒμŠ€νŠΈ μ‹€ν–‰ (GitHub Actions)

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        shard: [1, 2, 3, 4] # 4개의 μƒ€λ“œλ‘œ λ‚˜λˆ” (ν…ŒμŠ€νŠΈ 병렬 μ‹€ν–‰)
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Install dependencies
        run: yarn install --frozen-lockfile

      - name: Run Cypress tests in parallel
        run: npx cypress run --record --parallel --group shard-${{ matrix.shard }}

πŸ’‘ μœ„ μ„€μ •μ—μ„œ Cypress ν…ŒμŠ€νŠΈκ°€ **4개의 μƒ€λ“œ(Shard)**둜 λΆ„ν• λ˜μ–΄ 싀행됨.

--parallel: 병렬 μ‹€ν–‰ μ˜΅μ…˜

--group shard-${{ matrix.shard }}: μƒ€λ“œ κ·Έλ£Ή μ„€μ •

3️⃣ 닀쀑 Node 버전 지원 & 맀트릭슀 ν…ŒμŠ€νŠΈ μ „λž΅

 

πŸ“Œ 닀쀑 Node.js 버전 지원 (Multi-Version Testing)

 

CI/CD ν™˜κ²½μ—μ„œλŠ” μ—¬λŸ¬ Node.js λ²„μ „μ—μ„œ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜λŠ” 것이 μ€‘μš”ν•΄μš”.

🚨 μ΄μœ λŠ”?

1️⃣ νŒ€ λ‚΄ λ‹€μ–‘ν•œ Node.js 버전을 μ‚¬μš©ν•˜λŠ” 경우 버전 κ°„ ν˜Έν™˜μ„± 체크 κ°€λŠ₯

2️⃣ ν”„λ‘œμ νŠΈκ°€ Node.js μ΅œμ‹  λ²„μ „μ—μ„œλ„ 정상 μž‘λ™ν•˜λŠ”μ§€ 검증

3️⃣ 라이브러리 μ—…λ°μ΄νŠΈ μ‹œ νŠΉμ • λ²„μ „μ—μ„œ λ°œμƒν•  수 μžˆλŠ” 문제 사전 발견

 

βœ… ν•΄κ²° 방법:

βœ”οΈ GitHub Actionsμ—μ„œ matrix μ „λž΅μ„ ν™œμš©ν•˜μ—¬ μ—¬λŸ¬ Node.js λ²„μ „μ—μ„œ 병렬 ν…ŒμŠ€νŠΈ μ‹€ν–‰

βœ”οΈ μ΅œμ†Œ 지원 버전과 μ΅œμ‹  λ²„μ „μ—μ„œ μ‹€ν–‰ν•˜μ—¬ 문제 λ°œμƒ μ—¬λΆ€ 확인

 

πŸ“Œ 닀쀑 Node.js 버전 ν…ŒμŠ€νŠΈ 예제 (GitHub Actions)

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [14, 16, 18] # 지원할 Node.js 버전 μ§€μ •
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}

      - name: Install dependencies
        run: yarn install --frozen-lockfile

      - name: Run tests
        run: yarn test

πŸ’‘ μœ„ μ„€μ •μ—μ„œ Node.js 14, 16, 18 λ²„μ „μ—μ„œ ν…ŒμŠ€νŠΈ 병렬 μ‹€ν–‰!

matrix.node-version을 ν™œμš©ν•˜μ—¬ μ—¬λŸ¬ 버전 ν…ŒμŠ€νŠΈ

setup-node@v3 μ•‘μ…˜μœΌλ‘œ Node.js 버전 μ„€μ •

4️⃣ μ‹€μ „ 예제 (GitHub Actions 기반 CI/CD μ΅œμ ν™”) πŸ› οΈ

name: CI/CD Workflow

on:
  push:
    branches:
      - main

jobs:
  install:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Cache dependencies
        uses: actions/cache@v3
        with:
          path: ~/.yarn/cache
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}

      - name: Install dependencies
        run: yarn install --frozen-lockfile

  test:
    needs: install
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [14, 16, 18]
        shard: [1, 2, 3, 4]
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}

      - name: Install dependencies
        run: yarn install --frozen-lockfile

      - name: Run tests in parallel
        run: npx jest --shard=${{ matrix.shard }}

βœ… 이 μ›Œν¬ν”Œλ‘œμš°μ—μ„œ ν•˜λŠ” 일:

βœ”οΈ yarn.lock을 ν™œμš©ν•œ νŒ¨ν‚€μ§€ 버전 κ³ μ •

βœ”οΈ 병렬 ν…ŒμŠ€νŠΈ μ‹€ν–‰ (Sharding)

βœ”οΈ 닀쀑 Node.js 버전 ν…ŒμŠ€νŠΈ (Matrix Strategy)

5️⃣ κ²°λ‘ : CI/CD μ„±λŠ₯을 κ·ΉλŒ€ν™”ν•˜λŠ” 방법!

 

βœ… μ˜μ‘΄μ„± 관리λ₯Ό 톡해 μΌκ΄€λœ μ‹€ν–‰ ν™˜κ²½ μœ μ§€!

βœ… Sharding을 μ‚¬μš©ν•΄ 병렬 ν…ŒμŠ€νŠΈλ‘œ 속도 μ΅œμ ν™”!

βœ… 닀쀑 Node.js 버전 ν…ŒμŠ€νŠΈλ‘œ ν˜Έν™˜μ„± 확보!

 

🎯 CI/CD의 속도와 μ•ˆμ •μ„±μ„ λͺ¨λ‘ 작고 싢은 개발자라면?

πŸ‘‰ μœ„ 방법듀을 μ μš©ν•΄μ„œ μ΅œμ ν™”λœ λΉŒλ“œ νŒŒμ΄ν”„λΌμΈμ„ λ§Œλ“€μ–΄λ³΄μ„Έμš”! πŸš€

 

🌷 μ „μ„€μ˜ κ°œλ°œμžκ°€ λ˜μ–΄λ΄…μ‹œλ‹Ή! 🌷 πŸš€

728x90
λ°˜μ‘ν˜•