파이썬 Selenium 네트워크 헤더 추가와 가로채기 방법 CDP Network.enable 활용
🚀 자동화 테스트의 숨은 기술, CDP를 이용한 HTTP 헤더 제어와 요청 가로채기 완벽 가이드
웹 자동화 테스트를 하다 보면 단순한 클릭이나 입력만으로는 해결되지 않는 경우가 많습니다.
특히 인증 토큰이 필요한 API 호출이나 사용자 세션을 흉내 내야 할 때, 네트워크 요청의 헤더를 조작하거나 요청을 가로채야 하는 상황이 생기죠.
이럴 때 강력한 힘을 발휘하는 것이 바로 Selenium과 Chrome DevTools Protocol(CDP)의 결합입니다.
단순한 브라우저 조작을 넘어 네트워크 레벨까지 제어할 수 있게 해 주기 때문에, 중급 이상의 자동화 작업에서는 필수적으로 알아야 할 기술입니다.
이번 글에서는 파이썬 Selenium에서 CDP의 Network.enable과 setExtraHTTPHeaders 기능을 활용해 HTTP 요청에 커스텀 헤더를 추가하고, 네트워크 요청을 가로채는 방법을 단계별로 정리해 드립니다.
실제 코드 예시와 함께, 언제 이 기능을 사용하면 좋은지, 그리고 주의해야 할 점까지 함께 다뤄보니 끝까지 읽으시면 실무에도 바로 적용하실 수 있을 거예요.
📋 목차
🔗 CDP Network.enable의 기본 개념
Selenium을 사용할 때 브라우저의 동작을 세밀하게 제어하려면 Chrome DevTools Protocol(CDP)을 활용하는 것이 필수입니다.
CDP는 크롬 브라우저가 내부적으로 사용하는 디버깅 프로토콜로, 단순히 DOM을 제어하는 수준을 넘어 네트워크, 성능, 보안 등 다양한 영역을 다룰 수 있도록 해줍니다.
그중에서도 Network.enable은 네트워크 이벤트를 수집하고, 요청과 응답을 가로채거나 수정할 수 있도록 열어주는 핵심 명령어입니다.
이 기능을 활성화하면 브라우저가 주고받는 모든 HTTP 요청과 응답을 실시간으로 추적할 수 있으며, 이를 통해 요청 헤더를 변경하거나 응답 데이터를 분석하는 고급 작업이 가능해집니다.
📡 Selenium과 CDP의 연동 방식
Python Selenium에서는 driver.execute_cdp_cmd() 메서드를 통해 CDP 명령을 직접 호출할 수 있습니다.
이 메서드는 JSON 형태의 명령과 파라미터를 브라우저에 전달하고, 그 결과를 다시 Python 객체로 반환받습니다.
따라서 네트워크 기능을 활성화하려면 아래와 같이 코드를 작성합니다.
from selenium import webdriver
driver = webdriver.Chrome()
# CDP Network 활성화
driver.execute_cdp_cmd("Network.enable", {})
이렇게 설정하면 이후 발생하는 모든 네트워크 이벤트를 캡처할 수 있으며, 추가로 이벤트 리스너를 연결하면 요청과 응답의 세부 정보를 실시간으로 처리할 수도 있습니다.
💡 TIP: Network.enable을 실행하지 않으면 setExtraHTTPHeaders 같은 기능이 정상적으로 동작하지 않습니다. 먼저 네트워크 모니터링을 켜고, 이후 원하는 헤더 추가나 요청 가로채기를 적용해야 합니다.
🛠️ setExtraHTTPHeaders로 커스텀 헤더 추가하기
웹 자동화 과정에서는 단순히 URL을 열고 버튼을 클릭하는 것만으로는 부족할 때가 많습니다.
특히 API 호출 시 필요한 인증 토큰이나 사용자 세션 쿠키 같은 값은 네트워크 요청의 헤더에 담겨야 정상적으로 작동합니다.
이때 Selenium과 CDP의 Network.setExtraHTTPHeaders 기능을 사용하면 브라우저에서 발생하는 모든 요청에 원하는 헤더를 손쉽게 추가할 수 있습니다.
🔑 인증 토큰 헤더 추가 예제
가장 대표적인 활용 사례는 Bearer 토큰을 포함한 Authorization 헤더입니다.
아래 예시에서는 모든 요청에 자동으로 인증 정보를 추가하는 방법을 보여줍니다.
headers = {
"Authorization": "Bearer your_api_token_here",
"User-Agent": "Custom-Agent/1.0"
}
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": headers})
위 코드를 실행하면 이후 발생하는 모든 HTTP 요청에 지정한 Authorization과 User-Agent 헤더가 자동으로 붙게 됩니다.
이 방식은 특히 로그인이 필요한 페이지를 자동화하거나, 특정 API 호출을 테스트할 때 매우 유용합니다.
🧩 헤더 추가 시 유용한 팁
- 🛠️Network.enable을 먼저 실행해야 setExtraHTTPHeaders가 정상적으로 작동합니다.
- ⚙️헤더를 덮어쓰면 기존 브라우저 기본 헤더와 충돌할 수 있으므로 필요한 항목만 추가하는 것이 좋습니다.
- 🔌특정 요청에만 헤더를 추가하려면 요청 가로채기 기능을 함께 활용하세요.
⚠️ 주의: 민감한 인증 토큰이나 API 키를 코드에 직접 하드코딩하면 보안 위험이 있습니다. 반드시 환경 변수나 별도의 보안 저장소를 통해 관리하는 것이 안전합니다.
⚙️ 요청 가로채기와 조건부 응답 처리
CDP를 활용하면 단순히 요청 헤더를 추가하는 것뿐 아니라, 요청을 가로채고 원하는 방식으로 수정하거나 차단할 수 있습니다.
이를 통해 특정 리소스를 로드하지 않게 만들거나, 테스트 시 필요한 가짜 응답을 반환하는 등 다양한 제어가 가능합니다.
🕹️ 요청 가로채기 기본 설정
요청을 가로채려면 Network.setRequestInterception을 활성화해야 합니다.
이 기능을 통해 특정 URL 패턴을 지정하면 해당 요청이 브라우저에서 실행되기 전에 Python 코드로 제어할 수 있게 됩니다.
# 요청 가로채기 활성화
driver.execute_cdp_cmd("Network.setRequestInterception", {
"patterns": [{"urlPattern": "*", "resourceType": "Document", "interceptionStage": "HeadersReceived"}]
})
이후에는 특정 이벤트 핸들러를 통해 요청을 취소하거나, 다른 응답을 반환하도록 지정할 수 있습니다.
📂 조건부 응답 처리
테스트 환경에서 API 서버가 불안정하거나 외부 의존성을 줄이고 싶을 때, 가짜 응답을 반환하는 방법이 유용합니다.
CDP의 Network.continueInterceptedRequest 명령을 활용하면 요청을 가로챈 뒤, 원래 서버 대신 지정한 내용을 응답으로 보낼 수 있습니다.
💬 예를 들어, /api/user 요청에 대해 실제 서버 응답 대신 테스트용 JSON 데이터를 반환하도록 구성할 수 있습니다.
🧭 활용 사례
| 활용 상황 | 효과 |
|---|---|
| 광고 리소스 차단 | 불필요한 요청을 제거하여 테스트 속도 향상 |
| API 응답 모킹 | 외부 서버 의존도 최소화, 재현성 높은 테스트 환경 구축 |
| 조건부 헤더 조작 | 특정 요청에만 인증 헤더 삽입 |
💎 핵심 포인트:
요청 가로채기 기능을 이용하면 테스트의 유연성이 크게 높아집니다. 단순히 네트워크를 모니터링하는 수준을 넘어, 상황에 맞는 응답을 직접 설계할 수 있습니다.
🔌 API 테스트와 인증 시 활용 사례
네트워크 요청 제어 기능은 단순한 브라우저 테스트를 넘어서 API 테스트 및 인증 자동화에서도 큰 가치를 발휘합니다.
실무 환경에서 자주 등장하는 사례들을 정리해 보면 아래와 같습니다.
🔑 토큰 기반 인증 자동화
많은 웹 서비스가 Authorization: Bearer 형태의 토큰 기반 인증을 사용합니다.
이 경우 로그인 과정을 자동화하는 대신, setExtraHTTPHeaders로 토큰을 삽입하면 로그인 단계를 생략하고도 보호된 API 엔드포인트에 접근할 수 있습니다.
🧪 API 테스트 시 응답 모킹
개발 단계에서 실제 서버를 매번 호출하는 것은 비효율적일 수 있습니다.
이럴 때는 요청 가로채기 기능을 이용해 API 응답을 직접 정의하고, 다양한 상황(성공, 실패, 지연 등)을 시뮬레이션할 수 있습니다.
fake_response = {
"status": 200,
"headers": {"Content-Type": "application/json"},
"body": '{"result": "success", "user": "tester"}'
}
# 특정 요청에 대해 가짜 응답 반환
driver.execute_cdp_cmd("Fetch.fulfillRequest", {
"requestId": request_id,
"responseCode": fake_response["status"],
"responseHeaders": [{"name": k, "value": v} for k, v in fake_response["headers"].items()],
"body": fake_response["body"].encode().decode("latin1")
})
위와 같은 방식으로 테스트 환경에서 실제 서버와 동일한 JSON 구조를 반환하게 만들 수 있어, 프론트엔드 테스트 자동화에도 활용할 수 있습니다.
📊 모니터링과 로깅
테스트 실행 중 발생하는 모든 요청과 응답을 로깅하면 API 성능 분석이나 에러 추적에도 도움이 됩니다.
Selenium과 CDP를 결합하면 단순 UI 테스트를 넘어, 네트워크 계층까지 포함한 종합적인 품질 관리 도구로 발전시킬 수 있습니다.
💎 핵심 포인트:
API 인증, 응답 모킹, 로깅까지 네트워크 제어 기능은 다양한 실무 상황에서 활용됩니다. 단순한 자동화 도구를 넘어서, 테스트 신뢰성을 높이는 강력한 무기가 될 수 있습니다.
💡 네트워크 제어 시 주의사항과 한계
Selenium과 CDP를 활용하면 네트워크 레벨까지 제어할 수 있어 매우 강력하지만, 실무에서 사용할 때는 반드시 주의해야 할 점과 한계를 이해하고 있어야 합니다.
잘못 사용하면 보안 위험이나 테스트 불안정성을 초래할 수 있습니다.
⚠️ 보안 관련 유의사항
- 🔐민감한 API 키와 토큰은 코드에 직접 노출하지 않고 환경 변수 또는 보안 저장소를 이용하세요.
- 🛡️테스트 자동화를 위해 사용하는 가짜 응답은 실제 운영 환경에 노출되지 않도록 분리된 환경에서만 사용하세요.
🚧 기능적 한계
아무리 강력해 보여도 CDP를 통한 네트워크 제어에는 몇 가지 제한이 존재합니다.
예를 들어, 브라우저 내에서 발생하는 모든 요청을 완벽히 제어할 수는 없습니다.
특히 브라우저 내부적으로 생성되는 일부 요청이나 WebSocket 통신은 제어가 어렵습니다.
⚠️ 주의: CDP는 크롬 기반 브라우저에 최적화되어 있으므로 Firefox, Safari 등 다른 브라우저에서는 동일하게 동작하지 않습니다.
🧭 안정적인 테스트를 위한 팁
네트워크 제어 기능을 사용할 때는 테스트 안정성을 최우선으로 고려해야 합니다.
아래와 같은 방식으로 접근하면 더 신뢰성 있는 테스트를 구성할 수 있습니다.
- ✅가짜 응답(Mock)을 사용할 때는 실제 API와 동일한 데이터 구조를 유지하세요.
- ✅네트워크 요청 실패 시 재시도 로직을 추가하여 테스트가 불필요하게 깨지지 않도록 하세요.
- ✅운영 환경과 테스트 환경을 명확히 구분하여, 실수로 실제 서비스에 영향을 주지 않도록 관리하세요.
💎 핵심 포인트:
네트워크 제어는 강력하지만 만능은 아닙니다. 항상 보안과 안정성을 고려하며, 테스트 목적에 맞게 신중하게 적용해야 합니다.
❓ 자주 묻는 질문 (FAQ)
Selenium에서 CDP Network.enable은 꼭 필요한가요?
특정 요청에만 헤더를 추가할 수 있나요?
가짜 응답(Mock response)을 반환할 수 있나요?
모든 브라우저에서 CDP 네트워크 제어가 되나요?
API 키나 토큰을 코드에 직접 넣어도 되나요?
요청 가로채기로 광고나 불필요한 리소스를 차단할 수 있나요?
WebSocket 통신도 가로챌 수 있나요?
테스트 환경과 운영 환경을 어떻게 구분해야 하나요?
📝 Selenium 네트워크 제어 활용의 마무리 정리
파이썬 Selenium에서 CDP Network.enable과 setExtraHTTPHeaders를 활용하면 단순 UI 자동화를 넘어 네트워크 요청과 응답까지 제어할 수 있습니다.
이 기술은 인증 토큰 삽입, API 응답 모킹, 광고 차단, 성능 모니터링 등 다양한 실무 상황에서 강력한 무기로 활용됩니다.
다만, 크롬 기반 브라우저에 최적화된 기능이므로 브라우저 호환성을 고려해야 하며, 보안 이슈를 방지하기 위해 API 키와 토큰 관리에도 주의가 필요합니다.
이번 글을 통해 네트워크 헤더 추가와 요청 가로채기의 기본 개념, 활용 방법, 주의사항까지 모두 살펴봤습니다.
테스트 자동화가 점점 복잡해지는 환경에서 Selenium과 CDP의 결합은 더욱 강력한 도구가 될 수 있습니다.
실무 프로젝트에 적절히 적용한다면 테스트 신뢰성과 생산성을 크게 향상시킬 수 있을 것입니다.
🏷️ 관련 태그 : Selenium, 파이썬자동화, 네트워크가로채기, HTTP헤더추가, CDP활용, API테스트, 웹테스트자동화, 크롬디버깅프로토콜, 토큰인증, 테스트자동화