Remote Execution
이 글은 온프레미스 대규모 모바일 병렬 테스팅 원격 환경 구축기에서 언급한 원격 실행 환경에 대해 보다 실무적인 관점에서 정리한 내용입니다.
이번에 구축한 원격 실행 구조는 제어와 수행을 논리적으로 분리하여 관리 효율을 높인 것이 특징입니다. 첫 번째는 Client Layer입니다. 테스트 스크립트가 실제로 구동되는 지점이지만 이곳에서 기기를 직접 제어하지는 않습니다. 워커 프로세스들이 독립적으로 생성되면 네트워크를 통해 원격지의 서버(xxx.xxx.xx.xxx)로 테스트 수행에 필요한 요청을 보냅니다. 클라이언트는 기기의 물리적 위치와 상관없이 추상화된 자원으로서 기기를 점유하고 명령을 전달하는 역할에 집중합니다.
두 번째는 Hub Layer입니다. 이 계층은 아키텍처의 컨트롤 타워 역할을 수행하며 기기 상태를 관리하고 세션을 배분합니다. 동시 요청 시 가용한 노드 리스트를 스캔하여 세션 간 충돌이 발생하지 않도록 Queuing을 처리합니다. 온프레미스 대규모 모바일 병렬 테스팅 원격 환경 구축기에서 언급한 onPrepare Hook에서의 기기 상태 초기화 로직은 허브에 연결된 기기 상태를 직접 수정하여 인프라 가동률을 높이는 장치가 됩니다. 또한 인접 스피커를 통해 의도한 시점에 음원을 재생함으로써 실제 사용자의 수면 환경을 물리적으로 재현하는 역할을 수행합니다.
마지막은 Node Layer입니다. 허브로부터 명령을 받은 노드는 지정된 URL에서 앱 바이너리를 다운로드하여 설치하고 Appium 드라이버가 기기와 통신하며 물리적인 액션을 수행하는 구간입니다.
이러한 구조는 실무 운영 관점에서 명확한 이점을 제공합니다. 먼저 물리적 제약의 제거입니다. 모바일 QA 환경에서는 재택근무나 이동 시 테스트 기기를 직접 챙겨야 하는 불편함이 컸는데요. 인프라가 사내 망에 고정되어 있으므로 노트북 한 대만 있으면 어디서든 사무실에 있는 수십 대의 기기를 즉시 제어할 수 있습니다. 기기를 사용하기 위해 이동할 필요 없이 해당 기기의 UDID를 스크립트에 기입하는 것만으로 테스트 환경 구성이 가능해집니다.
다음은 확장성입니다. 1인 QA 환경에서 수십 대의 기기를 수동으로 테스트하는 것은 물리적으로 불가능에 가까운 어려움이 있습니다. 특히 SDK 검증을 위해 설계된 TestApp은 테스트 편의성이 낮아 리소스 소모가 더욱 컸는데요. 하지만 잘 설계된 아키텍처 기반의 명령 병렬 처리는 이를 가능하게 합니다. 퇴근하거나 잠든 야간 시간대에도 시스템은 스스로 기기 상태를 점검하고, 향후 50대 가까이 확장될 기기들에 대해 지정된 스케줄에 따라 분산 실행을 통한 전수검사를 수행하며 실패 시 슬랙으로 디버깅 정보와 스크린샷을 포함한 결과를 리포팅합니다. 단순 기기 세팅과 같은 소모적인 작업 시간을 없애고 물리적 노동에 투입되던 리소스를 어떻게 품질 전략을 고도화할 것인가라는 고차원적인 고민에 더 많이 투입할 수 있게 해 줍니다.
24시간 멈추지 않는 Client-Hub-Node 테스트 환경은 에이슬립이 추구하는 높은 품질과 빠른 속도를 뒷받침하는 기반입니다. 수면 분석 SDK처럼 특수한 테스트 요구사항이 존재하고 이를 클라우드로 해결하기 어려운 상황이라면 프로덕트 요구사항을 충족시킬 수 있는 온프레미스 원격 실행 아키텍처를 직접 구축하는 것이 합리적인 선택이라 생각합니다. 기기의 물리적 위치가 더 이상 업무의 경계가 되지 않을 때 비로소 테스트 자동화의 활용 가치가 극대화됩니다.
이 글이 비슷한 고민을 하는 분들께 도움이 되길 바라며 글을 마칩니다. 읽어주셔서 감사합니다.