본문 바로가기
C.W.K.
Stream
Lesson 02 of 12 · published

Continuous Delivery와 Continuous Deployment

~14 min · cd, delivery, deployment

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

같은 글자, 다른 약속 두 개

CD는 의도적으로 여러 뜻을 품은 용어야. 똑같은 두 글자가 전혀 다른 두 가지를 뜻하지. 대부분 팀이 생각하는 것보다 이 차이가 훨씬 중요해.

  • Continuous Delivery — CI를 통과한 모든 커밋이 자동으로 패키징되고 버전 관리되며 배포할 준비를 마쳐. 하지만 사람이 버튼을 누르거나 릴리스 티켓을 승인해야만 프로덕션 환경에 닿아.
  • Continuous Deployment — CI를 통과한 모든 커밋이 자동으로 프로덕션에 배포돼. 사람의 개입은 없어. 파이프라인 자체가 배포 버튼인 셈이야.

둘 다 기저에 작동하는 CI가 필요해. Delivery는 쉬운 약속이야: 지금 출시하고 싶으면 이 커밋을 출시할 수 있어. Deployment는 어려운 약속이지: 지금 이 커밋을 출시하고 있어. 테스트 스위트와 롤백 계획이 그 결정을 맡길 만큼 충분히 좋아.

어느 쪽을 진짜 원해?

Deployment가 화려해 보이지만, 대부분 팀은 정직하게 그걸 해내지 못해. Delivery가 현실적인 목표야. 테스트 커버리지, 관측 가능성, 롤백 스토리가 성숙해질 때까지는 말이야. 잘못 고르는 것, 즉 파이프라인은 사실 Delivery인데 Deployment라고 주장하는 것이 바로 장애를 부르는 길이지.

Code

Delivery — 아티팩트 빌드 후 수동 승인 게이트·yaml
name: cd-delivery
on:
  push:
    branches: [main]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./build.sh
      - uses: actions/upload-artifact@v4
        with:
          name: dist
          path: dist/
  deploy:
    needs: build
    runs-on: ubuntu-latest
    environment: production   # requires approval
    steps:
      - uses: actions/download-artifact@v4
        with: { name: dist }
      - run: ./deploy.sh
Deployment — 수동 게이트 없이 푸시가 라이브로·yaml
name: cd-deployment
on:
  push:
    branches: [main]
jobs:
  ship:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./test.sh
      - run: ./deploy-to-prod.sh

External links

Exercise

출시하는 프로젝트 하나에 대해 Delivery인지 Deployment인지 적어봐. 그다음 프로덕션을 막는 정확히 어떤 단계인지(그리고 사람이 있다면 누구인지) 목록으로 적어. 사람을 빼도 될 만큼 CI를 진짜 신뢰하는지 정직하게 돌아봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.