1. 문제
- AWS 서버에서 Selenium을 이용해 리뷰를 크롤링하는 코드를 실행했더니 CPU 사용량이 100%에 근접하는 현상이 발생하였다.
- EC2 같이 스펙이 낮은 서버에서 헤드리스 크롬(Chromedriver)을 구동할 경우, 브라우저 엔진이 동작하면서 리소스 사용량이 크게 늘어날 수 있다.
2. 문제 원인
- Selenium 자체의 무거운 동작 방식
- Selenium은 실제 브라우저(크롬 등)를 띄워서 페이지 로딩, JavaScript 실행 등을 처리한다.
- 이 과정에서 CPU와 메모리를 많이 사용하게 된다.
- EC2 인스턴스 환경
- 일반적으로 작은 EC2 인스턴스는 CPU 자원이 제한적이라, 브라우저를 다수 실행하거나 연속 크롤링 시 CPU 사용량이 급증하기 쉽다
- 페이지 내용이 이미 HTML에 포함
- Steam의 “Recommended” 리뷰는 자바스크립트 없이도 정적 HTML로 되어 있는 경우가 많다
- 즉, 굳이 실제 브라우저로 렌더링하지 않아도
requests
+ BeautifulSoup
같은 간단한 방식으로 충분히 파싱 가능하다
3. 해결 방안
3.1. Selenium 제거 및 BeautifulSoup으로 전환
- requests와 BeautifulSoup만 사용해 HTML을 가져오고, 필요한 요소를 파싱한다.
- 브라우저 엔진을 구동하지 않으므로 CPU 사용량이 매우 낮아진다.
수정 전 핵심 흐름
webdriver.Chrome
으로 헤드리스 브라우저 실행
driver.get(url)
로 페이지 열기
- 필요한 셀렉터(
.review_box
)로 요소 찾기
driver.quit()
로 브라우저 종료
수정 후 핵심 흐름
requests.get(url)
로 HTML을 텍스트 형태로 받아오기
BeautifulSoup(html, "html.parser")
로 DOM 파싱
.select(".review_box")
등 원하는 요소에 접근
- HTML 내 리뷰가 보이는지 확인 후
app_id
등을 추출
3.2. 코드
import requests
from bs4 import BeautifulSoup
def fetch_top3_reviews(steam_id_str):
url = f"https://steamcommunity.com/profiles/{steam_id_str}/recommended"
headers = {
"User-Agent": (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/87.0.4280.66 Safari/537.36"
)
}
response = requests.get(url, headers=headers, timeout=10)
if response.status_code != 200:
return []
soup = BeautifulSoup(response.text, "html.parser")
boxes = soup.select(".review_box")
recommended = []
for box in boxes:
try:
title_elem = box.select_one(".vote_header .title > a")
if not title_elem or "Recommended" not in title_elem.text:
continue
href = title_elem.get("href", "")
if "/recommended/" not in href:
continue
app_id = href.split("/recommended/")[1].split("/")[0]
recommended.append({"app_id": app_id})
if len(recommended) >= 3:
break
except Exception as e:
print(f"리뷰 박스 처리 중 오류: {e}")
continue
return recommended
- 기존에
WebDriverWait
, driver.find_elements
등을 사용하던 부분이 사라졌고, 대신 BeautifulSoup
을 통한 단순 HTML 파싱으로 변경되었다.
- 최대 3개까지만 리뷰 데이터를 가져오며, 각 리뷰에서
app_id
를 추출한다.
3.3. 적용 효과
- CPU 사용률 감소: 브라우저 엔진을 구동하지 않으므로 EC2에서 CPU 부하가 크게 줄어든다.
4. 트러블슈팅 요약
- 문제: Selenium으로 인한 브라우저 구동 → CPU 사용량 100% 근접
- 원인: 실제 브라우저 엔진이 동작하면서 리소스 사용량 급증
- 해결: 정적 HTML 파싱 가능하므로
requests
+ BeautifulSoup
도입
- 결과: CPU 부하 감소, 코딩 구조 단순화