본문으로 건너뛰기
전체 글

WebSummoner 1.0: 다시 불러낸 Selenoid

Ghazi Triki 작성 · 7분 분량

WebSummoner 1.0 출시 이미지
목차

릴리스 공지

Docker 위의 최신 브라우저 7종, 세션마다 하나의 컨테이너, 소리까지 담는 녹화. 2024년 12월부터 보관 처리된 Selenoid를 WebSummoner가 어떻게 이어 가는지, 그리고 왜 저희 호스팅 인프라의 핵심에서 실행되고 있는지 소개합니다.

팀에서 Selenium 테스트를 실행하고 계시다면 Selenoid를 접해 보셨을 가능성이 높습니다. 테스트 세션마다 Docker 컨테이너에서 새 브라우저를 띄우고, 세션이 끝나면 폐기하는 작은 Go 프로그램입니다. 빠르고 가벼우며, 오랫동안 자체 하드웨어에서 브라우저 그리드를 운영하는 가장 쉬운 방법이었습니다. 2024년 12월 17일, 개발자들은 저장소를 보관 처리했습니다. 공지도, 작별 인사 글도 없었습니다. GitHub가 읽기 전용 프로젝트에 붙이는 회색 배너 하나가 전부였습니다.

2016년 8월 Aerokube에서 Selenoid 첫 커밋

2024년 12월 17일 저장소 보관 처리, 읽기 전용 전환

2026년 9월 WebSummoner 1.0.0: 최신 브라우저 7종, 한 줄로 끝나는 마이그레이션

그날 아침 망가진 것은 아무것도 없었습니다. 바로 그것이 문제입니다. 보관 처리된 테스트 도구는 여러분이 통제할 수 없는 일정에 따라 서서히 낡아 갑니다. 새 브라우저 버전은 더 이상 나오지 않고, 드라이버는 어긋나기 시작하며, 몇 년 동안 통과하던 테스트 스위트가 어느 날 애플리케이션과 전혀 관계없는 이유로 실패하기 시작합니다.

오픈소스는 저장소와 함께 끝나지 않습니다

저장소를 보관 처리하면 유지보수는 끝나지만, 생명까지 끝나는 것은 아닙니다. Selenoid는 Apache 2.0 라이선스로 배포되며, 이 라이선스는 사용자 모두에게 수정하고 재배포할 영구적인 권리를 부여합니다. 프로젝트의 개발자들이 다른 길을 가더라도 코드는 계속 남아 있고, 새로운 메인테이너가 이를 이어 갈 수 있습니다. Aerokube는 Selenoid를 만들어 8년 동안 이끌어 왔습니다. 보관 처리는 그들이 내릴 수 있는 결정이었고, Selenoid가 잘 해낸 모든 것에 대한 공로는 여전히 그들의 몫입니다. WebSummoner는 그 연장선입니다. Selenoid의 마지막 커밋에서 출발해 Selenoid를 훌륭하게 만든 설계를 그대로 유지하면서, 고유한 이름, 조직, 이미지, 도메인을 갖추었습니다. RIADVICE는 이미 Selenoid를 프로덕션에서 운영하고 있었고, 이를 이어 가는 것은 저희에게도, Selenoid에 의존하는 다른 모든 사람에게도 합리적인 결정이었습니다.

WebSummoner 1.0.0 출시: 브라우저 무리를 Docker 컨테이너 안에 세션 단위의 임시 환경으로 불러내는 빠른 Selenium 허브입니다.

Selenoid를 대체하지 않고 포크한 이유

포크한 이유는 두 가지입니다.

  1. 저희 자체 인프라 WebSummoner는 RIADVICE 호스팅 인프라의 근간을 이루는 요소입니다. 더 이상 브라우저 업데이트, 드라이버 수정, 보안 패치를 받지 못하는 프로덕션 의존성을 보관된 상태로 내버려 둘 수는 없었습니다. 그렇다고 더 무거운 도구로 옮기는 것은 잘 유지보수하는 것보다 비용이 더 많이 들었을 것입니다.

  2. 커뮤니티 전 세계의 팀들이 수년에 걸쳐 Selenoid 위에 테스트 스위트를 쌓아 왔습니다. 그들은 서서히 낡아 가는 도구가 아니라 꾸준히 유지보수되는 후속작을 누릴 자격이 있었습니다. Selenoid는 중요한 것들을 제대로 해냈습니다. 약 10 MB의 단일 Go 바이너리, Java 런타임 불필요, 데이터베이스 불필요, 약 1초 만에 시작되는 브라우저, 그리고 테스트 사이에 아무것도 새어 나가지 않도록 세션마다 하나의 컨테이너를 사용하는 구조입니다.

저희는 이 모든 것을 유지하고, 2024년 이후 멈춰 있던 나머지, 즉 브라우저, 드라이버, 베이스 이미지, 툴체인을 최신 상태로 끌어올렸습니다. Selenoid는 이른바 '완성된 소프트웨어'입니다. 최신 기능이 필요한 것이 아니라, 최신 브라우저와 그에 맞는 드라이버, 꾸준한 수정이 필요합니다. 저희가 맡기로 한 일이 바로 그것입니다. 호환성은 나중에 덧붙인 고려 사항이 아니라 가장 먼저 내린 결정이었습니다. Selenoid 클라이언트가 보내는 모든 요청은 앞으로도 영구적으로 그대로 받아들여집니다.

1.0.0의 새로운 기능

최신 버전의 브라우저 7종

브라우저버전
Chrome152
Firefox155
Edge152
Opera 복귀135
Brave 신규1.94
Yandex26.6
Safari (WebKitGTK) 신규2.52.6

모든 이미지는 동일한 컨테이너 테스트 스위트를 통과하며, 이 테스트는 배포된 이미지를 대상으로 격리된 환경에서 실행됩니다. 드라이버 자체가 처리하지 못하는 두 가지 경우는 숨기지 않고 건너뛰는 항목으로 문서화했습니다. 이 중 세 가지는 그 자체로 소식입니다. Brave와 Safari는 처음으로 배포됩니다. Selenoid는 Brave 이미지를 배포한 적이 없고, Safari 소스도 이미지로 배포된 적이 없습니다. Opera는 죽음에서 돌아왔습니다. 마지막 Selenoid Opera 이미지는 2024년 4월에 나왔으며, Selenium 프로젝트가 Opera 지원을 중단한 이후 Selenium 4에서는 사용할 수 없었습니다.

Brave가 합류합니다

Brave는 이번에 처음으로 배포됩니다. Selenoid는 Brave를 배포한 적이 없으며, 이제 Brave는 나머지 여섯 브라우저와 나란히 정식 이미지로 제공됩니다. Brave는 자체 체계로 릴리스 번호를 매기므로, 빌드 도구가 각 릴리스에 포함된 Chromium 버전을 읽어 그에 맞는 드라이버와 자동으로 짝지어 줍니다. 사용자들이 Brave로 웹을 이용한다면, Chrome에서 테스트하는 것과 똑같이 Brave에서도 테스트할 수 있습니다. 같은 capability, 같은 실시간 화면, 같은 녹화, 같은 방식으로 통과하는 같은 테스트 스위트입니다.

Opera가 다시 작동합니다

Selenium은 4.3.0에서 Opera 지원을 중단했습니다. 모두가 되풀이하는 우회 방법, 즉 Chrome for Testing용 chromedriver로 Opera를 구동하는 방법은 세션은 잘 시작하지만 페이지가 창을 열 때마다 렌더러가 충돌합니다. 해결책은 오류 메시지를 제대로 읽는 것이었습니다. OperaDriver의 버전 검사는 거부가 아니라 경고입니다. Opera 자체 드라이버는 Opera를 올바르게 구동하며, 허브가 사용자를 대신해 드라이버에 최신 프로토콜을 요청합니다.

Safari를 정식 대상으로 지원합니다

Safari 역시 이번에 처음으로 배포됩니다. 이미지는 Safari와 같은 엔진인 WebKitGTK를 소스에서 빌드한 것입니다. Selenoid는 빌드 파일만 가지고 있었을 뿐 이미지를 배포한 적이 없으므로, 이것이 처음으로 pull할 수 있는 이미지입니다. 지금까지 작동하지 않던 두 가지, 파일 업로드와 proxy capability는 이제 허브가 직접 처리하므로, 이 수정은 오래된 이미지든 새 이미지든 모든 이미지에 적용됩니다. 남아 있는 두 가지 특이 사항은 각각 테스트에 한 줄만 추가하면 해결되며, 어떤 줄인지는 문서에 나와 있습니다.

모든 브라우저에서 소리까지 녹화합니다

이제 세션 녹화가 7종 브라우저 모두에서 안정적으로 오디오를 담아내므로, 실패한 미디어 테스트나 WebRTC 테스트가 더 이상 무음 영상으로 남지 않습니다. 소리가 필요 없다면 capability 하나로 끌 수 있습니다.

운영을 위해 만들었습니다

Prometheus /metrics 엔드포인트, HEAD 요청에 응답하는 헬스 프로브, 큐가 가득 찼을 때의 올바른 429 응답, 모든 이미지에서 작동하는 파일 업로드, 소프트웨어 자재 명세서(SBOM)를 포함한 서명된 릴리스 이미지, 그리고 Docker 소켓이 무엇을 의미하는지 분명히 밝힌 보안 정책을 갖추었습니다.

새로 만든 UI

브라우저 화면, 로그, 큐를 보여 주는 그리드 실시간 화면인 WebSummoner UI를 처음부터 다시 만들었습니다. 세심하게 다듬은 다크 테마, 공식 브라우저 로고, 실시간 세션 및 큐 통계, 그리고 있는 그대로를 보여 주는 연결 상태 표시를 갖추었습니다. 기존 명령줄과 Compose 파일은 바꿀 필요가 없습니다.

현대적인 툴체인

Go 1.27, 테스트 스위트용 Java 25, UI용 React 19, 브라우저 이미지용 Ubuntu 26.04, CI에서의 의존성 업데이트와 취약점 검사, 그리고 검색 가능한 문서 사이트를 갖추었습니다. 프로젝트의 어느 부분을 빌드하든 Docker만 있으면 됩니다. 멀티 허브 클러스터용 로드 밸런서와 명령 한 줄로 끝나는 설치 프로그램도 허브와 함께 개선되었습니다.

지금 도구를 고르신다면

Selenoid가 하던 일을 완벽하게 대신할 도구는 없지만, 솔직히 말해 잘 맞는 선택지는 있습니다.

Selenium Grid 레퍼런스 구현입니다. 분산 모드가 필요하고 Java의 무게가 신경 쓰이지 않는다면 올바른 선택입니다.

Moon Kubernetes에서 운영하며, 병렬 세션 4개를 넘으면 상용 라이선스가 필요하다는 점을 받아들일 수 있다면 적합한 선택입니다.

WebSummoner Docker 호스트와 가상 머신 환경에서, 필요한 것을 모두 갖춘 작고 빠른 허브를 원하신다면 적합한 선택입니다.

문서에는 Selenoid, Moon, Selenium Grid, Selenide, Playwright, Puppeteer와의 소스 코드로 확인한 비교가 있으며, 그 도구들을 대신 선택해야 하는 경우도 함께 설명합니다.

Selenoid에서 마이그레이션하기

클라이언트가 새 허브를 가리키도록 하십시오. selenoid:options, X-Selenoid-* 헤더, /aerokube/... 경로, cm selenoid start, UI의 --selenoid-uri 플래그는 모두 지금도 작동하며, 앞으로도 계속 작동합니다.

바뀐 점은 단 하나입니다: Docker 이미지 안에서 설정 위치가 /etc/selenoid에서 /etc/websummoner로 옮겨졌습니다. 이 마운트만 수정하면 끝입니다.

저희의 약속

  • 영구적인 호환성. Selenoid의 capability 이름, 헤더, 경로, 명령은 기한을 두고 폐기하지 않고 영구적으로 받아들입니다. 스프린트 하나를 통째로 잡아먹는 마이그레이션은 아무도 하지 않습니다.
  • 최신 브라우저. 이미지는 각 브라우저 제조사의 안정 릴리스를 따르며, 각각 그에 맞는 드라이버를 갖춥니다. 테스트 스위트를 통과하기 전에는 어떤 이미지에도 태그를 붙이지 않습니다.
  • 지속적인 보안 관리. 의존성은 매주 업데이트되고, 모든 빌드에서 취약점 검사를 실행하며, 허브 이미지는 서명되어 소프트웨어 자재 명세서와 함께 제공됩니다.
  • 프로덕션 우선. 저희가 직접 WebSummoner를 운영합니다. 배포하는 것이 곧 저희가 의존하는 것입니다.
  • 작동하지 않는 것까지 밝히는 문서. 제약 사항을 포함한 전체 노트는 공지에 있습니다.

WebSummoner는 자신이 이길 수 있는 영역, 즉 속도, 단순함, 운영 비용에서 가장 큰 그리드들과 경쟁하는 것을 목표로 합니다. 모든 변경 사항은 이 기준으로 평가합니다.

지금 바로 이용하실 수 있습니다

Shell
websummoner \
    -p 4444:4444 \
    -v $PWD/browsers.json:/etc/websummoner/browsers.json:ro \
    -v /var/run/docker.sock:/var/run/docker.sock \
    websummoner/websummoner:latest

테스트가 http://localhost:4444/wd/hub를 가리키도록 하십시오. 전체 릴리스 노트, 마이그레이션 가이드, 그리고 논의의 장이 모두 클릭 한 번 거리에 있습니다.

📣 1.0.0 공지 전체 릴리스 노트, 그리고 질문을 남기실 수 있는 곳 📖 문서 가이드, 레퍼런스, 마이그레이션 가이드 💻 소스 코드 Apache-2.0, GitHub에서 공개

Selenoid를 사용하셨고 마이그레이션 중에 무언가 예상대로 동작하지 않는다면, 저희는 그것을 지원 문의가 아니라 버그로 여깁니다. Selenoid 위에 무언가를 만들어 유지보수해 오셨다면 알려 주십시오. 계속 작동하도록 확실히 챙기겠습니다.

브라우저 무리를 Docker 컨테이너 안으로 불러내십시오.

세션 단위의 임시 환경을 제공하는 빠른 Selenium 허브.

조직에서 WebSummoner를 운영하는 데 도움이 필요하십니까?

문의하기

WebSummoner는 RIADVICE가 Apache-2.0 라이선스로 개발하고 유지보수합니다. Aerokube와 Ivan Krutov가 만든 Selenoid, 그리고 Kirill Merkushev가 만든 원래의 UI를 바탕으로 합니다.

이 글 공유하기