
브라우저를 사람 대신 자동으로 조작하고 싶을 때가 있다. 버튼 클릭, 로그인, 폼 입력, 스크롤… 이걸 코드로 시킬 수 있는 도구가 Selenium이다. 핵심부터 한 줄로 정리하면 이렇다.
Selenium = 브라우저를 코드로 자동 조작하는 도구. 테스트 자동화와 웹 스크래핑에 주로 씀
브라우저를 원격으로 조종하는 리모컨이라고 생각하면 됨! 사람이 직접 마우스 클릭하고 키보드 치던 걸, 코드가 대신 해주는 거다.
마치 매크로 프로그램 같은 건데, 훨씬 정교하고 코드로 제어할 수 있는 버전 같음!
Selenium은 WebDriver라는 다리를 통해 브라우저를 제어한다.
내 코드 → WebDriver → 브라우저 (Chrome, Firefox 등)
Chrome을 쓰면 ChromeDriver, Firefox면 GeckoDriver를 설치해서 연결한다. 브라우저가 실제로 켜지면서 코드가 시키는 대로 움직인다. 헤드리스(Headless) 모드를 쓰면 화면 없이 백그라운드에서만 돌릴 수도 있음.
Python, Java, JavaScript, C# 등 여러 언어를 지원한다. 제일 많이 쓰이는 건 Python + Selenium 조합 같음.
크게 두 가지 용도다.
1. E2E 테스트 자동화
실제 브라우저에서 "유저가 이 흐름으로 쓸 때 잘 동작하나" 검증. 배포 전에 자동으로 돌려서 주요 기능이 안 깨졌는지 확인하는 것 같음.
2. 웹 스크래핑
JavaScript로 동적으로 렌더링되는 페이지는 requests 같은 단순 HTTP 요청으로 못 긁어온다. Selenium은 실제 브라우저를 돌리니까 JS 실행 후 결과까지 긁어올 수 있음.
요즘 E2E 테스트 쪽에선 Playwright가 대세로 올라오고 있음. 비교하면 이렇다.
(내가 코딩하면서 쓰는 것이 playwright임! ㅋㅋㅋ 구버전 playwright가 selenium이구만)
| Selenium | Playwright | |
|---|---|---|
| 역사 | 오래됨 (2004~) | 신생 (Microsoft, 2020~) |
| 속도 | 상대적으로 느림 | 빠름 |
| 설정 | 드라이버 별도 설치 필요 | 자체 내장 |
| 언어 지원 | 폭넓음 | JS/TS/Python/Java/C# |
| 특징 | 범용성·레퍼런스 많음 | 자동 대기, 병렬 실행 강력 |
Selenium은 레퍼런스가 훨씬 많고, Java 기반 프로젝트나 기업 QA 환경에서 여전히 많이 쓴다. Playwright는 빠르고 설정이 쉬워서 신규 프로젝트엔 Playwright를 많이 선택하는 추세 같음!
E2E 테스트 예시 (Python)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://myapp.com/login")
driver.find_element(By.ID, "email").send_keys("test@test.com")
driver.find_element(By.ID, "password").send_keys("1234")
driver.find_element(By.ID, "login-btn").click()
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "dashboard"))
)
print("로그인 성공!")
driver.quit()
이 코드를 CI/CD 파이프라인에 넣으면 배포 전마다 자동으로 로그인 테스트를 돌릴 수 있음.
실무 시나리오
| 구분 | 내용 |
|---|---|
| 한 줄 정의 | 브라우저를 코드로 자동 조작하는 도구 |
| 비유 | 브라우저 원격 리모컨 |
| 주요 용도 | E2E 테스트 자동화 / 웹 스크래핑 |
| 핵심 개념 | WebDriver, 요소 찾기, 대기(Wait) |
| 요즘 대안 | Playwright (신규 프로젝트엔 이쪽 추세) |
쉽게 외우면 "사람이 브라우저 쓰는 걸 코드가 대신 해주는 것" — 이렇게 보면 감 잡힐 듯!