π νλ‘ νΈμλ κ°λ°μλ₯Ό μν CI/CD μλ²½ κ°μ΄λ!
CI/CD(Continuous Integration & Continuous Deployment)λ μννΈμ¨μ΄ κ°λ°μ νμ μμκ° λμμ΄μ.
π μ½λ λ³κ²½ μ¬νμ΄ μλνλ λ°©μμΌλ‘ ν μ€νΈ λ° λ°°ν¬λμ΄ κ°λ° μλλ₯Ό λμ΄κ³ , μμ μ±μ 보μ₯νλ ν΅μ¬ νλ‘μΈμ€μ£ .
νΉν νλ‘ νΈμλ κ°λ°μμλ CI/CDλ₯Ό μ μ©νλ©΄ λ°°ν¬κ° νκ²° μ¬μμ§κ³ , νμν¬κ° λμ± μνν΄μ Έμ!
μ€λμ νλ‘ νΈμλ κ΄μ μμ CI/CDλ 무μμΈμ§, μ μ€μνμ§, κ·Έλ¦¬κ³ μ΄λ€ λꡬλ€μ νμ©νλ©΄ μ’μμ§ μμΈνκ² μμλ³Όκ²μ! π οΈ
πΉ CI/CDλ 무μμΈκ°?
1οΈβ£ CI(Continuous Integration, μ§μμ ν΅ν©)λ?
CIλ μ½λλ₯Ό μμ£Ό, μ§μμ μΌλ‘ ν΅ν©νλ νλ‘μΈμ€λ₯Ό μλ―Έν΄μ.
μ¦, κ°λ°μλ€μ΄ κ°μμ λ‘컬μμ μμ ν μ½λλ₯Ό GitHub κ°μ μ μ₯μμ νΈμν λλ§λ€ μλμΌλ‘ λΉλ, ν μ€νΈλ₯Ό μ€ννλ λ°©μμ΄μ£ .
βοΈ CIμ ν΅μ¬ λͺ©ν:
β μ½λ λ³κ²½ μ¬νμ λΉ λ₯΄κ² κ°μ§νμ¬ λ²κ·Έλ₯Ό μ‘°κΈ°μ λ°κ²¬
β μλνλ ν μ€νΈλ₯Ό ν΅ν΄ μ½λ νμ§μ μ μ§
β κ°λ° νλ‘μΈμ€λ₯Ό νμ€ννμ¬ νμ μ μννκ² λ§λ€κΈ°
π‘ CIκ° μλ μμ μλ?
• μ¬λ¬ κ°λ°μκ° κ°μ λ‘컬μμ μ½λλ₯Ό μμ νλ€κ°, ν λ²μ λ³ν©(Merge)νλ©΄ μΆ©λμ΄ μ¦μμ΄μ.
• ν μ€νΈλ₯Ό κ°λ°μκ° μλμΌλ‘ λλ €μΌ νλ€ λ³΄λ, μ’ μ’ μ€λ₯κ° λ°κ²¬λμ§ μμ μ± λ°°ν¬λκΈ°λ νμ£ .
π― CIκ° μ μ©λλ©΄ μ΄λ° μ₯μ μ΄ μμ΄μ!
πΉ μ½λκ° μ μ₯μμ νΈμλ λλ§λ€ μλμΌλ‘ λΉλμ ν μ€νΈ μ€ν!
πΉ λ²κ·Έλ₯Ό 빨리 λ°κ²¬νκ³ , κΈ°λ₯ μΆκ°λ μμ νκ² μ§ν κ°λ₯!
πΉ νμ μ΄ λμ± μ¬μμ§!
2οΈβ£ CD(Continuous Delivery & Continuous Deployment, μ§μμ λ°°ν¬ & μ§μμ λ°°ν¬)λ?
CIκ° μ½λλ₯Ό μλμΌλ‘ ν μ€νΈνκ³ λ³ν©νλ κ²μ΄λΌλ©΄,
CDλ ν μ€νΈκ° μλ£λ μ½λλ₯Ό νλ‘λμ νκ²½μ μλμΌλ‘ λ°°ν¬νλ κ³Όμ μ μλ―Έν΄μ.
β Continuous Delivery(μ§μμ μ 곡):
μ½λλ₯Ό μλμΌλ‘ λΉλνκ³ ν μ€νΈκΉμ§ μ§νν ν, λ°°ν¬λ μλμΌλ‘ μ§ννλ λ°©μμ΄μμ.
(μ¦, git pushλ§μΌλ‘ λ°°ν¬κ° μλνλμ§ μμμ!)
β Continuous Deployment(μ§μμ λ°°ν¬):
CI/CD νλ‘μΈμ€λ₯Ό μμ ν μλννμ¬, μ½λ λ³κ²½ μ¬νμ΄ μλμΌλ‘ λ°°ν¬κΉμ§ μλ£λλ λ°©μμ΄μμ.
π git pushνλ μκ°! ν μ€νΈ → λΉλ → λ°°ν¬κΉμ§ μλμΌλ‘ μ§νλ¨! π
π― CDμ μ₯μ :
π λΉ λ₯΄κ³ μμ μ μΈ λ°°ν¬ κ°λ₯
π μλ λ°°ν¬μμ λ°μνλ μ€μ λ°©μ§
π κ³ κ° νΌλλ°±μ μ μνκ² λ°μ
π‘ CD μμ΄ λ°°ν¬νλ μμ μλ?
• κ°λ°μκ° μ§μ npm buildλ₯Ό μ€ννκ³ , λ°°ν¬ μλ²μ μ λ‘λν΄μΌ νμ΄μ.
• νλ‘λμ νκ²½μμ μμμΉ λͺ»ν μ€λ₯κ° λ°μνλ©΄, κΈ΄κΈνκ² λ‘€λ°±νλ κ³Όμ λ λ²κ±°λ‘μ μ΄μ.
π― CDκ° μ μ©λλ©΄ μ΄λ° μ₯μ μ΄ μμ΄μ!
πΉ ν μ€μ μ½λλΌλ μμ νκ² λ°°ν¬ κ°λ₯
πΉ μ€μλ₯Ό μ€μ΄κ³ λ°°ν¬ μλλ₯Ό λμ!
πΉ μλΉμ€μ μ λ’°μ±μ ν¬κ² ν₯μ
πΉ CI/CD λμ μ κ°λ° λ°©μ (μ ν΅μ λ°©μ) vs. CI/CD μ μ© ν
μ ν΅μ κ°λ° λ°©μCI/CD μ μ© ν
μ½λ λ³ν© | κ°λ°μλ€μ΄ κ°λ³μ μΌλ‘ μμ ν, ν λ²μ λ³ν© (μΆ©λ μν π¨) | μμ λ¨μλ‘ μμ£Ό λ³ν©νμ¬ μΆ©λ μ΅μν β |
ν μ€νΈ | μλμΌλ‘ QA νμ΄ ν μ€νΈ μ§ν | μλνλ ν μ€νΈ μ€ν (λΉλ ν μλ ν μ€νΈ ποΈ) |
λ°°ν¬ | κ°λ°μκ° μ§μ μλ²μ μ¬λ €μΌ ν¨ | CI/CD νμ΄νλΌμΈμ ν΅ν΄ μλ λ°°ν¬ π |
λ²κ·Έ μμ | νλ‘λμ μμ λ°κ²¬λ λ²κ·Έλ₯Ό κΈ΄κΈ λ‘€λ°± | μλνλ ν μ€νΈλ‘ λ°°ν¬ μ μ λ²κ·Έ λ°κ²¬ κ°λ₯ β |
π CI/CD μμ΄ κ°λ°νλ©΄ λ°°ν¬κ° κ³ ν΅μ€λ½κ³ ,
π CI/CDλ₯Ό λμ νλ©΄ λ°°ν¬κ° μμ μ μ΄κ³ μννκ² μ§νλ¨!
πΉ CI/CDλ₯Ό μν λκ΅¬λ€ λΉκ΅ π οΈ
νλ‘ νΈμλμμ μμ£Ό μ°μ΄λ λꡬλ€
CI/CD λꡬνΉμ§νλ‘ νΈμλ μΉνμ ?
GitHub Actions | GitHub μ μ₯μμ μλ²½ μ°λ, YML νμΌλ‘ μ€μ κ°λ₯ | β κ°λ ₯ν GitHub μ°λ |
Vercel | Next.jsμ κ°μ Jamstack λ°°ν¬μ μ΅μ ν | β λ°°ν¬ μλ λΉ λ¦ |
Netlify | μ μ μ¬μ΄νΈ λ°°ν¬ μ΅μ ν, CDN μ 곡 | β κ°νΈν μ μ λ°°ν¬ |
Travis CI | GitHubμ μ°λ κ°λ₯, μ€νμμ€ νλ‘μ νΈμ λ¬΄λ£ μ 곡 | β GitHub μ°λ |
CircleCI | λΉ λ₯Έ μλ, μ§κ΄μ μΈ μ€μ | β λ€μν νκ²½ μ§μ |
Jenkins | κ°λ ₯ν 컀μ€ν°λ§μ΄μ§, λκ·λͺ¨ νλ‘μ νΈμ μ ν© | β μ€μ μ΄ μ΄λ €μ |
GitLab CI/CD | GitLabκ³Ό ν΅ν©λ CI/CD μλΉμ€ | β GitLab μ¬μ©μμκ² κ°μΆ! |
π CI/CD λꡬ μ ν κΈ°μ€
1οΈβ£ νλ‘ νΈμλ νλ‘μ νΈμ λ§λ λꡬ μ ννκΈ°
• Next.js/Vercel, Gatsby/Netlify, Vue/Nuxtμ²λΌ νλ μμν¬λ³λ‘ μ΅μ νλ λκ΅¬κ° μμ΄μ.
• Reactλ Vue κ°μ μ±κΈ νμ΄μ§ μ ν리μΌμ΄μ (SPA)μ Vercel, Netlifyμ κΆν©μ΄ μ’μμ.
2οΈβ£ μλ λ°°ν¬κ° μΌλ§λ μ¬μ΄κ°?
• CI/CDλ λ°°ν¬ μλνλ₯Ό λͺ©νλ‘ νλ―λ‘, μ€μ μ΄ κ°λ¨νκ³ κ΄λ¦¬νκΈ° μ¬μ΄ λꡬλ₯Ό μ νν΄μΌ ν΄μ.
• GitHub Actions, Vercel, Netlifyλ μ€μ μ΄ μ¬μμ νλ‘ νΈμλ κ°λ°μκ° μ νΈνλ λꡬμμ.
3οΈβ£ λΉλ μλμ λΉμ© κ³ λ €νκΈ°
• CI/CD λꡬλ§λ€ λΉλ μκ°κ³Ό λΉμ©μ΄ λ¬λΌμ.
• Vercelκ³Ό Netlifyλ λ¬΄λ£ νλμ΄ μμ§λ§, νΈλν½μ΄ λ§μμ§λ©΄ μΆκ° λΉμ© λ°μν μ μμ΄μ.
• Jenkins, CircleCI κ°μ μ체 νΈμ€ν μ루μ μ μ€μ μ΄ λ²κ±°λ‘μ§λ§, λκ·λͺ¨ νλ‘μ νΈμ μ ν©ν΄μ.
πΉ CI/CD μ€μ μ μ© μμ (GitHub Actions + Vercel)
π GitHub Actionsμ νμ©νμ¬ μλ λΉλ & λ°°ν¬ νμ΄νλΌμΈ λ§λ€κΈ°
name: Deploy Frontend
on:
push:
branches:
- main # main λΈλμΉμ νΈμλ λ μ€ν
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: μ½λ 체ν¬μμ
uses: actions/checkout@v3
- name: Node.js μ€μ
uses: actions/setup-node@v3
with:
node-version: 18
- name: ν¨ν€μ§ μ€μΉ & λΉλ
run: |
npm install
npm run build
- name: Vercel λ°°ν¬
run: npx vercel --prod --token ${{ secrets.VERCEL_TOKEN }}
β push: branches: main → main λΈλμΉμ λ³κ²½ μ¬νμ΄ μκΈ°λ©΄ μ€ν
β npm run build → νλ‘μ νΈ λΉλ
β npx vercel --prod → Vercelλ‘ λ°°ν¬
πΉ κ²°λ‘ : CI/CDλ κ°λ°μμ νμ 무기!
CI/CDλ λ μ΄μ μ νμ΄ μλλΌ νμμ λλ€.
β CIλ‘ μλ ν μ€νΈλ₯Ό λλ €μ μ½λ νμ§μ 보μ₯νκ³
β CDλ‘ μμ νκ² λ°°ν¬κΉμ§ μλννλ©΄
β κ°λ° μλ UP! μ€μ DOWN! π
π‘ νλ‘ νΈμλ κ°λ°μλΌλ©΄ GitHub Actions, Vercel, Netlify κ°μ λꡬλ₯Ό μ΅ν보μΈμ!
π· μ μ€μ κ°λ°μκ° λμ΄λ΄ μλΉ! π· π
'Dev-ops' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
π Next.js μν¬νλ‘μ° μμ μ 볡 (0) | 2025.03.20 |
---|---|
π Testing Library κ³μ΄ μν¬νλ‘μ° μμ μ 볡 (0) | 2025.03.19 |
π CI/CDμμ React Testing Library μν¬νλ‘μ° μ΄ν΄λ³΄κΈ° (0) | 2025.03.17 |
ποΈ IaC (Infrastructure as Code): μ½λλ‘ μΈνλΌλ₯Ό κ΄λ¦¬νλ μλ! (0) | 2025.03.15 |
λ컀 λ°μ€ν¬νμ΄ λ¬΄κ±°μΈ λ, Colima (0) | 2024.10.21 |