개념
개발 자동화와 QA 자동화의 경계가 다른 이유
AI 코딩 에이전트가 기능을 만들고 단위 테스트·통합 테스트까지 작성하는 일은 이제 흔하다. 그런데 이 자동화는 대부분 우리 시스템의 경계 안 에서 끝난다. 개발자는 결제대행사(PG) 호출부를 인터페이스 뒤로 숨기고, 테스트에서는 그 인터페이스를 가짜 객체로 바꾼다. 개발 관점에서는 옳은 설계다. 내 코드가 맞는지 확인하는 데 외부 시스템이 필요 없기 때문이다.
QA의 질문은 다르다. 사용자가 실제로 겪는 여정이 끝까지 성공하는가. 사용자는 우리 시스템과 PG와 카드사와 본인인증 기관을 구분하지 않는다. 결제 버튼을 눌렀는데 돈은 빠지고 주문은 안 됐다면, 원인이 어느 시스템에 있든 그것은 우리 서비스의 결함이다.
[개발 자동화의 범위]
┌──────────────── 우리 시스템 ────────────────┐
│ 화면 → API → 도메인 로직 → DB │
│ └→ PG 클라이언트(가짜 객체) │
└────────────────────────────────────────────┘
[QA 자동화의 범위]
사용자 → 화면 → API → 도메인 → DB
├→ PG → 카드사 → (승인/거절) → 웹훅으로 결과 통보
├→ 본인인증 기관 → 인증 결과 리다이렉트
├→ 대외기관(신용정보·공공 API) → 조회 결과
└→ 제휴사 API(포인트·배송) → 비동기 콜백현업 결함 통계를 보면 연동 지점이 결함의 주요 서식지인 경우가 많다. 응답 지연, 예상하지 못한 오류 코드, 웹훅 중복·순서 뒤바뀜, 인증서 만료, 상대 시스템의 사전 공지 없는 필드 변경이 대표적이다. 이 결함들은 가짜 객체로 테스트한 코드에서는 절대 드러나지 않는다. 가짜 객체는 개발자가 상상한 대로만 응답하기 때문이다. 그래서 AI로 자동화를 넓힐 때 개발과 QA가 같은 범위를 자동화하면 안 된다. QA 자동화는 경계 밖까지 다뤄야 하고, 그만큼 설계가 어렵다.
외부 의존성 지도 그리기
자동화를 설계하기 전에 우리 서비스가 의존하는 외부 시스템을 모두 적는다. 이 지도가 없으면 E2E 테스트는 "어쩌다 연결되는 것들"의 집합이 된다.
| 외부 시스템 | 연동 방식 | 테스트 환경 제공 | 비용·제약 | 대표 위험 |
|---|---|---|---|---|
| PG(카드·간편결제) | REST API + 결제창 리다이렉트 + 웹훅 | 대개 테스트 키·테스트 결제 내역 제공 | 테스트는 무료인 경우가 많음 | 승인 후 웹훅 누락·중복, 취소·부분 취소 |
| 본인인증(휴대폰·간편인증) | 인증창 팝업·리다이렉트 | 제한적, 계약 후 별도 신청이 흔함 | 건당 과금, 실명 필요 | 실제 개인 정보가 필요해 자동화가 어려움 |
| 대외기관(신용정보·공공 데이터) | 전용선·API·배치 파일 | 개발 서버가 없거나 운영과 데이터가 다름 | 호출 수 제한, 업무 시간 제약 | 점검 시간, 전문 형식 변경 |
| 제휴사 API(포인트·배송·제휴 할인) | REST, 비동기 콜백 | 제휴사마다 제각각 | 협의 필요 | 상대 배포에 따른 필드 변경 |
| 알림(SMS·알림톡·푸시) | 발송 대행사 API | 발송 시뮬레이션 모드가 있는 곳도 있음 | 실제 발송 시 비용 | 템플릿 승인, 수신 거부 처리 |
PG 쪽을 예로 들면, 국내 주요 PG는 개발자센터에서 테스트 키를 발급하고 테스트 키로 낸 결제는 실제 출금이 일어나지 않으며 별도의 테스트 결제 내역 화면에서 확인할 수 있게 한다. 반대로 본인인증은 실제 사람의 실명과 휴대폰이 필요해서 완전 자동화가 어려운 대표 영역이다. 지도의 "테스트 환경 제공" 칸이 바로 자동화 전략을 가른다.
실연동·샌드박스·서비스 가상화 — 세 가지 대역
외부 시스템을 테스트에서 다루는 방법은 크게 셋이다.
| 방식 | 무엇인가 | 장점 | 단점 | 주로 쓰는 단계 |
|---|---|---|---|---|
| 실연동 | 운영 또는 상대가 제공하는 실제 환경 | 진짜 동작을 확인 | 비용·데이터·호출 제한, 결과 재현 어려움 | 릴리스 전 스모크, 소액 실결제 확인 |
| 샌드박스 | 상대가 제공하는 테스트용 환경 | 실제 프로토콜·인증 흐름을 거침 | 운영과 동작 차이, 가용성 불안정, 실패 상황 재현 제한 | 야간 회귀, 연동 기능 테스트 |
| 서비스 가상화 | 우리가 띄우는 가짜 외부 서버 | 빠르고 결정적, 실패·지연을 마음대로 재현 | 실제와 어긋날 수 있음(드리프트) | PR 단계, 장애 상황 테스트 |
셋 중 하나를 고르는 문제가 아니다. 단계별로 섞는다. PR마다 실연동을 돌리면 느리고 비싸고 불안정하다. 가상화만 쓰면 상대가 필드를 바꿨을 때 아무것도 모른다. 이 레슨 끝의 계층 배치 표가 그 조합의 예다.
샌드박스의 함정 — "샌드박스에서 됐는데요"
샌드박스는 실제 프로토콜을 거친다는 점에서 가상화보다 믿음직하다. 하지만 운영과 똑같지 않다. QA가 알아야 할 차이는 다음과 같다.
| 차이 | 예 | 놓치는 결함 |
|---|---|---|
| 실패 상황이 제한적 | 정해진 테스트 카드 번호로만 거절 재현 가능, 일부 오류 코드는 재현 불가 | 드문 거절 코드 처리 누락 |
| 웹훅 타이밍 | 샌드박스는 즉시, 운영은 지연·재전송 발생 | 웹훅이 응답보다 먼저·나중에 올 때의 경쟁 상태 |
| 데이터 | 대외기관 샌드박스는 고정된 가상 인물만 응답 | 실제 데이터 형식(자릿수·특수문자) 문제 |
| 호출 제한·인증서 | 운영은 IP 허용 목록·상호 인증서 필요 | 배포 후 인증서·방화벽 문제 |
| 가용성 | 샌드박스 점검·장애가 잦다 | 테스트가 우리 결함이 아닌 이유로 실패(불안정 테스트) |
마지막 줄이 실무에서 가장 성가시다. 샌드박스 장애로 야간 회귀가 실패하면 팀은 금방 "외부 연동 테스트는 원래 깨진다"고 생각하고 실패를 무시한다. 그래서 샌드박스 테스트에는 사전 상태 확인(헬스 체크) 을 넣어서, 샌드박스 자체가 죽어 있으면 실패가 아니라 "환경 불가"로 분류한다. 실패 분석 에이전트(레슨 7)가 이 분류를 쓸 수 있게 결과 형식에 칸을 둔다.
서비스 가상화 — WireMock과 Mountebank
서비스 가상화(service virtualization) 는 외부 시스템처럼 응답하는 가짜 서버를 띄우는 기법이다. 단위 테스트의 가짜 객체와 다른 점은 네트워크 수준 에서 동작한다는 것이다. 우리 시스템은 설정의 주소만 바꾸면 되고, 코드는 실제 HTTP 호출을 그대로 한다. 그래서 타임아웃·연결 끊김·잘못된 응답 같은 네트워크 문제까지 재현할 수 있다.
| 도구 | 특징 | QA가 쓰기 좋은 기능 |
|---|---|---|
| WireMock | HTTP(S) 중심, 자바 라이브러리·독립 실행·컨테이너로 사용 | 녹화·재생(프록시로 실제 응답 기록 후 스텁 생성), 시나리오(상태 기반 응답), 지연·장애 주입 |
| Mountebank | 다중 프로토콜(HTTP·TCP·SMTP·gRPC 등), "임포스터(imposter)" 단위 | 조건(predicate) 기반 응답, 프록시 녹화, 자바스크립트 주입 |
WireMock의 장애 주입 기능은 QA에게 특히 유용하다. 고정 지연과 무작위 지연(로그정규·균등 분포), 응답 본문을 조금씩 흘려보내는 지연, 그리고 빈 응답·잘못된 청크·무작위 데이터 후 연결 종료·연결 리셋 같은 장애 유형을 스텁 단위로 줄 수 있다. 샌드박스에서는 거의 재현할 수 없는 상황들이다.
{
"request": { "method": "POST", "urlPath": "/v1/payments/confirm" },
"response": {
"status": 200,
"fixedDelayMilliseconds": 31000,
"jsonBody": { "status": "DONE", "paymentKey": "test_pk_001" }
}
}위 스텁은 "PG가 승인은 했지만 31초 뒤에 응답한다"는 상황이다. 우리 시스템의 타임아웃이 30초라면, 사용자에게는 실패를 보여 주고 PG에서는 승인이 끝난 불일치 상태가 된다. 이때 망 취소를 하는지, 웹훅으로 상태를 맞추는지, 사용자에게 무엇을 보여 주는지가 QA가 확인할 기대 결과다. 이런 케이스는 실연동으로는 거의 재현할 수 없고 가상화로만 결정적으로 시험할 수 있다.
Mountebank는 원 개발자가 10년 넘게 유지해 오다 최근 저장소가 공동 관리 체제로 넘어가는 중이라고 밝히고 있다. 도구를 고를 때는 기능 표만 보지 말고 유지보수 상태 를 확인해야 한다. 공식 문서 주소가 바뀐 경우도 있으니, 검색 결과에 나온 옛 도메인이 아니라 저장소 README에 적힌 주소로 들어간다. 오래된 도구의 옛 도메인이 엉뚱한 사이트로 넘어가 있는 일이 실제로 있다.
계약 테스트 — Pact와 그 한계
가상화의 가장 큰 약점은 드리프트 다. 스텁은 녹화한 날의 응답을 기억하고, 상대 시스템은 계속 바뀐다. 이 차이를 잡는 방법이 계약 테스트다(모듈 12 레슨 4·5).
Pact의 기본 흐름은 이렇다. 소비자(우리) 쪽 테스트가 Pact의 가짜 제공자를 상대로 돌면서 "이런 요청을 보내면 최소한 이런 응답이 와야 한다"는 기대를 계약 파일로 남긴다. 제공자 쪽은 이 계약 파일의 요청을 자기 서비스에 재생해, 실제 응답이 계약을 만족하는지 검증한다. 양쪽을 함께 띄우지 않고도 서로의 약속을 확인할 수 있다.
문제는 제공자 검증을 상대가 해 줘야 한다 는 점이다. 사내 마이크로서비스끼리는 가능하지만, PG나 대외기관이 우리 계약 파일을 검증해 줄 리 없다. Pact 문서도 계약 테스트는 메시지(요청·응답)에 집중해야 하며, 양쪽을 모두 검증할 수 있다는 전제를 깔고 있다. 외부 시스템에는 다른 방법을 섞는다.
| 상황 | 방법 |
|---|---|
| 사내 서비스 간 | Pact 소비자 주도 계약 테스트(양방향 검증) |
| 상대가 OpenAPI 명세를 공개 | 우리 스텁·소비자 기대를 상대 명세와 정기 대조. PactFlow의 양방향 계약 테스트(BDCT)가 이 방식이며, 오픈소스 Pact에는 없는 상용 기능이다 |
| 명세가 없거나 부정확 | 샌드박스에 주기적으로 "탐침 요청"을 보내 응답 구조를 기록하고, 스텁과 구조 차이를 비교 |
| 전문(고정 길이) 연동 | 전문 레이아웃 문서를 기계가 읽을 수 있는 형식으로 관리하고 스텁 생성의 원천으로 삼기 |
세 번째 방법은 단순하지만 효과가 크다. 매일 밤 샌드박스에 대표 요청 몇 개를 보내고 응답의 필드 이름·타입·필수 여부 만 뽑아서 어제와 비교한다. 상대가 필드를 추가·삭제·이름 변경하면 다음 날 아침 알림이 온다. 값까지 비교하지 않으니 샌드박스 데이터가 바뀌어도 오탐이 적다.
비동기 흐름 — 웹훅·콜백·리다이렉트
외부 연동의 결함은 동기 호출보다 비동기 통보 에서 더 많이 나온다. 결제 승인 결과, 가상계좌 입금 통보, 배송 상태 변경은 대개 상대가 우리 서버로 웹훅을 보낸다. QA가 확인해야 할 시나리오는 정상 한 건이 아니다.
[웹훅 테스트 시나리오]
1. 정상: 승인 응답 후 웹훅 1회 도착 → 주문 상태 '결제 완료'
2. 중복: 같은 웹훅이 3회 도착 → 결제 완료 처리 1회, 포인트 적립 1회 (멱등성)
3. 순서 역전: '취소' 웹훅이 '승인' 웹훅보다 먼저 도착 → 최종 상태 '취소'
4. 지연: 웹훅이 10분 늦게 도착, 그 사이 사용자가 재결제 시도 → 이중 결제 방지
5. 누락: 웹훅이 끝내 오지 않음 → 상태 조회 API로 보정하는 배치가 동작
6. 위조: 서명이 틀린 웹훅 → 거부하고 보안 로그 기록샌드박스로는 1번 정도만 재현된다. 2~6번은 가상화 서버가 우리 웹훅 수신 주소로 직접 요청을 보내는 방식으로 시험한다. 이 시나리오들은 레슨 4·5의 방식으로 test basis에서 뽑히지 않는 경우가 많다. 요구사항명세서에 "웹훅 중복 시"를 써 둔 기획 문서는 드물다. 외부 연동 영역은 QA가 오류 추정(모듈 3 레슨 8) 으로 시나리오를 보강해야 하는 대표 영역이다.
테스트 데이터와 비밀정보
외부 연동 자동화는 비밀정보를 다룬다. API 키, 시크릿 키, 인증서, 테스트 계정이다. 원칙은 다음과 같다.
| 원칙 | 구체적으로 |
|---|---|
| 테스트 키와 운영 키를 구조적으로 분리 | 테스트 환경 설정에는 운영 키가 아예 들어갈 수 없게 한다. 키 접두사(예: test_, live_)로 시작 시점에 검사 |
| 비밀정보는 저장소에 두지 않는다 | CI의 비밀 변수나 비밀 관리 도구에서 주입, 코드·스텁 파일·로그에 평문 금지 |
| 녹화 데이터는 마스킹 후 저장 | 녹화·재생으로 만든 스텁에 토큰·카드 번호·실명·전화번호가 남지 않게 필터 |
| 실결제 스모크는 별도 통제 | 소액, 전용 법인 카드, 즉시 취소 절차, 실행 기록과 승인자 |
| 본인인증 등 실명 필요 영역 | 자동화 범위에서 명시적으로 제외하고 수동 절차·가상화로 대체, 실제 개인정보를 테스트에 쓰지 않는다 |
녹화·재생 기능은 편리한 만큼 위험하다. 프록시로 실제 트래픽을 녹화하면 요청 헤더의 인증 토큰과 응답 본문의 개인정보가 스텁 파일에 그대로 저장된다. 그 파일이 저장소에 커밋되는 순간 사고다. 녹화 설정에서 저장할 헤더를 명시적으로 고르고, 커밋 전에 비밀정보 탐지 도구를 돌린다.
AI로 가상화 스텁을 만들 때의 함정
AI 에이전트에게 "PG API 문서를 보고 WireMock 스텁을 만들어 줘"라고 하면 몇 분 만에 그럴듯한 스텁 묶음이 나온다. 생산성은 확실하다. 그러나 다음 함정을 알고 써야 한다.
| 함정 | 무슨 일이 생기는가 | 막는 법 |
|---|---|---|
| 지어낸 필드·오류 코드 | 문서에 없는 필드나 그럴듯한 오류 코드가 스텁에 들어간다 | 스텁 응답을 상대 공식 명세(OAS)나 샌드박스 응답 구조와 자동 대조 |
| 정상 경로 편향 | 성공 응답 스텁만 잔뜩, 실패·지연 스텁은 거의 없다 | 오류 코드 목록·장애 유형별 최소 스텁 수를 입력 계약에 명시 |
| 우리 구현을 베끼기 | 에이전트가 우리 코드의 파서를 보고 거기에 맞는 응답을 만든다 | 스텁 생성 입력에서 우리 코드를 빼고 상대 문서·실제 응답만 준다 |
| 오래된 문서 학습 | 모델이 기억하는 옛 API 버전으로 스텁을 만든다 | 문서 버전·조회 날짜를 입력에 포함, 출처 URL을 스텁 메타데이터에 기록 |
| 비밀정보 유출 | 녹화 데이터를 에이전트에 넘기며 토큰·개인정보가 외부 모델로 전송된다 | 마스킹 후 전달, 사내 정책상 허용된 모델·경로만 사용 |
| 검증 없는 대량 생산 | 수백 개 스텁이 쌓이고 아무도 실제와 대조하지 않는다 | 스텁마다 마지막 대조 날짜를 두고 기한이 지나면 경고 |
세 번째 함정이 가장 교묘하다. 에이전트가 우리 코드를 보고 스텁을 만들면, 스텁은 우리 코드가 기대하는 응답을 돌려준다. 테스트는 당연히 통과한다. 자기 자신을 검증하는 순환 이다. 우리 파서가 상대 응답의 필드 이름을 잘못 알고 있어도, 스텁이 같은 잘못을 반복하니 아무것도 드러나지 않는다. 모듈 18c 레슨 3의 항상 통과하는 가짜 테스트가 연동 영역에서 나타나는 형태다. 스텁의 원천은 언제나 상대 쪽 사실 (공식 명세, 샌드박스 실제 응답, 운영 로그의 마스킹된 표본)이어야 한다.
AI를 잘 쓰는 지점은 따로 있다. 상대 명세의 오류 코드 표를 읽어 오류 코드별 스텁 골격을 빠짐없이 만드는 일, 운영 로그에서 실제 지연 분포를 뽑아 무작위 지연 설정값을 제안하는 일, 샌드박스 탐침 결과와 스텁의 구조 차이를 사람이 읽기 좋게 요약하는 일이다. 모두 사실을 근거로 반복 작업을 하는 일이다.
AI 에이전트가 외부 시스템을 직접 호출할 때의 안전장치
스텁 생성을 넘어, AI 테스트 에이전트가 E2E 시나리오를 스스로 실행하며 샌드박스나 실연동 환경을 직접 호출하는 구성도 늘고 있다. 브라우저 자동화 에이전트가 결제창까지 진행하고, API 에이전트가 제휴사 샌드박스에 요청을 보낸다. 이때 에이전트의 실수는 우리 시스템 안에서 끝나지 않는다. 상대 시스템에 요청이 쌓이고, 경우에 따라 비용이 발생하고, 호출 제한에 걸려 다른 팀의 테스트까지 막는다.
| 위험 | 실제로 생길 수 있는 일 | 안전장치 |
|---|---|---|
| 호출 폭주 | 에이전트가 재시도 루프에 빠져 샌드박스에 수천 건 요청 | 에이전트 실행 단위의 호출 횟수 상한, 재시도 횟수 고정 |
| 잘못된 환경 | 설정 실수로 운영 주소·운영 키로 호출 | 허용된 호스트 목록(allowlist) 밖으로는 네트워크 차단, 키 접두사 검사 |
| 비용 발생 | 알림 발송·본인인증처럼 테스트도 과금되는 API 호출 | 과금 API는 에이전트 도구 목록에서 제외하거나 사람 승인 단계 추가 |
| 되돌릴 수 없는 동작 | 실연동 환경에서 결제·발송·데이터 삭제 | 실연동 단계는 정해진 스크립트만 실행, 에이전트의 자유 탐색 금지 |
| 기록 부재 | 에이전트가 무엇을 호출했는지 아무도 모름 | 모든 외부 호출을 요청·응답 요약과 함께 실행 기록에 남김(비밀정보 마스킹) |
원칙은 레슨 5의 자율성 단계와 같다. 가상화 환경에서는 에이전트가 자유롭게 탐색해도 되고, 샌드박스에서는 상한과 허용 목록 안에서, 실연동에서는 사람이 승인한 고정 시나리오만 실행한다. 대역이 실제에 가까워질수록 에이전트의 자율성을 낮춘다. 에이전트가 똑똑해져도 이 순서는 바뀌지 않는다. 바뀌는 것은 상대 시스템이 아니라 우리 쪽 능력이기 때문이다.
외부 시스템 포함 E2E — 계층 배치
지금까지의 내용을 파이프라인 단계별로 배치하면 다음과 같다.
| 단계 | 외부 시스템 대역 | 무엇을 검증하는가 | 실패 시 |
|---|---|---|---|
| PR | 서비스 가상화 | 우리 로직: 정상·오류 코드·지연·웹훅 중복·순서 역전 | 머지 차단 |
| 매일 밤 | 샌드박스 + 구조 탐침 | 실제 프로토콜·인증 흐름, 상대 필드 변경 감지 | 헬스 체크 실패면 '환경 불가', 아니면 결함 후보 |
| 주 1회·명세 변경 시 | 상대 OAS 대조, 계약 테스트 | 스텁 드리프트, 소비자 기대와 상대 명세의 호환 | 스텁 갱신 작업 생성 |
| 릴리스 전 | 실연동 스모크(소액·즉시 취소) | 운영 키·인증서·방화벽·실제 승인 | 릴리스 보류 |
| 운영 중 | 합성 모니터링(정해진 주기의 가벼운 실연동 확인) | 상대 시스템 장애·변경의 조기 탐지 | 운영 알림 |
이 표의 요점은 같은 기능을 여러 대역에서 서로 다른 목적으로 검증 한다는 것이다. 가상화로 우리 로직의 모든 분기를, 샌드박스로 실제 흐름을, 실연동으로 운영 설정을 본다. 어느 하나가 다른 것을 대신하지 않는다.
계층을 나눌 때 자주 빠지는 것이 시스템 간 테스트 데이터 동기화 다. 우리 DB에는 테스트 회원이 있는데 제휴사 샌드박스에는 그 회원의 포인트 계정이 없거나, 대외기관 샌드박스의 가상 인물과 우리 테스트 계정의 생년월일이 맞지 않아 조회가 실패하는 일이 흔하다. 이런 실패는 결함처럼 보이지만 실제로는 데이터 준비 문제다. 외부 시스템별로 "어떤 테스트 데이터가 어디에 미리 있어야 하는가"를 표로 관리하고, 야간 실행 전에 그 전제를 확인하는 준비 단계를 둔다.
| 외부 시스템 | 우리 쪽 전제 데이터 | 상대 쪽 전제 데이터 | 확인 방법 |
|---|---|---|---|
| PG 샌드박스 | 테스트 상점 설정, 테스트 회원 | 테스트 키 유효, 테스트 카드 번호 목록 | 소액 테스트 승인 후 즉시 취소 |
| 제휴 포인트 | 제휴 연결된 테스트 회원 | 같은 식별자의 포인트 계정·잔액 | 잔액 조회 API 호출 |
| 대외기관 | 샌드박스 가상 인물과 일치하는 테스트 계정 | 상대가 제공한 가상 인물 목록 | 대표 1명 조회 |
이 준비 단계 결과도 실패 분석의 입력이 된다. 준비 단계가 실패했다면 그날 해당 영역의 실패는 결함 후보에서 빼고 "데이터 미준비"로 분류해, 사람이 불필요한 분석에 시간을 쓰지 않게 한다.
실무에서 왜 필요한가
AI 코딩 에이전트가 개발 속도를 높이면, 외부 연동 코드도 빠르게 바뀐다. 개발 쪽 자동 테스트는 대부분 가짜 객체로 연동부를 대체하니 통과한다. 연동 결함은 그 테스트들을 통과한 채로 QA 단계나 운영까지 내려온다. 개발 자동화가 넓어질수록 경계 밖을 보는 QA 자동화 의 상대적 가치가 커진다.
또한 외부 연동은 결함 비용이 큰 영역이다. 결제 불일치는 고객 민원과 정산 오류로, 본인인증 실패는 가입 이탈로, 대외기관 연동 오류는 규제 이슈로 이어진다. "샌드박스에서 됐다"는 말로는 이 위험을 설명할 수 없다. 대역별로 무엇을 검증했고 무엇을 검증하지 못했는지를 지도로 보여 주는 것이 QA 리더의 일이다.
채용시장에서의 위치
금융·커머스·핀테크 QA 공고에는 "PG·본인인증 등 외부 연동 테스트 경험", "API 모킹·서비스 가상화 도구 활용", "계약 테스트 도입 경험"이 꾸준히 등장한다. AI 자동화 경험을 묻는 공고가 늘면서, AI로 스텁을 만들되 그 스텁을 실제와 대조하는 체계 를 설명할 수 있는 사람이 돋보인다. 면접에서는 "타임아웃 직후 승인 완료" 같은 불일치 시나리오를 어떻게 재현하고 어떤 기대 결과를 세웠는지 구체적으로 말하는 것이 좋다.