크롤러 확장하기
크롤러를 개발하다 보면 웹사이트에 동시에 보내는 요청 수를 제어하고 싶을 때가 있습니다. Crawlee는 병렬 요청 수, 분당 요청 수, 그리고 시스템 리소스에 따른 확장 방식을 세밀하게 조정할 수 있는 다양한 옵션을 제공합니다.
이러한 옵션들은 Crawlee가 제공하는 모든 크롤러에서 사용 가능합니다. 이 가이드에서는 CheerioCrawler
를 예시로 사용하겠습니다. 사용 가능한 모든 옵션은 여기
에서 확인할 수 있습니다.
maxRequestsPerMinute
이 옵션은 분당 최대 요청 수를 제어합니다. 기본값은 Infinity
로 설정되어 있어 maxConcurrency
제한까지 계속 요청을 보낼 수 있습니다. 크롤러가 최대 처리량으로 작동하면서도 대상 웹사이트에 지속적인 부하를 주지 않도록 하고 싶을 때 이 값을 설정합니다.
import { CheerioCrawler } from 'crawlee';
const crawler = new CheerioCrawler({
// 크롤러가 동시에 최대 100개의 요청을 처리할 수 있음
maxConcurrency: 100,
// ...하지만 크롤러가 분당 250개의 요청을 초과하지 않도록 함
maxRequestsPerMinute: 250,
});
minConcurrency
와 maxConcurrency
이 옵션들은 동시에 실행할 수 있는 병렬 요청의 수를 제어합니다. 기본적으로 크롤러는 한 번에 하나의 병렬 요청으로 시작하여 시간이 지남에 따라 최대 200개까지 확장됩니다.
minConcurrency
를 너무 높게 설정하지 마세요!시스템 리소스에 비해 이 값을 너무 높게 설정하면 크롤러가 매우 느리게 작동하거나 충돌할 수 있습니다.
기본값을 유지하고 시스템 리소스에 따라 자동으로 확장/축소되도록 두는 것이 좋습니다.
import { CheerioCrawler } from 'crawlee';
const crawler = new CheerioCrawler({
// 크롤러를 즉시 시작하고 항상 5개의 동시 요청이 실행되도록 함
minConcurrency: 5,
// 항상 15개의 동시 요청이 실행되지 않도록 함
maxConcurrency: 15,
});
고급 설정
위의 옵션들로 대부분의 사용자들에게 충분하지만, 자동 확장 풀(Crawlee의 크롤러 확장/축소를 돕는 내부 유틸리티)을 더 세밀하게 구성하고 싶다면 크롤러 옵션의 autoscaledPoolOptions
를 통해 가능합니다.
이 섹션은 매우 고급 설정을 다룹니다. 충분한 테스트와 이해 없이는 기본값을 유지하는 것이 좋습니다. 대부분의 경우 기본 설정으로도 충분히 잘 작동합니다.
모험을 감행하고 싶다면, 다음과 같이 크롤러에 이러한 옵션들을 전달할 수 있습니다:
import { CheerioCrawler } from 'crawlee';
const crawler = new CheerioCrawler({
// 고급 옵션을 autoscaledPoolOptions에 전달
autoscaledPoolOptions: {
// ...
},
});
desiredConcurrency
크롤러 시작 시 실행하고자 하는 병렬 요청의 수를 지정합니다. 기본값은 minConcurrency
와 동일합니다.
desiredConcurrencyRatio
추가 확장이 허용되기 전에 도달해야 하는 최소 동시성 비율입니다(0과 1 사이의 값). 기본값은 0.95
입니다.
이는 자동 확장 풀이 확장(또는 축소)을 시도하고, 변화를 모니터링하며, 필요한 경우 수정할 수 있는 시점으로 이해할 수 있습니다.
scaleUpStepRatio
와 scaleDownStepRatio
자동 확장 풀이 확장되거나 축소될 때 추가 또는 감소되는 원하는 동시성의 비율을 정의합니다. 두 값 모두 기본값은 0.05
입니다.
자동 확장 풀이 확장 또는 축소를 시도할 때마다 이 값이 현재 동시성에 더해지거나 빼지며, desiredConcurrencyRatio
와 maxConcurrency
를 기반으로 동시에 실행할 수 있는 요청 수를 결정합니다.
maybeRunIntervalSecs
자동 확장 풀이 새로운 요청을 시작할 수 있는지 확인하는 주기를 초 단위로 나타냅니다. 기본값은 0.5
초입니다.
이 설정은 이전 요청이 완료된 직후 실행되는 요청에는 영향을 미치지 않습니다. 하지만 자동 확장 풀이 확장된 후 새로운 요청이 시작되는 속도에 영향을 줍니다.
loggingIntervalSecs
자동 확장 풀이 현재 상태(현재 동시성 비율, 목표 비율, 시스템 과부하 여부 등)를 로깅하는 주기를 제어합니다.
이 값을 null
로 설정하면 로깅을 완전히 비활성화할 수 있습니다. 기본값은 60
초입니다.
autoscaleIntervalSecs
자동 확장 풀이 확장 또는 축소 가능 여부를 확인하는 주기를 초 단위로 제어합니다. 기본값은 10
초입니다.
이 값은 5
초에서 20
초 사이로 설정하는 것이 권장됩니다.
너무 낮은 값으로 설정하면 크롤링 성능에 심각한 영향을 미칠 수 있습니다. 반대로 너무 높은 값으로 설정하면 더 많은 요청을 처리할 수 있는 성능이 낭비될 수 있습니다.
다만, scaleUpStepRatio
와 scaleDownStepRatio
와 함께 설정하면, 크롤러가 더 긴 간격으로 확장되지만 확장 시 한 번에 더 많은 요청을 처리하도록 구성할 수 있습니다.
maxTasksPerMinute
분당 처리할 수 있는 총 요청 수를 제어합니다. maxConcurrency
제한에서 요청이 한꺼번에 몰리고 그 후 긴 대기 시간이 발생하는 것을 방지하기 위해 매 초마다 요청 수를 계산합니다. 기본값은 Infinity
로, 크롤러가 maxConcurrency
까지 계속 요청을 처리할 수 있음을 의미합니다. 크롤러가 최대 처리량으로 작동하면서도 크롤링 대상 웹사이트에 지속적인 부하를 주지 않도록 하고 싶을 때 이 값을 설정합니다.
이 옵션은 크롤러 옵션에서 maxRequestsPerMinute
를 지정하여 설정할 수도 있습니다. 가시성과 접근성을 위한 단축 옵션입니다.