프론트엔드 3대장이라 불리는 React, Angular, Vue. Protractor는 Angular 및 AngularJS 애플리케이션을 위한 E2E 테스트 프레임워크이다. Protractor는 다른 E2E 프레임워크와 마찬가지로 실제 브라우저에서 실행되는 애플리케이션에 대해 테스트를 실행하고 사용자와 상호 작용한다.
Protractor에 대해 처음 알게 된 건 과거 E2E 테스트 프레임워크를 조사하던 때였다. Protractor, Playwright, Puppeteer, WebdriverIO 등이 있었지만 경험상 프론트엔드 테스트를 위한 도구로만 꼽자면 Cypress가 압도적인 성능과 편리함을 보여줬었다. 하지만 장점이 있으면 단점이 존재하듯 Cypress는 담당 중인 서비스 테스트 요구사항에 적합하지 않은 도구였다.
당시 PoC를 진행하며 여러 문제가 있었다. 첫 번째로 업로드와 다운로드에 대한 처리가 어려웠다. 두 번째로는 동시에 2개 브라우저 구동이 불가했으며 멀티탭 또한 지원하지 않았다. 뿐만 아니라 대규모 테스트 스위트 운영에 필요한 병렬 테스팅에 대해 다소 어려움이 있었던 도구였다. Shadow DOM 지원도 없었다. 다른 도구에서 무료로 제공되는 기능은 비용을 지불해야 하거나 직접 구축해야 했다.
결국 내가 선택한 도구는 웹 모바일 모두 구축 가능한 WebdriverIO였다. 많은 메인테이너와 성숙한 커뮤니티, 다양한 플러그인, 병렬 실행, 쉬운 디버깅, 도커 지원, 여러 리포터 지원, 멀티탭 지원, iFrame 지원, 다중 세션 브라우저, 모든 브라우저 지원, BDD, 모바일(네이티브, 하이브리드), Shadow DOM 지원, DevTools 프로토콜 확장, 시각적 테스트, 클라우드 테스트 서비스와의 편리한 통합 등의 장점을 지니고 있다.
이후 Java-TestNG-Cucumber-Selenium-Appium, Python-Pytest-Behave-Selenium-Appium 기반의 자동화를 경험했고 현재는 실무에서 WebdriverIO를 다루며 개인 시간에는 React 개발 학습을 병행하는 중이다.
그러던 찰나 Protractor 지원 중단 소식을 접하게 되었다.
Protractor is deprecated and will reach end-of-life in the summer of 2023. We discourage any new users from adopting Protractor and recommend existing users migrate to other end-to-end testing solutions.
Protractor 중단의 이유와 원인에 대해 Future of Angular E2E & Plans for Protractor #5502 이슈와 여러 아티클을 살펴보았다. 기분이 이상했다. 나는 왜 사용하지도 않는 Protractor에 대해 묘한 감정을 느낀 걸까. 묘한 감정의 원인은 Protractor의 짧은 역사에서 비롯되었다.
2013년 등장한 Protractor는 당시 기술적으로만 본다면 테스트와 JavaScript 관점에서 좋은 디자인과 기술적인 결정으로 인해 좋은 출발이었다는 평가를 받았었다. 공식 Selenium 프로젝트 JavaScript 바인딩을 사용했기 때문이다. 지금도 그렇지만 당시 Selenium 프로젝트에는 활발한 커뮤니티가 존재했었다. Selenium은 아직까지도 산업 표준이라 불릴 만큼 활발한 커뮤니티가 존재하는 도구이다. 또한 E2E 테스트는 본질적으로 동기식이다. 따라서 당시 Protractor는 콜백이 아닌 보다 개선된 Promise를 사용하기로 결정했었다. 이는 Selenium Javscript 바인딩 또한 Promise를 사용했기 때문에 Protractor와 JavaScript 바인딩에는 일관성이 있었다. 뿐만 아니라 Protractor 초기만 하더라도 Google의 전담 엔지니어가 적극적으로 개발하고 유지관리했던 프로젝트였다. 기능 추가 버그 수정 기능 개선등의 정기 릴리스가 있었고 Github 프로젝트에서 언제든지 Protractor에 대한 이슈와 문제를 다루는 토론 문화가 있었다.
Protractor의 좋은 출발은 테스트와 JavaScript 관점에서 Selenium 프로젝트 JavaScript 바인딩을 사용하고 일관성을 고려해서 Promise를 결정한 이유도 있겠지만 Google에서 Protractor를 위한 전담 엔지니어 제공을 했던 점이 가장 큰 영향을 받지 않았을까? Protractor를 위한 전담 엔지니어의 관심으로 인해 Protractor 프로젝트의 원활한 정기 릴리스와 활발한 토론이 진행될 수 있었기 때문이다.
하지만 Google에서 Protractor를 위한 전담 엔지니어 제공을 중단하게 되었고 이는 정기 릴리스에 영향을 끼치게 되었다. 초기 콜백 대신 Promise라는 좋았던 기술적인 결정은 async/await 함수로 인해 마이그레션이 필요했지만 결국 전담 엔지니어 제공의 중단으로 이어지는 유지 관리 어려움으로 인해 많은 시간이 소요되었다. 이 시점에서 다른 E2E 테스트 도구는 기술 변화 흐름에 맞춰 비동기성 처리를 위한 더 나은 사용자 경험과 더불어 더욱더 활발한 커뮤니티와 확장 가능한 플러그인 및 서비스 생태계가 구축되고 있었다. 끝내 Protractor는 변화를 따라가지 못했고 Protractor 사용자에게 Protractor 사용 중단 발표와 함께 다른 도구로의 마이그레이션을 권장하게 되었다.
나는 왜 사용하지도 않는 Protractor에 대해 묘한 감정을 느낀 걸까를 다시 생각해 보았다. Protractor가 역사 속으로 사라질 준비를 하고 있을 무렵 새로운 회사에 합류하게 된 첫날이기도 한 22년 12월 1일 WebdriverIO는 많은 관심 속에서 v8을 출시했고 CommonJS에서 ESM 전환과 단위, 컴포넌트 테스팅을 위한 새로운 브라우저 등의 굵직한 변경 사항이 포함되었다. v8 변경 사항으로 인해 여러 신규 버그가 생겼지만 활발한 커뮤니티와 WebdriverIO 팀의 발 빠른 대처로 인해 수정하고 개선해 가는 중이다.
매일 아침 가장 먼저 하는 일은 WebdriverIO 커뮤니티에 올라온 문제를 살펴보고 Github 문서를 살펴보는 것이다. 로드맵에 변경 사항은 없는지 새로운 소식은 없는지, 내가 경험하지 못한 문제를 다른 사람이 겪고 있는지 혹은 내가 겪었던 문제라면 도울 수 있는 방법이 있을지. 이러한 것들을 개인 시간에 살펴보고 정리해서 도움을 주고 프로젝트에 기여하는 것, 이러한 과정에서 느리지만 천천히 성장하는 순간들을 마주하는 것 같다.
Protractor가 당시 기술적으로 좋은 프레임워크였음에도 불구하고 JavaScript와 E2E 테스트의 발전과 변화 속도를 다른 프레임워크와 함께 따라가지 못했던 이유는 당연한 얘기지만 Google에서 Protractor를 위한 전담 엔지니어 제공 중단부터였다. 사람들의 관심이 사라진다면 아무리 좋은 도구일지라도 역사 속으로 사라질 수 있다는 것을 Protractor의 마지막 릴리스 발표를 통해 배웠다.
테스트 자동화를 언제까지 담당할지, 나의 정체성은 무엇인지, 커리어의 끝이 어딜지, 팀에서 나를 계속 필요로 할지. 오래전부터 생각해 왔던 테스팅 분야의 미래와 꿈만 있을 뿐 아무것도 정해진 게 없고 예측하기 힘든 삶이지만 그래도 귀엽게 생긴 WebdriverIO 로고를 볼 때면 하고 있는 고민들에 대해 위로받는 기분이 들어서 좋다.
만약 미래에 어떠한 이유로 인해 WebdriveIO 마지막 릴리스가 발표된다면 줄곧 사용해 왔던 난 어떤 기분일까, 그때 난 어떠한 커리어를 쌓아가고 있을까. 잘은 모르겠지만 뭐라도 하고 있을 것 같다.