기획자와 개발자의 ‘테스트’ 온도차 — 스모크 테스트(Smoke Test) 한 장 정리
QA가 없는 팀에서 자주 일어나는 ‘테스트는 하셨어요?’ 한 마디의 온도차. 스모크 테스트(Smoke Test)의 정의·어원·업무 흐름도·이커머스 예시까지 한 번에 정리해서, 기획자와 개발자가 같은 단어를 쓰면서도 다른 그림을 보는 이유를 풀어 적었습니다.

"테스트는 하셨어요?" — 한 마디가 만드는 온도차
QA 팀이 따로 없거나 아주 작은 팀에서는 기획자가 QA 역할까지 함께 보는 일이 흔합니다. 그러다 보면 한 번쯤은 이런 장면이 옵니다. 기획자가 개발 완료된 화면을 받아 들고 시나리오대로 눌러보는데 디펙(결함)이 줄줄이 나옵니다. "혹시 테스트는 하셨어요?" 한 마디가 입에서 나가는 순간, 개발자는 무척 억울한 얼굴이 됩니다. "엄청 많이 했어요"라고 답하지만 양쪽 모두 표정이 좋지 않습니다.
이 헤프닝의 8할은 '테스트'라는 단어의 정의가 양쪽에서 다르기 때문에 생기는 온도차입니다. 개발자는 개발하면서 사실 엄청나게 많은 테스트를 합니다 — 스모크 테스트까지 포함한다면. 반대로 기획자는 시나리오 단위의 정밀 검증을 떠올리며 그 단어를 씁니다. 이 글은 그 사이에 깔린 개념인 스모크 테스트(Smoke Test) 가 정확히 무엇인지 한 장으로 정리합니다.
스모크 테스트(Smoke Test)란 — 1차 합격/불합격 컷
한 줄로 정리하면 이렇습니다. "본격적인 정밀 테스트 전에, 서비스의 핵심 기능들이 최소한이라도 잘 돌아가는지 빠르게 확인하는 초기 합격/불합격(Pass/Fail) 테스트" 입니다. 빌드(코드를 모아 실행 가능한 프로그램으로 만드는 과정)가 끝난 직후 시스템을 켰을 때, "불이 나거나 연기가 나지 않고 최소한 구동은 되는가"를 확인하는 단계라고 보시면 됩니다.
여기서 중요한 점은 스모크 테스트의 목적이 버그를 모두 잡는 것이 아니라는 것 입니다. 통과해야만 그다음의 정밀 테스트로 갈 자격이 생긴다는 일종의 문지기 역할입니다. 그래서 스모크 테스트의 항목은 늘 작게 유지되고, 결과는 합격/불합격 두 가지뿐입니다.
어원 — 기판에 전원 켜면 연기가 나는지 본 데서 시작
스모크라는 단어는 원래 하드웨어(전자 기판)나 배관·주방 설비에서 유래한 용어입니다. 기판에 회로를 새로 납땜한 뒤 처음 전원을 켰을 때, 어디선가 '치익' 하고 연기가 피어오르지 않는지 확인하던 데서 출발했습니다. 연기가 나면 세부 기능을 테스트할 필요도 없이 바로 불합격이었으니까요. 이 직관이 그대로 소프트웨어로 옮겨 와서, "일단 켜졌을 때 폭발하지 않는지 본다"는 의미로 자리를 잡았습니다.
업무 흐름도 — '스모크를 돌린다'는 표현의 정체
개발 과정에서는 코드가 수시로 바뀝니다. 그때마다 수백 가지 기능을 처음부터 끝까지 다 검증하면 시간이 너무 오래 걸리겠죠. 그래서 보통은 아래 흐름으로 일이 진행됩니다.
[code lang="text"] [개발자 코드 수정] ↓ [자동 빌드] ↓ [스모크 테스트 (5~10분, 보통 자동화)] ↓ ┌────┴────┐ ▼ ▼ [Pass] [Fail] │ │ ▼ ▼ [QA 정밀 [즉시 반려 / 테스트] 개발자 긴급 수정] [/code]
스모크 테스트는 보통 5~10분 안에 핵심만 확인하도록 자동화돼 있는 경우가 많습니다. "스모크를 계속 돌린다"는 말은 코드가 업데이트될 때마다 이 문지기 테스트를 계속 실행해서, 전체 시스템이 망가지는 치명적 버그(Showstopper)가 없는지 실시간으로 보고 있다는 뜻입니다. 그래서 개발자가 "테스트 했어요"라고 말할 때, 그 안에는 보통 이 자동 스모크가 같이 들어 있습니다.
이커머스로 보는 스모크 테스트 — 들어가는 것과 빠지는 것
쇼핑몰 앱을 예로 들면 이해가 빨라집니다. 같은 '테스트'라는 단어 안에 들어 있는 것과 빠지는 것을 나란히 적어 보겠습니다.
| 구분 | 스모크 테스트 대상 | 정밀 테스트 대상 |
|---|---|---|
| 핵심 여부 | 무너지면 서비스 자체가 멈춤 | 어긋나도 서비스는 도는 영역 |
| 자동화 | 보통 자동화 (5~10분) | 사람이 시나리오대로 확인 |
| 통과 기준 | Pass/Fail 두 가지 | 디펙 카운트·재현율·기대 동작 비교 |
스모크 테스트 대상이 되는 핵심 기능
- 앱이 정상적으로 실행되는가
- 로그인·회원가입이 되는가
- 상품 상세 페이지가 열리는가
- 장바구니 담기와 결제 버튼이 작동하는가
이 네 가지가 안 되면 다음 단계 테스트를 할 가치조차 없습니다. 그래서 스모크 테스트가 막아 줍니다.
스모크에서 빠지는 정밀 검증 영역
- 마이페이지에서 3년 전 주문 내역이 잘 필터링되는가
- 특정 카드사 즉시 할인 쿠폰의 퍼센트 계산이 정확한가
- 다크 모드일 때 특정 아이콘 색상이 올바르게 변하는가
- 푸시 알림 문구가 OS별로 안 깨지고 출력되는가
이 영역은 시나리오 단위로 사람이 누르고, 표를 두고 결과를 비교해야 잡히는 디펙들입니다. 기획자가 평소에 '테스트'라고 부를 때 떠올리는 그림이 보통 여기입니다.
기획자와 개발자가 단어를 맞추는 법
같은 단어를 두고 서로 다른 그림을 떠올리는 문제는 사실 흔합니다. 신입과 시니어가 '일을 맡긴다'라는 말을 다르게 받는 것과 비슷합니다. 신입에게 일 시키는 방식에서 정리한 것처럼, 같은 동사도 자리에 따라 다르게 해석됩니다. 테스트라는 단어도 그렇습니다.
팀에서 이 온도차를 줄이려면 단어를 두 층으로 나눠 쓰는 것이 가장 빠릅니다.
- "스모크 통과했어요" — 빌드 켜졌고 핵심 동선이 죽지 않았다는 의미. 개발자가 자기 검증 단계에서 도는 1차 컷.
- "QA(정밀) 테스트 완료했어요" — 시나리오 단위로 디펙 표를 만들면서 본 결과. 기획자나 QA가 도는 2차 컷.
이렇게 단어를 나눠두면, "테스트 했어요?"라는 질문에 "스모크는 통과했고, QA는 아직"이라는 답이 자연스러워집니다. 그리고 한 가지 더 — 빌드 직후의 1차 컷(스모크)이 죽으면, 그건 폴백이 아니라 본 경로가 멈춘 상태입니다. 이런 상태에서는 정밀 테스트도 무의미하니, 폴백 안전망 설계에서 정리한 "본 경로와 폴백의 독립성" 사고가 그대로 적용됩니다. 스모크는 그 본 경로가 살아 있는지를 보는 가장 앞단의 문지기인 셈입니다.
한 줄로 다시 정리
업무 중에 "스모크 테스트 진행 중입니다"라는 말을 들으시면, "본격적으로 상세하게 검증하기 전에, 일단 핵심 기능들이 뼈대상 잘 켜지는지 1차 컷을 확인하는 중" 이라고 이해하시면 정확합니다. 개발자가 "테스트 많이 했어요"라고 답할 때 들어 있는 그 보이지 않는 단계가 바로 이 스모크 테스트입니다.
기획자 쪽에서도 한 가지 챙겨두면 좋습니다. 디펙이 줄줄이 나올 때 가장 먼저 던질 질문은 "테스트 하셨어요?"가 아니라, "스모크는 통과했나요? 그럼 어떤 시나리오를 돌려보셨어요?" 입니다. 단어를 한 층 나누고 들어가면, 같은 시간에 훨씬 더 많은 정보를 주고받을 수 있습니다. 스모크 테스트는 결국 기술 용어 하나가 아니라, 팀이 같은 그림을 보기 위해 맞춰두는 공용 어휘에 가깝습니다.