예약 작업
문서 버전: 20260905
이 문서가 다루는 앱 버전:
- iOS: >= 3.16
- Android: >= 1.8.0
- macOS / Windows(PC): >= 1.0.21
예약 작업은 요청 재생 한 건, 또는 콤보 재생 규칙 전체를 Cron이나 고정 간격으로 자동 실행합니다. 플래시 세일 부하 확인, 오픈 순간 검증, 주기적인 헬스 체크처럼 손으로 누르기엔 늦은 상황에 맞습니다.
전형적인 경우: 쇼핑몰 세일 창은 몇 초뿐이라 손으로 누르면 거의 놓칩니다. 캡처 기록에서 주문 요청을 꺼내거나 콤보 재생으로 묶은 뒤, 예약 작업을 만들고 오픈 직전부터 1초 간격으로 보낸 다음, 본문이 「구매 성공 / 종료」가 되면 자동으로 멈춥니다.
콤보 재생의 편성, 의존성 주입, 표현식은 콤보 재생 사용 가이드를 보세요.
목차
1. 기능 개요
| 기능 | 설명 |
|---|---|
| 요청 재생 | 스냅샷 기준으로 HTTP/HTTPS 한 건 재생(Method / URL / Header / Body) |
| 콤보 재생 | 스냅샷 기준으로 콤보 규칙 전체 실행(계층, 표현식, 의존성 주입 포함) |
| Cron | 초를 포함한 6필드: 초 분 시 일 월 요일 |
| 사용자 지정 | 초 간격으로 반복. 횟수와 지속 시간으로 멈출 수 있음(iOS / PC는 시작 시각도 지정 가능) |
| 자동 종료 | 두 가지뿐. 응답 Body 정규식, JSON 필드 값 완전 일치. 맞으면 작업이 비활성화됨. 일시 정지가 아님 |
| 실행 기록 | 별도의 「실행 기록」 패널. Avg / P95 / P99, 성공률 |
2. 빠른 시작
- 먼저 캡처해서 타이머로 칠 HTTP/HTTPS를 확보합니다. 흐름이 필요하면 콤보 재생 규칙을 만들어 저장합니다.
- 예약 작업 목록에서 + / 예약 작업 추가를 탭합니다.
- Job 이름을 적고 대상을 고릅니다.
- 요청 재생: 기록에서 한 건. 쿼리, 헤더, Body는 이후에 수정할 수 있습니다.
- 콤보 재생: 기존 규칙에서 한 건. 각 노드 파라미터도 수정할 수 있습니다.
- Cron 또는 사용자 지정을 고르고, 설정 화면의 다음 실행 미리보기가 맞는지 확인합니다.
- 필요하면 자동 종료를 켜고, 정규식이나 JSON 필드로 「성공 / 종료」 응답을 잡습니다.
- 작업이 사용인지 확인한 뒤:
- iOS / Android: 캡처(VPN)를 시작합니다. 캡처 전에는 돌지 않습니다. VPN이 켜져 있는 동안 요청 기록에도 남고, 재작성/스크립트도 적용됩니다.
- 데스크톱: ApiCatcher 창을 열어 둡니다. VPN은 필요 없습니다. 작업이 보내는 트래픽에 재작성/스크립트를 걸려면 캡처를 시작하세요.
- 작업을 열어 실행 기록을 봅니다.
3. 진입점과 작업 관리
3.1 「예약 작업」 열기
- 캡처 홈 오른쪽 위 + → 예약 작업
- 요청 재생 또는 콤보 재생 실행 화면 오른쪽 위 알람을 누르면, 지금 요청/규칙으로 바로 만들 수 있습니다
3.2 만들기 / 편집 / 삭제 / 사용
| 동작 | 방법 |
|---|---|
| 만들기 | 목록 오른쪽 위 +, 또는 빈 화면의 「예약 작업 추가」 |
| 기록 보기 | 행을 탭 |
| 편집 | 왼쪽으로 밀기 → 편집 |
| 삭제 | 왼쪽으로 밀기 → 삭제(해당 작업의 실행 기록도 함께 삭제) |
| 사용 / 중지 | 편집 화면의 「사용」 토글 |
새로 만들면 기본적으로 사용입니다.
기존 작업을 편집할 때 대상 종류를 바꾸거나 다른 요청/규칙을 고를 수는 없습니다. 이름, 사용 스위치, 스냅샷의 요청/노드 파라미터, 스케줄, 자동 종료는 바꿀 수 있습니다.
4. 실행 대상
대상은 두 가지뿐입니다.
| Job 대상 | 실행 내용 |
|---|---|
| 요청 재생 | HTTP 한 건. 표현식 주입 지원 |
| 콤보 재생 | 여러 HTTP. 콤보 규칙 순서. 의존성 주입과 표현식 주입 지원 |
콤보 재생 규칙을 고친 뒤 Job에도 반영하려면 새 Job을 다시 만들어야 합니다.
5. 스케줄 설정
종류는 Cron / 사용자 지정입니다.
설정 화면에서 다음 실행 시각을 최대 5개 미리 봅니다.
5.1 Cron
식은 6단, 순서는 다음과 같습니다.
초 분 시 일 월 요일
7단(연도)은 적어도 무시됩니다. 6단보다 짧으면 다음 시각을 계산하지 못해 스케줄되지 않습니다.
Linux crontab의 5필드가 아닙니다. */5 * * * *(5분마다)는 여기서 무효입니다.
쓸 수 있는 문법:
*: 해당 필드는 아무 값?: 일 또는 요일에서 「지정 안 함」- 숫자 하나: 초
0, 시9등 - 초 필드의 간격
/:0/30은 30초마다
기본 / 플레이스홀더:
0 * * * * ?
매분 0초입니다.
자주 쓰는 예:
| 식 | 의미 |
|---|---|
0 * * * * ? | 매분 0초 |
0 0 * * * ? | 매시 0분 0초 |
0 0 9 * * ? | 매일 09:00:00 |
0/30 * * * * ? | 30초마다 |
「N분마다」가 필요하면 사용자 지정에서 간격을 N × 60초로 두세요.
식 옆 AI로 자연어에서 Cron을 만들 수 있습니다. 만든 뒤 아래 미리보기를 확인하세요.
식이 비었거나 다음 시각을 못 내면 그 작업은 이번엔 스케줄되지 않습니다. 그 이유만으로 자동 비활성화되지는 않습니다.
5.2 사용자 지정
별도의 「종료 시각」 필드는 없습니다. 고정 간격으로 반복하고, 횟수 또는 지속 시간 중 하나에 도달하면 멈춥니다(매번 실행 전에 검사).
| 필드 | 단위 | 설명 |
|---|---|---|
| 간격 | 초 | 얼마나 자주 실행할지. 최소 1 |
| 최대 실행 횟수 | 회 | 이 횟수에 도달하면 중지 |
| 지속 시간 | 분 | 첫 실행부터 이 분이 지나면 중지 |
횟수와 시간은 엔진 메모리에 있습니다. 프로세스가 재시작되면 0으로 돌아갑니다. 이미 꺼진 작업은 자동으로 다시 켜지지 않습니다. 「사용」을 다시 켜면 횟수는 0부터입니다.
횟수나 시간에 도달하면 작업은 사용 안 함으로 저장됩니다.
6. 자동 종료
화면 이름은 자동 종료입니다. 조건이 맞으면 Cron 남은 일정이나 사용자 지정 남은 횟수와 상관없이 멈춥니다.
조건은 두 가지뿐입니다. HTTP 상태 코드로 멈추는 기능은 없습니다.
| 종류 | 대상 | 규칙 |
|---|---|---|
| 정규 표현식 | 응답 Body 텍스트 | 어디에든 맞으면 됨(전체 문자열이 같을 필요 없음) |
| 필드 선택 | 응답 JSON | 경로로 꺼낸 값과 「일치 값」이 문자열로 완전히 같아야 함 |
보충:
- 여러 조건은 OR. 하나만 맞아도 중지.
- 콤보 재생은 관찰 노드를 지정할 수 있고, 그 노드 결과만 봅니다.
- JSON은 문자열 비교입니다. 숫자
200이면 일치 값도200. 불린은true/false.
맞으면 작업을 비활성화합니다. 작업과 기록은 남고, 삭제하지 않습니다.
7. 실제로 언제 도는지
시스템 제약 때문에 플랫폼마다 구현이 다릅니다.
iOS
VPN 프로세스에서 돕니다. 캡처를 시작해야 효력이 있습니다.
| 상황 | 계속 도는지 |
|---|---|
| 캡처 중, 메인 앱이 백그라운드 | 예 |
| 캡처 중, 메인 앱을 쓸어 없애도 VPN이 살아 있음 | 예 |
| 캡처 중지 | 타이머 전부 취소, 중지 |
| 메모리 회수로 VPN 프로세스가 사라짐 | 중지. 캡처를 다시 시작해야 사용 중인 작업을 다시 읽음 |
| 캡처 꺼짐 | 실행 안 함. 저장만 DB에 하고, 다음 캡처 시작 때 스케줄 |
요청 제한 시간은 15초. VPN이 켜져 있으면 로컬 MITM(127.0.0.1:8888)을 타므로 재작성 규칙과 스크립트가 적용되고, 캡처 기록에도 같은 트래픽이 남을 수 있습니다.
Android
VPN 서비스에서 돕니다. 캡처를 시작해야 효력이 있습니다.
| 상황 | 계속 도는지 |
|---|---|
| 캡처 중, 백그라운드로만 보냄(포그라운드 알림이 남아 있음) | 대개 예 |
| 캡처 중지 | stop(). 코루틴 취소. 메모리의 횟수/첫 시각 초기화 |
| 앱 강제 종료 | VPN과 프로세스가 함께 죽고 작업도 멈춤 |
| 절전으로 프로세스가 죽음 | 중지. 포그라운드 서비스가 다시 살아 start()가 돌면, 아직 사용인 작업을 다시 스케줄 |
연결/읽기 제한 시간은 각 30초. 마찬가지로 로컬 MITM을 타므로 캡처 기록에 남을 수 있습니다.
데스크톱
앱 프로세스에서 돕니다. 프로세스가 있으면 돌고, 종료하면 멈춥니다.
| 상황 | 계속 도는지 |
|---|---|
| 창이 열려 있음(최소화 가능) | 예 |
| 캡처 꺼짐 | 예 |
| 앱 종료 | 중지 |
단일 요청은 30초, 콤보 각 노드는 5초입니다. 요청은 시스템 프록시를 탑니다. 로컬 캡처가 켜져 있으면 재작성/스크립트가 적용되고 기록에도 남을 수 있습니다.
콤보 재생 실행(세 플랫폼 동일)
- 의존 관계로 계층을 나누고, 같은 층은 병렬, 다음 층은 이전 층이 끝난 뒤.
- 노드가 2xx가 아니거나 전송 실패면 이후 층은 건너뜀(요청 안 함).
- 스냅샷의 표현식, 의존성 주입, 전역 변수는 모두 실행됩니다.
8. 실행 기록과 통계
작업을 탭하면 실행 기록입니다(편집 화면이 아님).
위쪽 통계는 이 작업의 모든 실행을 모읍니다(타이머 한 번이 한 줄. HTTP 한 건이 아님).
- Avg / P95 / P99: 각 실행의 전체 소요(해당 기록의 종료 − 시작)를 모은 뒤 평균과 95/99백분위. 화면은 밀리초
- Success Rate / Success / Failure: 그 실행의 요청이 모두 성공해야 성공. 콤보에서 노드 하나가 실패하면 그 실행은 실패. 이를 전체 기록으로 집계
줄을 탭하면 그 실행에서 보낸 요청을 볼 수 있습니다. 콤보면 먼저 노드 목록, 그다음 노드를 탭합니다.
오른쪽 위에서 이 작업의 기록을 모두 지울 수 있습니다. 작업을 삭제하면 기록도 함께 삭제됩니다.
데이터는 별도 테이블이며, 메인 「기록 / 요청 기록」이 아닙니다. 다만 앞 절처럼 캡처가 켜져 있으면 메인 기록에도 같은 트래픽이 자주 들어갑니다.
메인 기록 쪽에는 예약 작업 표시가 없어 평범한 캡처처럼 보입니다.
9. 대표적인 시나리오
시나리오 1: 세일 오픈 직전 주문 API 연타
- 주문 API를 캡처하고 Body / Header를 확인합니다(동적 시각이 필요하면 콤보 노드에
${method.timestamp()}). - 그 요청 또는 콤보 규칙으로 예약 작업을 만듭니다.
- 사용자 지정: 시작은 오픈 몇 초 전(반드시 미래), 간격 1초.
- 자동 종료: JSON
code가200, 또는"구매 성공"/"종료"정규식. - iOS / Android는 미리 캡처를 켜 두고, 데스크톱은 창을 열어 둡니다.
시나리오 2: 1분마다 헬스 체크
세 플랫폼 모두 Cron으로 충분합니다.
0 * * * * ?
자동 종료는 두지 않습니다. 직접 끄거나, 모바일은 캡처 중지, 데스크톱은 앱 종료 전까지 1분마다 돕니다.
시나리오 3: 로그인 → 업무 API 정기 회귀
- 콤보 재생에서 로그인 → 업무 API, token 의존성 주입까지 맞춥니다.
- 그 규칙으로 예약 작업을 만듭니다.
10. 자주 묻는 질문
Q: 저장했는데 안 돌아요.
A: iOS / Android는 먼저 캡처를 시작해야 합니다. 데스크톱은 앱을 열어 두세요. 작업이 「사용」인지, Cron이 6단인지, 미리보기에서 다음 시각이 나오는지 확인하세요.
Q: 사용자 지정을 저장하자마자 사용 안 함이 됩니다.
A: 시작 시각이 과거면 엔진은 한 번도 실행하지 않고 끕니다. 미래 시각으로 바꾼 뒤 다시 켜서 저장하세요.
Q: 콤보 재생을 고쳤는데 예약 작업이 그대로입니다.
A: 의도된 동작입니다. 작업은 만들 때 저장한 스냅샷을 씁니다. 지우고 다시 만드세요.
Q: 메인 기록에도 같은 요청이 보여요.
A: 모바일에서 VPN이 켜져 있으면 예약 재생이 로컬 MITM을 타 일반 캡처와 같은 경로로 저장됩니다. 전용 수치는 작업의 실행 기록을 보세요. 메인 기록에는 예약 작업 표시가 없습니다.
Q: 자동 종료에 상태 200을 넣었는데 안 됩니다.
A: 「HTTP 상태 코드로 멈추기」는 없습니다. JSON 필드(예: code == 200)나 Body 정규식을 쓰세요.
Q: 콤보 노드 일부가 안 나갑니다.
A: 수동 실행과 같습니다. 앞 층이 2xx가 아니면 이후는 건너뜁니다. 건너뛴 관찰 노드에는 Body가 없어 자동 종료도 맞지 않습니다.
Q: 앱을 지우거나 데이터를 지우면 작업이 남나요?
A: 작업과 기록은 기기에만 있습니다. 삭제하거나 데이터를 지우면 사라집니다.
Q: 재작성 규칙을 계속 켜 둬야 하나요?
A: 모바일 예약 요청은 MITM을 탑니다. Mock / 버리기 / 수정이 그 URL에 걸리면, 작업이 보내는 내용도 바뀐 결과입니다. 응답이 이상하면 먼저 재작성과 스크립트를 보세요.