Cloud Run에서 SeleniumBase를 이용해 크롤링 자동화를 구현하려던 중, 여러 문제와 마주쳤습니다. Chrome/ChromeDriver 버전 문제와 SeleniumBase의 Chrome 옵션 추가 방식 문제 위주로 디버깅 과정을 상세하게 살펴보겠습니다.
문제 증상
-
ChromeDriver 버전 불일치 및 연결 실패
- Docker 컨테이너에 최신 Chrome(저의 경우, Chrome 135)이 설치되어 있음에도, undetected‑chromedriver가 자동으로 맞는 드라이버를 찾지 못해 “cannot connect to chrome at 127.0.0.1:9222” 같은 에러가 발생했습니다.
- 이것 때문에 웹드라이버가 크롬 프로세스에 연결하지 못하면서 세션 생성에 실패하더라구요.

-
SeleniumBase 옵션 추가 방식 문제
- 처음에는 SB 객체 생성 시
chrome_args 인자나 add_chrome_option() 메서드를 사용하려고 했으나, 사용 중인 SeleniumBase 버전에서는 이들 인자가 지원되지 않아 에러가 발생하였습니다.
- "unexpected keyword argument 'chrome_args'" 또는 "BaseCase object has no attribute 'add_chrome_option'" 등의 에러가 뜨면서 진행이 중단되었습니다.

트러블슈팅 과정 및 해결 방법
1. Chrome 및 ChromeDriver 버전 맞추기
-
ChromeDriver를 수동으로 설치
Dockerfile에서 base/ deps 이미지를 건드리지 않고, 최종 단계에서 직접 ChromeDriver를 다운로드하도록 설정했습니다.
- Chrome 135(또는 사용 중인 안정 버전)에 맞는 Linux64용 ChromeDriver의 다운로드 URL을 확인하고, wget으로 다운받아 압축 해제 후, 원하는 위치(
/usr/local/bin/)로 이동시키고, 실행 권한을 부여했습니다.
- 단, 압축 해제 시 내부 폴더 구조 때문에 바로 원하는 파일 위치에 생성되지 않는 문제도 발생했는데, 이를 해결하기 위해 압축 해제 후 파일 이동(
mv) 및 임시 폴더 삭제 절차를 추가하였습니다.
-
참고
ChromeDriver 다운로드 URL은 Chrome for Testing 또는 ChromeDriver 공식 배포 페이지에서 확인하며, Cloud Run 환경은 Linux 기반이므로 반드시 linux64 버전을 사용해야 합니다.
2. SeleniumBase의 Chrome 옵션 추가 방식 문제 해결
- 문제 원인
SeleniumBase의 특정 버전에서는 생성자 인자로 chrome_args를 지원하지 않고, add_chrome_option() 메서드도 제공하지 않았습니다.
- 해결 방법
SB 객체가 생성된 후, 내부 드라이버 옵션(sb.driver.options)에 직접 add_argument()를 호출해 필요한 옵션들을 추가하는 방식으로 전환했습니다.
- 추가한 옵션은
--no-sandbox, --disable-dev-shm-usage, --disable-gpu, --remote-debugging-port=9222 등으로, Cloud Run 같은 headless 환경에서 안정적으로 Chrome을 구동하기 위한 필수 옵션입니다.
- 이 방식으로 옵션을 추가하니, 기존에 발생하던 "BaseCase object has no attribute 'add_chrome_option'" 등의 에러가 해결되었습니다.
3. 추가 환경 설정 확인
- 필수 라이브러리 설치
리눅스 환경에서 Chrome 헤드리스 구동 시 필요한 시스템 라이브러리(libnss3, libgtk-3-0, fonts-liberation, libasound2 등)를 Dockerfile에서 추가 설치했습니다.
- 메모리 할당 확인
Cloud Run에서 Chrome 구동 시 메모리 부족 문제로 인해 프로세스가 일찍 종료될 수 있으므로, 기본 2Gi 대신 충분한 메모리(저의 경우, 4Gi)를 할당하는 것도 중요한 해결책입니다.
- 환경 변수 설정
XDG_RUNTIME_DIR=/tmp 등의 환경 변수 설정으로 런타임 디렉터리 문제를 회피했습니다.
결론
이번 트러블슈팅의 핵심 포인트는 두 가지였습니다.
- ChromeDriver 설치 문제
- Cloud Run에서 Chrome 버전(예: 135)에 맞게 ChromeDriver를 직접 다운로드하고, 압축 해제 후 올바른 위치에 배치하는 과정이 필요했습니다.
- SeleniumBase 옵션 추가 방식 문제
- SeleniumBase 최신 버전에서는 생성자 인자나 전용 메서드 대신, SB 객체 생성 후
sb.driver.options.add_argument()를 통해 직접 Chrome 옵션들을 추가해야 한다는 점을 확인했습니다.
이 두 문제를 해결함으로써 Cloud Run에서 Chrome을 올바르게 구동하고, SeleniumBase 기반 웹 자동화 작업을 정상적으로 구현할 수 있었습니다.
안녕하세요! 서비스 개발중에 동일한 크롬드라이버 gcp클라우드런 문제를 겪고있는 개발자입니다! 궁금해서 더 여쭤보고 싶은게 있어서 답글이나 이메일 남겨주시면 정말 감사하겠습니다! 참고로 제 이메일은 jaemdeu@gmail.com입니다! 편하게 연락주세요^^