testing-automation

2 개의 포스트

AI 에이전트가 실제 Stripe (새 탭에서 열림)

최근 LLM은 코드 스니펫 작성을 넘어 파일 단위의 리팩토링까지 수행할 정도로 발전했으나, 실제 소프트웨어 프로젝트를 자율적으로 관리하는 능력은 여전히 검증이 필요한 영역입니다. Stripe는 에이전트가 100%의 정확도를 요구하는 결제 통합 작업을 완수할 수 있는지 확인하기 위해, 실제 운영 환경과 유사한 11개의 벤치마크 환경을 구축하여 성능을 측정했습니다. 연구 결과, 최신 모델들은 UI 탐색 및 복잡한 API 구성에서 기대 이상의 성과를 보였으나, 모호한 상황에서의 의사결정이나 완벽한 엔드 투 엔드 검증에서는 여전히 한계를 드러냈습니다. **Stripe 통합 벤치마크의 설계와 구조** * **다층적 환경 구축**: 실제 비즈니스 시나리오를 반영하여 백엔드 전용 작업, 풀스택 작업, 그리고 특정 기능(Checkout, Billing 등)을 깊게 파고드는 'Gym' 문제 세트로 구성된 11개의 환경을 설계했습니다. * **에이전트 실행 도구**: 모든 모델에 일관된 환경을 제공하기 위해 'goose' 기반의 하네스를 사용했으며, MCP(Model Context Protocol) 서버를 통해 터미널, 브라우저, Stripe 전용 검색 도구에 대한 접근 권한을 부여했습니다. * **결과 검증 시스템(Graders)**: 단순히 코드의 형태를 보는 것이 아니라, API 호출 및 자동화된 UI 테스트를 통해 소프트웨어의 동작을 결정론적으로 검증하며, 생성된 Stripe API 객체의 상태까지 직접 확인하여 정확도를 측정합니다. **에이전트의 뛰어난 실전 적응력과 성과** * **기대 이상의 풀스택 수행 능력**: 모델들은 단순히 코드를 작성하는 데 그치지 않고 브라우저를 직접 조작하며 실시간 이슈를 디버깅하는 능력을 보여주었으며, Claude 4.5와 GPT-5.2 같은 모델들은 특정 영역에서 70~90% 이상의 높은 평균 점수를 기록했습니다. * **복잡한 UI 역공학**: 'Checkout Gym' 과제에서 에이전트들은 기존 UI를 분석하여 제품 ID, 수량, 세금 설정 등 20개 이상의 매개변수를 역으로 추출해 API 호출로 변환하는 복잡한 추론 과정을 성공적으로 수행했습니다. * **자율적인 자기 검증**: 레거시 UI를 새로운 시스템으로 교체하는 작업에서, 에이전트는 명시적인 지시 없이도 브라우저에서 테스트 결제를 진행하고 Link(Stripe의 디지털 지갑)와 같은 실제 결제 수단을 활용해 동작 여부를 스스로 확인했습니다. **한계점과 향후 과제** * **모호성 처리의 부재**: SDK 업그레이드와 같이 모호한 상황이 주어졌을 때, 에이전트들은 존재하지 않는 데이터를 입력하거나 API 오류(400 Error)가 발생해도 이를 논리적으로 해결하지 못하고 정체되는 현상을 보였습니다. * **엔드 투 엔드 검증의 어려움**: 코드를 생성하는 능력과 사람이 수행하는 수준의 엄격한 검증 및 테스트 사이에는 여전히 간극이 존재하며, 특히 장기적인 프로젝트 관리 능력에서는 추가적인 개선이 필요합니다. **실용적인 제언** 에이전트를 실제 개발 워크플로우에 도입하려는 조직은 단순히 코드 생성 엔진으로서의 성능뿐만 아니라, 에이전트가 터미널과 브라우저를 사용하여 자신의 작업을 스스로 검증할 수 있는 환경을 제공하는 데 집중해야 합니다. 또한, API 문서의 명확성과 모호하지 않은 에러 메시지 제공은 에이전트의 자율적 문제 해결 능력을 극대화하는 핵심 요소가 될 것입니다.

인수 테스트를 신세틱 모니터링으로 마이그레이션한 방법 (새 탭에서 열림)

Datadog의 프론트엔드 개발자 경험(Developer Experience) 팀은 Puppeteer 기반의 불안정한 인수 테스트 시스템을 자사 제품인 'Synthetic Monitoring'으로 전환하여 300명 이상의 엔지니어가 겪던 개발 병목 현상을 해결했습니다. 기존의 수동 스크립팅 방식에서 벗어나 사용자 상호작용을 기록하는 방식으로 전환함으로써 테스트 유지보수 비용을 대폭 절감하고 CI/CD 파이프라인의 안정성을 확보했습니다. 이 과정은 단순한 도구 교체를 넘어, 데이터 기반의 문제 식별과 점진적인 신뢰 구축을 통해 대규모 코드베이스의 테스트 문화를 개선한 사례입니다. ## 기존 Puppeteer 기반 테스트의 문제점 * **높은 불안정성(Flakiness):** 브라우저, 가상 그래픽 엔진, 네트워크 등 제어할 수 없는 외부 요인으로 인해 테스트 결과가 수시로 변하여 개발자들에게 혼란을 주었습니다. * **복잡한 구현 방식:** 버튼 하나를 클릭하기 위해서도 요소의 존재 여부와 활성화 상태를 수동으로 확인하는 스크립트를 작성해야 했으며, 특히 커스텀 드롭다운 같은 복잡한 요소는 구현 난이도가 매우 높았습니다. * **인프라 및 유지보수 부담:** 테스트 코드를 포함한 관련 인프라 코드가 10만 줄에 달했으며, 제품 업데이트 시마다 수동으로 테스트를 수정해야 했습니다. * **긴 실행 시간:** 테스트가 정교해질수록 CI 실행 시간이 늘어나, 가장 긴 작업의 경우 완료까지 약 35분이 소요되는 등 배포 속도를 저해했습니다. ## Synthetic Monitoring을 활용한 솔루션 구축 * **레코딩 기반 테스트:** 코드를 직접 작성하는 대신 실제 페이지 상호작용을 기록하는 방식을 도입하여 스크립팅의 번거로움을 제거했습니다. * **전용 CLI 개발:** CI 환경에서 테스트를 실행하고 결과를 확인할 수 있도록 `synthetics-ci`(이후 `datadog-ci`로 확장)라는 명령줄 도구를 개발했습니다. * **자동화된 워크플로우:** 이 도구는 코드베이스 내의 `.synthetics.json` 파일을 찾아 테스트를 트리거하고, 결과 ID를 폴링(Polling)하여 성공 여부를 사용자에게 가독성 있게 출력합니다. ## 대규모 조직의 성공적인 마이그레이션 전략 * **신뢰 및 데이터 기반 설득:** 정기적인 엔지니어 설문조사를 통해 인수 테스트가 가장 큰 고통임을 데이터로 입증하고, 상세한 문서화와 내부 발표를 통해 새로운 시스템의 이점을 전파했습니다. * **점진적 도입과 비차단(Non-blocking) 모드:** 초기에는 테스트 실패가 전체 빌드를 멈추지 않도록 비차단 작업으로 설정하고 PR 댓글로만 결과를 알림으로써, 개발자들이 시스템에 적응할 시간을 제공했습니다. * **책임 분담과 추적:** Jira를 통해 각 팀에 테스트 소유권을 할당하고 마이그레이션 진행 상황을 추적했으며, 기존 플랫폼을 한 번에 삭제하는 대신 단계적으로 폐지하여 리스크를 최소화했습니다. 이러한 전환 과정은 기술적인 도구의 변화뿐만 아니라, 대규모 조직 내에서 엔지니어들의 신뢰를 얻으며 협업하는 방식의 중요성을 보여줍니다. 새로운 도구가 기존의 고통을 실질적으로 해결해 줄 수 있다는 확신을 주고, 안정적인 전환 프로세스를 제공함으로써 1년여에 걸친 대규모 마이그레이션을 성공적으로 완수할 수 있었습니다.