설정
Configuration
은 Crawlee의 설정 매개변수를 관리하는 클래스입니다. 기본적으로는 별도의 설정이 필요하지 않지만, 저장소 디렉터리 변경이나 상세 오류 로깅 활성화 등 특정 사용 사례에 따라 설정을 변경할 수 있습니다.
설정 매개변수를 변경하는 방법에는 세 가지가 있습니다:
- 프로젝트에
crawlee.json
파일 추가 - 환경 변수 설정
Configuration
클래스 사용
위의 방법들을 조합해서 사용할 수도 있지만, 다음과 같은 우선순위가 적용된다는 점을 유의해야 합니다:
crawlee.json
< 생성자 옵션 < 환경 변수
crawlee.json
은 기본 설정입니다. Configuration
생성자에 제공된 옵션은 JSON에 지정된 옵션을 덮어씁니다. 환경 변수는 두 가지 모두를 덮어씁니다.
crawlee.json
Crawlee를 구성하는 첫 번째 방법은 crawlee.json
파일을 사용하는 것입니다. ConfigurationOptions
를 파일에 지정하고 프로젝트 루트에 위치시키기만 하면, Crawlee가 제공된 옵션을 전역 설정으로 사용합니다.
{
"persistStateIntervalMillis": 10000,
"logLevel": "DEBUG"
}
crawlee.json
을 사용하면 코드에서 추가 작업이 필요하지 않습니다:
import { CheerioCrawler, sleep } from 'crawlee';
// Configuration을 임포트하거나 크롤러에 전달하지 않아도 됩니다.
// 환경 변수도 설정하지 않습니다.
const crawler = new CheerioCrawler();
crawler.router.addDefaultHandler(async ({ request }) => {
// 첫 번째 요청에서는 5초 대기하고
// 두 번째 요청을 큐에 추가합니다
if (request.url === 'https://www.example.com/1') {
await sleep(5_000);
await crawler.addRequests(['https://www.example.com/2'])
}
// 두 번째 요청에서는 10초 대기하고
// 실행을 중단합니다
if (request.url === 'https://www.example.com/2') {
await sleep(10_000);
process.exit(0);
}
});
await crawler.run(['https://www.example.com/1']);
이 예제를 실행하면(프로젝트 루트에 persistStateIntervalMillis
와 logLevel
이 지정된 crawlee.json
파일이 있다고 가정), 기본 Key-Value 저장소에서 SDK_CRAWLER_STATISTICS
파일을 찾을 수 있습니다. 이 파일은 완료된 요청이 1개이고 크롤러 실행 시간이 약 10초임을 보여줍니다. 이는 crawlee.json
에 설정된 대로 10초 후에 상태가 저장되었음을 확인해줍니다. 또한 crawlee.json
에서 logLevel
이 DEBUG
로 설정되었기 때문에 터미널에서 INFO
로그 외에도 DEBUG
로그를 볼 수 있습니다.
환경 변수
Crawlee를 구성하는 또 다른 방법은 환경 변수를 설정하는 것입니다. 다음은 사용자가 사용할 수 있는 Crawlee의 환경 변수 목록입니다.
주요 환경 변수
다음 환경 변수들은 Crawlee의 작동 방식에 큰 영향을 미치며, 이들을 설정하거나 해제하면 동작이 크게 달라질 수 있습니다.
CRAWLEE_STORAGE_DIR
KeyValueStore
, Dataset
, RequestQueue
가 데이터를 저장하는 로컬 디렉터리의 경로를 정의합니다. 기본값은 ./storage
입니다.
CRAWLEE_DEFAULT_DATASET_ID
기본 데이터셋의 ID는 default
입니다. 이 환경 변수를 설정하면 기본 데이터셋 ID가 제공된 값으로 변경됩니다.
CRAWLEE_DEFAULT_KEY_VALUE_STORE_ID
기본 키-값 저장소의 ID는 default
입니다. 이 환경 변수를 설정하면 기본 키-값 저장소 ID가 제공된 값으로 변경됩니다.
CRAWLEE_DEFAULT_REQUEST_QUEUE_ID
기본 요청 큐의 ID는 default
입니다. 이 환경 변수를 설정하면 기본 요청 큐 ID가 제공된 값으로 변경됩니다.
CRAWLEE_PURGE_ON_START
저장소 디렉터리는 기본적으로 정리됩니다. false
로 설정하면 크롤러 실행 시작 시 또는 저장소를 명시적으로 열 때(예: Dataset.open()
을 통해) 로컬 저장소 디렉터리가 자동으로 정리되지 않습니다. 예를 들어 각 실행마다 데이터셋에 더 많은 항목을 추가하고 이전에 저장/수집된 항목을 유지하려는 경우에 유용합니다.
편의성 환경 변수
다음 그룹에는 코드를 변경하지 않고도 특정 목표를 달성하는 데 도움이 되는 환경 변수가 포함됩니다. 예를 들어 일시적으로 로그 레벨을 DEBUG로 전환하거나 오류에 대한 상세 로깅을 활성화하는 등의 작업이 가능합니다.
CRAWLEE_HEADLESS
1
로 설정하면 Crawlee가 실행하는 웹 브라우저가 헤드리스 모드로 실행됩니다. 코드에서 이 설정을 재정의할 수 있습니다(예: launchPuppeteer()
함수에 headless: true
옵션을 전달). 기본적으로 브라우저는 헤드풀 모드(창이 있는 모드)로 실행됩니다.
CRAWLEE_LOG_LEVEL
최소 로그 레벨을 지정합니다. 다음 값 중 하나를 사용할 수 있습니다(심각도 순):
DEBUG
, INFO
, WARNING
, ERROR
, OFF
. 기본적으로 로그 레벨은 INFO
로 설정되어 있어
DEBUG
메시지는 콘솔에 출력되지 않습니다. 로깅 유틸리티에 대해서는 utils.log
네임스페이스를 참조하세요.
CRAWLEE_VERBOSE_LOG
true
로 설정하면 상세 로깅이 활성화됩니다. true
로 명시적으로 설정되지 않은 경우, 요청 핸들러 내부에서 발생한 오류에 대해 요청이 재시도될 것으로 알고 있는 한 오류 메시지만 포함된 경고가 기록됩니다. 이는 일부 알려진 오류(예: 시간 초과 오류)에도 적용됩니다. 기본적으로 비활성화되어 있습니다.
CRAWLEE_MEMORY_MBYTES
AutoscaledPool
이 사용할 시스템 메모리 양을 메가바이트 단위로 설정합니다.
동시에 실행되는 작업의 수를 제한하는 데 사용됩니다. 기본적으로 사용할 수 있는 최대 메모리 양은
전체 시스템 메모리의 4분의 1로 설정됩니다. 예를 들어 8192MB의 메모리가 있는 시스템에서
자동 확장 기능은 최대 2048MB의 메모리만 사용합니다.
Configuration 클래스
Crawlee 설정을 조정하는 마지막 방법은 코드에서 Configuration
클래스를 사용하는 것입니다.
전역 설정
기본적으로 Configuration
클래스의 전역 싱글톤 인스턴스가 있으며, 이는 크롤러와 구성 가능한 동작에 의존하는 일부 다른 클래스에서 사용됩니다. 대부분의 경우 옵션을 조정할 필요가 없지만, 필요한 경우 Configuration.getGlobalConfig()
함수를 통해 접근할 수 있습니다. 이제 ConfigurationOptions
를 쉽게 get
하고 set
할 수 있습니다.
import { CheerioCrawler, Configuration, sleep } from 'crawlee';
// 전역 설정을 가져옵니다
const config = Configuration.getGlobalConfig();
// 전역 설정의 'persistStateIntervalMillis' 옵션을
// 10초로 설정합니다
config.set('persistStateIntervalMillis', 10_000);
// 크롤러가 전역 설정을 사용하므로
// 설정을 크롤러에 전달할 필요가 없습니다
const crawler = new CheerioCrawler();
crawler.router.addDefaultHandler(async ({ request }) => {
// 첫 번째 요청에서는 5초 대기하고
// 두 번째 요청을 큐에 추가합니다
if (request.url === 'https://www.example.com/1') {
await sleep(5_000);
await crawler.addRequests(['https://www.example.com/2'])
}
// 두 번째 요청에서는 10초 대기하고
// 실행을 중단합니다
if (request.url === 'https://www.example.com/2') {
await sleep(10_000);
process.exit(0);
}
});
await crawler.run(['https://www.example.com/1']);
이는 crawlee.json
사용을 보여주는 데 사용했던 것과 거의 동일한 예제이지만,
이번에는 전역 설정을 사용한다는 점만 다릅니다.
이 예제를 실행하면 이전과 마찬가지로 기본 Key-Value 저장소에서 SDK_CRAWLER_STATISTICS
파일을 찾을 수 있으며,
동일한 수의 완료된 요청(1개)과 동일한 크롤러 실행 시간(~10초)을 보여줍니다.
이는 제공된 매개변수가 작동했음을 확인해줍니다: 전역 설정에서 설정한 대로 10초 후에 상태가 저장되었습니다.
Configuration
과 관련된 두 줄의 코드를 주석 처리하고 동일한 예제를 실행하면
기본 Key-Value 저장소에 SDK_CRAWLER_STATISTICS
파일이 저장되지 않습니다:
persistStateIntervalMillis
를 변경하지 않았기 때문에 Crawlee는 기본값인 60초를 사용했고,
크롤러는 첫 번째 상태 저장 전인 실행 시간 ~15초 후에 강제로 중단되었기 때문입니다.
사용자 정의 설정
또는 사용자 정의 설정을 만들 수 있습니다. 이 경우 해당 설정을 사용할 클래스(예: 크롤러)에 전달해야 합니다. 이전 예제를 수정해보겠습니다:
import { CheerioCrawler, Configuration, sleep } from 'crawlee';
// 새로운 설정을 만듭니다
const config = new Configuration({
// 'persistStateIntervalMillis' 옵션을 10초로 설정합니다
persistStateIntervalMillis: 10_000,
});
// 이제 설정을 크롤러에 전달해야 합니다
const crawler = new CheerioCrawler({}, config);
crawler.router.addDefaultHandler(async ({ request }) => {
// 첫 번째 요청에서는 5초 대기하고
// 두 번째 요청을 큐에 추가합니다
if (request.url === 'https://www.example.com/1') {
await sleep(5_000);
await crawler.addRequests(['https://www.example.com/2'])
}
// 두 번째 요청에서는 10초 대기하고
// 실행을 중단합니다
if (request.url === 'https://www.example.com/2') {
await sleep(10_000);
process.exit(0);
}
});
await crawler.run(['https://www.example.com/1']);
이 예제를 실행하면 이전과 정확히 동일하게 작동하며,
실행 후 기본 Key-Value 저장소에 동일한 SDK_CRAWLER_STATISTICS
파일이 생성되어
동일한 수의 완료된 요청과 동일한 크롤러 실행 시간을 보여줍니다.
설정을 크롤러에 전달하지 않으면 이번에는 다른 이유로
기본 Key-Value 저장소에 SDK_CRAWLER_STATISTICS
파일이 저장되지 않습니다.
크롤러에 설정을 전달하지 않았기 때문에
크롤러는 기본 persistStateIntervalMillis
를 사용하는 전역 설정을 사용합니다.
따라서 이번에도 첫 번째 상태 저장 전인 실행이 중단되었습니다.