스모크 테스트

Smoke Test

방법

배포 직후에 핵심 흐름 몇 가지만 빠르게 돌려, 되돌릴지 말지를 몇 분 안에 정하려고 하는 테스트입니다.

등장 배경

새 버전을 올린 직후가 가장 위험합니다. 문제가 있다면 그 순간부터 모든 사용자가 그 문제를 겪습니다. 그런데 준비해 둔 테스트를 전부 돌리는 데는 시간이 걸립니다. E2E 테스트를, 곧 브라우저를 실제로 띄워 사용자가 하는 대로 눌러 보는 테스트를 500건 모아 두었다면 한 바퀴에 두 시간입니다.

그 두 시간 동안 사용자는 새 버전을 쓰고 있습니다. 금요일 오후에 배포하고 전체 검사를 돌리던 팀이 40분 뒤에야 로그인이 안 된다는 사실을 알게 되고, 그때 이미 고객센터에 문의 열두 건이 쌓여 있는 식입니다.

반대쪽 선택도 답이 아니었습니다. 아무것도 확인하지 않고 배포를 끝내면, 누군가 화면을 열어 볼 때까지 아무도 모릅니다. 밤 배포라면 다음 날 아침까지 그대로입니다.

필요한 것은 전부 맞는지에 답하는 장치가 아니라 지금 되돌려야 하는지에 2분 안에 답하는 장치였습니다. 이름은 하드웨어 점검에서 왔습니다. 새로 만든 기판에 전원을 넣어 연기가 나는지 먼저 보던 일이고, 연기가 나면 나머지 검사는 의미가 없으니 거기서 멈춥니다.

사용 절차

되돌릴 판단에 필요한 흐름만 골라, 배포 직후에 자동으로 돌리고 결과에 따라 조치까지 이어 붙입니다.

  1. 대상을 고릅니다. 기준은 하나입니다. 이것이 안 되면 서비스가 없는 것과 같은 흐름만 넣습니다. 로그인, 첫 화면 표시, 문서 열기, 문서 저장, 결제 정도로 다섯에서 열 개입니다. 검색 결과 정렬이나 알림 설정처럼 하루 늦게 알아도 되는 것은 넣지 않습니다.
  2. 시간 상한을 정합니다. 전체가 2분에서 3분 안에 끝나야 합니다. 상한을 먼저 정하고 그 안에 들어오게 항목을 줄이는 순서로 짭니다. 거꾸로 하면 항목이 계속 늘어납니다.
  3. 실제 배포된 환경에서 돌립니다. 가짜로 대신하지 않습니다. 목을 써서 결제사 응답을 흉내 내면 정작 이번에 바뀐 설정 때문에 결제사 연결이 끊긴 상황을 못 잡습니다.
  4. 판정과 조치를 붙입니다. 하나라도 실패하면 자동으로 롤백하거나 배포 담당자에게 즉시 알립니다. 사람이 결과 화면을 보러 가야 하는 구조면 2분 안에 정한다는 목적이 무너집니다.
  5. 남는 데이터를 치웁니다. 운영 환경에서 돌리니 테스트가 만든 계정과 문서가 실제 데이터에 섞입니다. 전용 계정을 따로 두고 끝난 뒤 지우는 절차를 함께 만듭니다.

이 다섯을 갖추면 배포 절차의 마지막 칸이 됩니다. 올리고, 2분 기다리고, 초록불이면 손을 떼고 빨간불이면 되돌립니다.

적합한 상황과 한계

맞는 자리는 넷입니다. 배포 직후, 환경을 새로 띄운 뒤, 외부 서비스 장애가 의심될 때, 그리고 아무 배포가 없어도 30분마다 정기적으로 도는 자리입니다. 마지막 경우는 우리가 바꾼 것이 없는데도 무언가 멈추는 상황을 잡아냅니다. 관측성 도구가 숫자로 알려 주기 전에 흐름 자체가 끊긴 것을 먼저 확인하는 역할입니다.

한계는 넷입니다.

  1. 통과했다는 것이 정상이라는 뜻은 아닙니다. 다섯 흐름만 본 것이고 나머지는 보지 않았습니다. 로그인이 되고 문서가 열리는데 내보내기 기능이 통째로 깨져 있어도 초록불이 뜹니다.
  2. 실패해도 원인을 짚어 주지 않습니다. 로그인이 안 된다는 사실만 알려 주고 어디가 깨졌는지는 말하지 않습니다. 원인은 단위 테스트와 통합 테스트, 그리고 로그에서 찾습니다.
  3. 운영 데이터에 흔적이 남습니다. 지우는 절차를 빼먹으면 반년 뒤 사용자 목록에 테스트 계정이 400개 쌓여 있고, 사용량 지표도 그만큼 부풀어 있습니다.
  4. 항목이 늘면 스모크 테스트가 아니게 됩니다. 15분이 걸리는 스모크 테스트는 이름만 스모크 테스트이고, 되돌리는 결정을 15분 늦추는 장치입니다.

실무 용례

"스모크만 돌리고 퇴근하죠. 전체는 밤에 돌게 걸어 뒀어요."

되돌릴 판단에 필요한 최소 확인만 지금 하겠다는 뜻입니다.

"스모크에 문서 공유 추가할까요? 지금 2분 30초인데 30초 더 늘어납니다."

시간 상한과 항목을 함께 놓고 판단하는 자리입니다.

"스모크는 통과했는데 내보내기 기능이 깨졌어요. 거기까지는 안 보고 있었습니다."

통과가 전체 정상을 뜻하지 않는다는 확인입니다.

페이지덱에서는 태오가 배포 파이프라인 마지막에 여섯 항목을 걸어 두었습니다. 로그인, 문서 목록, 문서 열기, 문서 저장, 공유 링크 접속, 결제 화면 표시입니다. 전체가 100초 안에 끝나고, 하나라도 실패하면 자동으로 이전 버전으로 돌아가고 알림이 옵니다. 결제 화면은 원래 목록에 없던 항목인데, 결제사 설정이 잘못 올라간 배포를 다음 날 아침에야 알게 된 뒤에 넣었습니다.

항목을 늘리자는 이야기가 분기마다 나옵니다. 지현이 새 기능을 낼 때마다 그 기능도 넣어 달라고 말하고, 태오는 상한을 먼저 보여 줍니다. 대신 늘려야 할 것은 밤에 도는 회귀 테스트 쪽에 넣기로 정해 두었습니다.

흔한 오해

스모크 테스트가 통과하면 배포가 잘됐다고 읽는 경우가 가장 많습니다. 배포 화면에 마지막으로 뜨는 초록불이니 그렇게 읽힙니다. 하지만 이 초록불이 말해 주는 것은 핵심 다섯 흐름이 살아 있다는 것뿐입니다. 덜 쓰이는 기능이 깨진 경우는 여기서 잡히지 않고, 대개 다음 날 문의로 들어옵니다. 초록불을 배포 성공으로 읽으면 그 문의를 받았을 때 배포와 연결해 생각하지 못합니다. 이 값을 읽는 문장은 배포가 성공했다가 아니라 지금 되돌릴 이유는 없다입니다.

항목이 많을수록 좋다고 보는 것도 흔합니다. 확인을 더 하는 것이 나쁠 이유가 없어 보입니다. 다만 이 테스트의 값어치는 항목 수가 아니라 걸리는 시간에서 나옵니다. 2분이면 배포한 사람이 화면을 보며 기다리지만, 15분이면 다른 일을 하러 가고 빨간불을 20분 뒤에 봅니다. 그 20분이 이 장치를 만든 이유를 지웁니다. 확인할 것이 늘었다면 넣을 곳은 여기가 아니라 시간에 쫓기지 않는 테스트 쪽입니다.

자주 헷갈리는 용어

용어무엇을 묻는가스모크 테스트와의 차이
회귀 테스트고친 뒤 원래 되던 것이 그대로 되는지범위가 넓고 시간이 오래 걸립니다. 놓친 것이 없는지 확인하는 쪽이고, 스모크 테스트는 되돌릴지를 몇 분 안에 정하는 쪽입니다

같이 보면 좋은 페이지

  • 테스트

    여덟 갈래 가운데 범위가 어디에 놓이고 넷이 어떤 층을 이루는지 봅니다

  • 단위 테스트

    가장 아래 층이어서 둘을 같이 읽으면 무엇을 어디서 잡을지 정해집니다

마지막 업데이트 2026-09-16