본문으로 건너뛰기

크롤러 확장하기

크롤러를 개발하다 보면 웹사이트에 동시에 보내는 요청 수를 제어하고 싶을 때가 있습니다. Crawlee는 병렬 요청 수, 분당 요청 수, 그리고 시스템 리소스에 따른 확장 방식을 세밀하게 조정할 수 있는 다양한 옵션을 제공합니다.

이러한 옵션들은 Crawlee가 제공하는 모든 크롤러에서 사용 가능합니다. 이 가이드에서는 CheerioCrawler를 예시로 사용하겠습니다. 사용 가능한 모든 옵션은 여기에서 확인할 수 있습니다.

maxRequestsPerMinute

이 옵션은 분당 최대 요청 수를 제어합니다. 기본값은 Infinity로 설정되어 있어 maxConcurrency 제한까지 계속 요청을 보낼 수 있습니다. 크롤러가 최대 처리량으로 작동하면서도 대상 웹사이트에 지속적인 부하를 주지 않도록 하고 싶을 때 이 값을 설정합니다.

import { CheerioCrawler } from 'crawlee';

const crawler = new CheerioCrawler({
// 크롤러가 동시에 최대 100개의 요청을 처리할 수 있음
maxConcurrency: 100,
// ...하지만 크롤러가 분당 250개의 요청을 초과하지 않도록 함
maxRequestsPerMinute: 250,
});

minConcurrencymaxConcurrency

이 옵션들은 동시에 실행할 수 있는 병렬 요청의 수를 제어합니다. 기본적으로 크롤러는 한 번에 하나의 병렬 요청으로 시작하여 시간이 지남에 따라 최대 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입니다.

이는 자동 확장 풀이 확장(또는 축소)을 시도하고, 변화를 모니터링하며, 필요한 경우 수정할 수 있는 시점으로 이해할 수 있습니다.

scaleUpStepRatioscaleDownStepRatio

자동 확장 풀이 확장되거나 축소될 때 추가 또는 감소되는 원하는 동시성의 비율을 정의합니다. 두 값 모두 기본값은 0.05입니다.

자동 확장 풀이 확장 또는 축소를 시도할 때마다 이 값이 현재 동시성에 더해지거나 빼지며, desiredConcurrencyRatiomaxConcurrency를 기반으로 동시에 실행할 수 있는 요청 수를 결정합니다.

maybeRunIntervalSecs

자동 확장 풀이 새로운 요청을 시작할 수 있는지 확인하는 주기를 초 단위로 나타냅니다. 기본값은 0.5초입니다.

정보

이 설정은 이전 요청이 완료된 직후 실행되는 요청에는 영향을 미치지 않습니다. 하지만 자동 확장 풀이 확장된 후 새로운 요청이 시작되는 속도에 영향을 줍니다.

loggingIntervalSecs

자동 확장 풀이 현재 상태(현재 동시성 비율, 목표 비율, 시스템 과부하 여부 등)를 로깅하는 주기를 제어합니다.

이 값을 null로 설정하면 로깅을 완전히 비활성화할 수 있습니다. 기본값은 60초입니다.

autoscaleIntervalSecs

자동 확장 풀이 확장 또는 축소 가능 여부를 확인하는 주기를 초 단위로 제어합니다. 기본값은 10초입니다.

이 값은 5초에서 20초 사이로 설정하는 것이 권장됩니다.

이 옵션 값 설정 시 주의하세요

너무 낮은 값으로 설정하면 크롤링 성능에 심각한 영향을 미칠 수 있습니다. 반대로 너무 높은 값으로 설정하면 더 많은 요청을 처리할 수 있는 성능이 낭비될 수 있습니다.

다만, scaleUpStepRatioscaleDownStepRatio와 함께 설정하면, 크롤러가 더 긴 간격으로 확장되지만 확장 시 한 번에 더 많은 요청을 처리하도록 구성할 수 있습니다.

maxTasksPerMinute

분당 처리할 수 있는 총 요청 수를 제어합니다. maxConcurrency 제한에서 요청이 한꺼번에 몰리고 그 후 긴 대기 시간이 발생하는 것을 방지하기 위해 매 초마다 요청 수를 계산합니다. 기본값은 Infinity로, 크롤러가 maxConcurrency까지 계속 요청을 처리할 수 있음을 의미합니다. 크롤러가 최대 처리량으로 작동하면서도 크롤링 대상 웹사이트에 지속적인 부하를 주지 않도록 하고 싶을 때 이 값을 설정합니다.

정보

이 옵션은 크롤러 옵션에서 maxRequestsPerMinute를 지정하여 설정할 수도 있습니다. 가시성과 접근성을 위한 단축 옵션입니다.