# 검증은 어떻게 작동하나요

> "AI가 직접 눌러 본다"는 게 실제로 어떻게 돌아가는지 궁금하시죠. 실제 브라우저가 시나리오를 재생하고, 통과·실패를 어떻게 가르고, 결과를 어떻게 남기는지 설명할게요.

## 실제 브라우저가 직접 눌러봐요

"AI가 직접 눌러 본다"는 말이 실제로는 이런 뜻입니다. Specnote는 진짜 웹 브라우저를 하나 띄워서, 테스트를 처음부터 끝까지 사람처럼 재생합니다. 주소를 열고, 칸에 글자를 입력하고, 버튼을 누르고, 다음 화면으로 넘어가요. 이 과정을 **처음부터 끝까지 재생(full-replay)**이라고 부릅니다.

여기서 중요한 건 **테스트 코드를 한 줄도 작성할 필요가 없다**는 점이에요. 보통 자동 테스트를 만들려면 개발자가 별도의 코드를 짜야 하는데, Specnote는 정리해 둔 테스트의 단계를 그대로 따라가기 때문에 그럴 필요가 없습니다. 테스트가 곧 대본인 셈이에요.

브라우저는 사람이 보는 화면과 똑같은 환경에서 움직입니다. 그래서 "내 눈으로 직접 해 봤을 때"와 가장 가까운 결과를 얻을 수 있어요.

## 통과·실패는 이렇게 가려요

테스트 안의 모든 단계가 똑같은 무게를 갖는 건 아닙니다. 판정의 기준이 되는 단계는 **사람이 직접 입력하거나 누르는 단계**예요. 이메일을 적고, 비밀번호를 넣고, 로그인 버튼을 누르는 — 사용자가 실제로 하는 행동이죠. 이런 단계가 **전부 성공하면 통과**입니다.

반면 다음과 같은 단계는 통과·실패를 가르는 셈에서 빠집니다.

- **화면 이동** — 다음 페이지로 넘어가는 것 같은 흐름.
- **시스템 처리** — 화면 뒤에서 자동으로 도는 작업.
- **뒷정리** — 끝나고 정돈하는 단계.
- **외부 서비스 의존** — Specnote 밖의 다른 서비스에 기대는 단계.

이런 단계는 사용자가 직접 좌우할 수 없는 부분이라, 여기서 막히더라도 테스트 전체를 실패로 떨어뜨리지 않습니다. 예를 들어 결제 단계에서 외부 결제사 응답이 잠깐 늦더라도, 그건 우리 화면의 문제가 아니라 바깥 사정이기 때문에 테스트 자체를 실패로 보지는 않아요.

판정은 **통과 아니면 실패**, 둘 중 하나로만 나뉩니다. 애매한 중간 판정은 없어요. 혹시 자동 판정이 놓친 부분이 있어 직접 눈으로 확인했다면, **손으로 "통과 처리"**를 해 둘 수도 있습니다.

## 무엇을 성공으로 볼지는 사람이 정해요

"이 단계가 다 되면 통과"라는 이 기준을 **통과 조건**이라고 불러요. Specnote는 이 통과 조건을 마음대로 확정하지 않습니다. 테스트를 만들거나 다듬을 때 자동으로 초안을 잡아 주긴 하지만, **"이걸 기준으로 봅니다" 하고 확정하는 승인은 사람만** 할 수 있어요. 연결한 AI에게도 이 승인 권한은 주지 않습니다. 무엇을 합격으로 볼지는 사람이 정한다는 원칙이에요.

같은 원칙이 검증을 시작하는 길목에도 있어요. 새로 검증 묶음을 시작할 때는 AI가 "무엇을 어떤 규칙으로 검증할지" 기획 검토안(PRD)을 만들어 오고, 그걸 **사람이 승인**한 뒤에야 첫 검증이 돌아갑니다. 정리하면 Specnote에서 **사람만 내리는 결정은 세 가지**예요 — 검증 검토안(PRD) 승인, 통과 조건 승인, 그리고 CI 자동 검증에 넣고 뺄지 정하기. 나머지는 다 AI에게 맡길 수 있지만, 이 세 가지는 사람 몫으로 남겨 두었어요.

한 번 승인해 두면, 이후 코드가 조금 바뀌어도 그 기준이 그대로 유지돼요. 그러다 승인해 둔 통과 조건과 지금 테스트가 서로 어긋나면 — 예를 들어 단계 순서가 달라졌거나 확인 항목이 바뀌면 — Specnote가 "승인과 조건이 달라졌어요" 하고 알려 주고, **다시 승인**할 수 있게 해 줍니다. 그래서 "언제 정한 기준으로 통과라고 하는 건지"가 늘 분명하게 남아요.

## 화면이 바뀌면 스스로 따라가요

만드는 동안 화면은 계속 조금씩 바뀝니다. 버튼 위치가 옮겨지거나, 이름이 살짝 달라지죠. 이럴 때 예전 같으면 테스트가 버튼을 못 찾아 실패했겠지만, Specnote의 테스트는 **작은 변화 정도는 스스로 맞춰 따라갑니다.** 옮겨진 버튼을 다시 찾아 자기 단계를 고쳐 잡아요. 이걸 자동 복구라고 불러요.

단, "무엇을 확인하려는지"라는 의도 자체가 바뀌면 얘기가 달라요. 그건 사실상 다른 테스트라서, 기존 것을 물러나게 하고 새 테스트로 갈아 끼웁니다. 이때는 통과 조건을 새로 승인해 달라고 알려 줘요. 그래서 "겉모습만 바뀐 것"과 "본질이 바뀐 것"을 구분해 다룹니다.

## 잘 안 풀릴 때 — 자동 재시도

한 번에 깔끔하게 안 되는 경우가 있어요. 화면이 조금 늦게 뜨거나, 버튼을 정확히 찾지 못하는 상황이죠. 이럴 때 Specnote는 바로 실패로 처리하지 않고 **스스로 다시 시도**합니다. 단계마다 방법을 바꿔 가며 최대 세 번까지 손을 써 보는 **3단 자동 복구**예요.

사람으로 치면 "어, 안 눌리네? 잠깐 기다렸다가 다시 해 볼까?" 하고 한 번 더 해 보는 것과 같습니다. 이렇게 해서 진짜 문제인지, 잠깐의 일시적인 걸림이었는지를 가려 줘요. 그래도 끝내 안 되면 그때 실패로 남깁니다.

## 단계가 진짜 맞는지 먼저 확인해요

검증을 본격적으로 돌리기 전에, Specnote는 한 가지를 먼저 점검합니다. **테스트의 단계가 지금 화면과 실제로 맞는지** 대조하는 일이에요. 이걸 **단계 확정**이라고 부릅니다.

예를 들어 "이메일 입력" 단계가 적혀 있는데, 화면에 그 입력 칸이 정말 있는지 먼저 비춰 봅니다. 맞으면 그 단계를 "확정"으로 표시하고, 위치가 바뀌었거나 찾지 못하면 "확인이 필요한" 단계로 따로 알려 줘요.

좋은 점은 **이 단계 확정 과정이 크레딧을 쓰지 않는다**는 거예요. 검증을 본격적으로 돌리기 전에 미리 정리해 두는 안전 점검이라, 부담 없이 거칠 수 있습니다. 미리 한 번 맞춰 보고 들어가면, 정작 검증을 돌렸을 때 엉뚱한 곳에서 헛걸음하는 일이 줄어듭니다.

## 영상과 스크린샷으로 남아요

검증을 돌릴 때마다 두 가지가 함께 저장됩니다.

- **화면 영상** — 브라우저가 테스트를 재생하는 모습을 처음부터 끝까지 담은 영상(`.webm` 형식)이에요. 어디서 어떻게 진행됐는지를 그대로 되돌려 볼 수 있습니다.
- **단계별 스크린샷** — 각 단계에서 화면이 어떤 모습이었는지를 사진으로 남겨요.

그래서 "통과/실패"라는 결과 한 줄에서 끝나지 않습니다. 실패했다면 영상과 스크린샷을 열어 어느 장면에서 무엇이 어긋났는지 눈으로 직접 확인할 수 있어요.

실패한 테스트는 **수정 리포트**로 정리됩니다. 무엇이 어긋났는지 원인을 모아, 코드를 고치는 AI에게 그대로 넘길 수 있는 형태예요. Specnote가 코드를 직접 손대는 건 아니고, "여기를 이렇게 고쳐야 한다"는 정리를 만들어 주는 역할입니다.

검증 결과를 어떻게 읽고 활용하는지는 [검증 실행과 결과 보기](/ko/docs/running-and-results)에서 더 자세히 다룹니다. 용어가 헷갈린다면 [핵심 용어 한눈에](/ko/docs/key-concepts)로 돌아가 찾아보세요.

---

Source: https://specnote.io/ko/docs/how-verification-works
