본문 바로가기
C.W.K.
Stream
Lesson 11 of 13 · published

Smoke 테스트

~10 min · smoke, post-deploy, verification

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

'배포됨'이 '동작함'은 아니야

deploy 작업이 성공이면 코드가 런타임에 닿았다는 뜻이야. 런타임이 제대로 동작하는지는 완전히 다른 문제지. 스모크 테스트가 바로 그걸 확인해 줘.

뭘 검사할까

  • 상태 확인 엔드포인트/health가 방금 배포한 빌드 SHA와 일치하는 200 응답을 반환하는지 확인해.
  • 핵심 사용자 플로우 하나 — 로그인, 프로필 가져오기, 로그아웃. 최소한의 '앱이 살아있나' 확인 정도면 돼.
  • 외부 연동 — DB 쿼리, 캐시 적중, 서드파티 API 핑.
  • 에셋 URL — 메인 페이지가 예상한 제목과 CSS 번들 해시를 포함한 HTML을 반환하는지 봐.

스모크 테스트는 어디에 들어갈까

  1. 배포 전: 스테이징 배포 작업 후, 프로덕션 배포를 시작하기 전에 스테이징에서 스모크 테스트를 돌려.
  2. 배포 후: 프로덕션 배포 직후 프로덕션에서 스모크 테스트를 돌려. 실패하면 롤백 워크플로를 실행해.

스모크 테스트 vs 풀 e2e

스모크 테스트는 빠르고(60초 이하) 서비스가 살아있는지 확인하는 용도야. 풀 엔드투엔드 테스트는 더 느리고(5~30분) 현실적인 조건에서 동작을 검사하지. 둘은 역할이 달라. 스모크 테스트는 배포 게이트 역할을 하고, e2e는 야간에 돌려.

Code

배포 후 스모크 테스트 + 자동 롤백·yaml
  deploy:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - uses: actions/checkout@v4
      - run: ./deploy.sh

  smoke:
    needs: deploy
    runs-on: ubuntu-latest
    steps:
      - name: Health
        run: |
          for i in 1 2 3 4 5; do
            sha=$(curl -fsS https://api.example.com/health | jq -r .sha)
            if [[ "$sha" == "${GITHUB_SHA::7}" ]]; then
              echo 'OK'; exit 0
            fi
            sleep 10
          done
          exit 1
      - name: Golden flow
        run: ./tests/smoke.sh

  rollback:
    needs: smoke
    if: failure()
    runs-on: ubuntu-latest
    environment: production
    steps:
      - run: ./rollback.sh

External links

Exercise

서비스에 SHA를 인식하는 상태 확인 엔드포인트를 추가해(빌드 SHA + 가동 시간 + DB 핑 반환). 1분마다 폴링하는 배포 후 스모크 테스트 작업을 연결해. 의도적으로 잘못된 배포를 시도하고 롤백이 실행되는지 확인해봐.

Progress

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

댓글 0

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

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