기존 모듈의 문제점

속도가 느리다

데이터 수집 속도의 중요성

<aside> 💡 데이터의 갱신이 실제 서비스에 반영되는데 걸리는 시간은 서비스의 품질을 의미한다.

</aside>

편의점 할인 행사 품목은 하루에 한번 자정에 변경된다. 따라서, 매일 자정에 해당 정보를 수집해야 우리 서비스가 제대로된 할인 정보를 수집할 수 있다. 데이터의 원천이 우리 서비스가 아니기 때문에, 이를 수집하는데 시간 차이가 발생하게 된다. 서비스의 품질을 올리기 위해서는 이 시간 차이를 최대한 작게 하는 것이 중요하다.

기존 모듈의 동작 속도

개선 전 모듈의 동작 속도 : 총 30분이 걸린다.

개선 전 모듈의 동작 속도 : 총 30분이 걸린다.

기존 모듈이 동작을 완료할 때 까지 30분이 걸렸다.

<aside> 💡 서비스가 제대로 동작하지 않는 상황이 30분이상 지속될 가능성을 의미한다.

</aside>

모듈의 동작 환경에 필요한 것이 많다

아래 코드는 기존 모듈의 python 코드의 일부분이다.

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

기존 모듈이 크롤링하는 웹 페이지들은 모두 동적생성된 웹 페이지다. 즉, 뼈대가 되는 HTML, CSS, JS 파일을 서버에서 불러온 뒤, 실제 데이터는 별도의 HTTP 통신을 통해 가져와 DOM을 수정하는 형태로 제공되는 웹 페이지다. 따라서, 단순한 정적 크롤링으로 데이터를 수집할 수 없다.

보통 이런 웹사이트를 크롤링할 때는 브라우저의 드라이버를 사용해 사람이 브라우저를 사용하는 행동을 모방하여 데이터를 수집한다. 쉽게 말해, 클릭 매크로의 기능이 정적 크롤링에 추가된 방식이다.

사실상 GUI 환경에서만 동작할 수 있다.

<aside> 💡 cli 기반의 웹 브라우저와, 드라이버가 있다면 가능하지만, 찾아보기 힘들다. 대부분의 동적 크롤링의 경우 구글의 크롬 브라우저, Mac 의 Safari, Firefox 등의 브라우저를 사용한다.

</aside>

동적 크롤링은, 코드를 통해 브라우저를 제어해, 특정 위치를 클릭하고 데이터를 수집하는 방식이기 때문에, 코드가 실행되면 브라우저가 실행된다. 따라서, 모니터에 브라우저가 띄워진 상태로 동작하게 된다.

성능 개선하기

크롤링 대상과 방법에 따른 속도 차이