Claude를 활용해 모바일 앱 QA 자동화하기 (Android + iOS)
Teaching Claude to QA a mobile app
TL;DR Highlight
1인 개발자가 Claude + CDP + adb로 Capacitor 기반 모바일 앱의 자동화 테스트를 구축하여 매일 25개 화면을 자동 순회하며 버그 리포트를 자동 생성한다.
Who Should Read
Capacitor나 React Native처럼 WebView 기반 하이브리드 앱을 혼자 개발·운영 중인데, 모바일 자동화 테스트에 손을 못 대고 있는 1인 개발자 또는 소규모 팀.
Core Mechanics
- Capacitor는 React 웹앱을 Android(WebView)와 iOS(WKWebView)로 감싸는 방식이라 Playwright 같은 웹 테스트 도구도, XCTest·Espresso 같은 네이티브 테스트 도구도 제대로 쓸 수 없는 '테스트 무인지대'가 생긴다. 웹 도구 입장에서는 너무 네이티브고, 네이티브 도구 입장에서는 너무 웹이다.
- Android 해결책의 핵심은 WebView가 Chrome DevTools Protocol(CDP) 소켓을 노출한다는 점을 이용한 것이다. adb로 해당 소켓을 로컬 포트에 포워딩하면 Playwright·Puppeteer가 쓰는 것과 동일한 프로토콜로 앱을 완전히 프로그래밍 방식으로 제어할 수 있게 된다.
- Android에서 localhost 연결 문제는 'adb reverse tcp:3000 tcp:3000' 명령어로 해결했다. 에뮬레이터 내부의 localhost는 호스트 Mac이 아닌 에뮬레이터 자신을 가리키기 때문에, 에뮬레이터 재시작할 때마다 이 명령을 다시 실행해야 한다.
- 이렇게 만든 Python 스크립트가 매일 아침 8시 47분에 앱의 25개 화면(랜딩, 로그인, 4가지 피드, 게시글 상세, 프로필, 배지, 콘텐츠 생성 폼 등)을 약 90초 만에 순회하며 스크린샷을 찍는다. Claude가 각 스크린샷을 분석해 레이아웃 깨짐, 에러 메시지, 이미지 누락, 빈 화면, 상태 바 겹침 등을 체크한다.
- 버그 발견 시 Claude가 직접 zabriskie_bot 계정으로 인증 후 스크린샷을 S3에 업로드하고, '[Android QA] Shows Hub: RSVP button overlaps venue text' 형식으로 프로덕션 포럼에 버그 리포트를 자동 등록한다. 자동화에서 나온 이슈임을 제목에서 바로 알 수 있다.
- Claude에게 '예상된 정상 상태'도 학습시켰다. 비회원에게 크루 상세 페이지가 'Forbidden'을 반환하거나, 아바타 원이 비어 있거나, 프로필 설정의 'Preview' 텍스트는 버그가 아니다. 이런 컨텍스트 없이 스크린샷만 분석하면 오탐(false positive)이 많이 나온다.
- iOS는 Android의 6배 이상인 6시간 이상이 걸렸다. Apple이 보안 정책상 외부에서 WKWebView의 CDP 소켓에 접근하는 것을 막기 때문이다. 2026년 현재 모바일 자동화 툴링 성숙도의 차이를 단적으로 보여주는 수치다.
- Claude가 git worktree를 잘못 인식해 엉뚱한 저장소에 커밋하는 사고가 발생했다. 대화형으로 실행할 때는 바로 잡을 수 있지만, 스케줄로 무인 실행 중에는 다음 날 아침에야 발견하게 된다. AI 에이전트를 자율 실행할 때 격리 경계 강제화가 얼마나 중요한지 보여주는 사례다.
Evidence
- WebdriverIO + Appium으로 이미 해결 가능한 문제 아니냐는 지적이 있었다. Capacitor 공식 개발사인 Ionic에서도 이 조합을 공식 E2E 테스트 방법으로 추천한다는 링크가 함께 제시됐다. 즉, Claude를 도입하기 전에 기존 오픈소스 툴을 먼저 검토했어야 한다는 의미다.
- git worktree 격리 실패 문제가 가장 흥미로운 부분이라는 댓글이 달렸다. 핵심 지적은 'worktree는 에이전트가 cd ../main-repo를 실행하는 것을 물리적으로 막지 않는다'는 것이다. 좁고 명확한 스코프의 작업(25개 화면 스크린샷 순회)은 잘 동작하지만, '실패한 테스트를 고쳐라'처럼 판단이 필요한 작업은 worktree 탈출 사고가 날 수 있다. 이 격리 문제를 해결하기 위한 툴링(openhelm.ai)을 만들고 있다는 개발자도 있었다.
- 스크린샷을 Claude가 분석한다고 해서 실제로 의미 있는 QA가 되는 건 아니라는 회의적 의견도 있었다. 시각적 이상 감지 수준의 분석이 진짜 기능 검증을 대체할 수 없다는 비판으로, 이 접근법의 한계를 직접적으로 짚은 것이다.
- 모바일 앱 역방향 엔지니어링이나 스마트홈 기기 자동화 문제를 풀 때, 실제 기기 메인보드에 외부 컨트롤러를 연결하는 봇 팜 방식을 고려해봤다는 경험담도 있었다. 이는 소프트웨어 레이어 자동화가 막혔을 때 하드웨어 레이어로 내려가는 대안 접근법이다.
How to Apply
- Capacitor 기반 앱을 Android에서 자동화 테스트하고 싶다면, adb로 WebView의 CDP 소켓을 로컬 포트에 포워딩한 뒤 기존 CDP 클라이언트(Puppeteer 라이브러리 등)를 그대로 붙이면 된다. 에뮬레이터 재시작 후에는 'adb reverse tcp:포트 tcp:포트'를 반드시 다시 실행해야 연결이 유지된다.
- Claude(또는 다른 LLM)로 스크린샷 기반 시각적 회귀 테스트를 구성할 때는 '예상된 정상 상태' 목록을 프롬프트에 명시적으로 포함시켜야 오탐을 줄일 수 있다. 예를 들어 비회원 접근 시 Forbidden 화면, 아바타 미설정 시 빈 원 등 정상 케이스를 사전에 정의해두는 것이다.
- Claude 같은 AI 에이전트를 스케줄로 무인 실행할 때는 작업 스코프를 최대한 좁게 잡고, git worktree 격리 같은 소프트 경계가 아닌 파일시스템 권한 제한이나 별도 컨테이너처럼 물리적 강제가 가능한 격리 환경을 사용해야 한다. 에이전트는 명시적으로 금지하지 않으면 경계를 넘을 수 있다.
- Capacitor 앱의 모바일 E2E 자동화를 처음 도입한다면 Claude 커스텀 스크립트보다 Capacitor 공식 권장 스택인 WebdriverIO + Appium을 먼저 검토하는 것이 낫다. 이미 검증된 오픈소스 생태계가 있고, 커뮤니티 지원도 풍부하다.
Code Example
# 1. Android 에뮬레이터 네트워크 포워딩
adb reverse tcp:3000 tcp:3000
adb reverse tcp:8080 tcp:8080
# 2. WebView CDP 소켓 찾기 및 포트 포워딩
WV_SOCKET=$(adb shell "cat /proc/net/unix" | \
grep webview_devtools_remote | \
grep -oE 'webview_devtools_remote_[0-9]+' | head -1)
adb forward tcp:9223 localabstract:$WV_SOCKET
# 3. CDP 엔드포인트 확인
curl http://localhost:9223/json
# 4. 스크린샷 캡처 (adb)
adb shell screencap -p /sdcard/screenshot.png
adb pull /sdcard/screenshot.png ./screenshots/screen.pngTerminology
관련 논문
프로덕션 AI 에이전트를 GPT-5.6으로 마이그레이션: 2.2배 빠르고 27% 저렴
마케팅 웹사이트를 자동 생성하는 프로덕션 AI 에이전트를 Claude Opus 4.8에서 GPT-5.6 Sol로 전환한 실전 경험담으로, 단순 모델 교체가 아니라 eval 하네스, 툴 스키마, 캐싱, 추론 리플레이까지 손봐야 했던 과정을 구체적인 수치와 함께 정리했다.
xAI Grok Build CLI가 xAI 서버로 전송하는 데이터: 네트워크 레벨 분석
xAI의 공식 코딩 CLI 도구 Grok Build가 사용자 동의 없이 전체 Git 저장소와 .env 시크릿 파일을 xAI 서버로 업로드한다는 사실이 네트워크 트래픽 분석으로 밝혀졌다.
중요할 때 기억하라: Long-Horizon 에이전트를 위한 Proactive Memory Agent
LLM 에이전트가 긴 작업 중 중요한 정보를 잊어버리는 문제를 별도의 메모리 에이전트가 '적절한 타이밍에' 끼어들어 해결하는 방법
WebSwarm: 깊고 넓은 웹 검색을 위한 재귀적 Multi-Agent Orchestration
복잡한 웹 검색을 재귀적으로 분해하고 각 노드에 적합한 검색 모드를 동적으로 할당하는 멀티에이전트 프레임워크
웹 앱을 리버스 엔지니어링해서 AI Agent 도구로 자동 변환하기
로그인된 웹 앱의 API 호출을 브라우저에서 감시해 자동으로 MCP 도구로 변환하는 에이전트를 만들었다. 소스 코드나 공식 API 문서 없이도 Jira, Spotify 같은 서비스에 AI 어시스턴트를 붙일 수 있다.
FableCut – AI 에이전트가 조작할 수 있는 브라우저 기반 비디오 에디터 (zero deps)
타임라인 전체를 JSON 파일 하나로 표현하고 MCP/REST로 AI 에이전트가 직접 편집할 수 있는 브라우저 비디오 에디터로, Claude 같은 AI가 프롬프트 하나로 영상을 자동 컷편집하고 결과를 실시간으로 UI에 반영해준다.