본문으로 건너뛰기

설정

Configuration은 Crawlee의 설정 매개변수를 관리하는 클래스입니다. 기본적으로는 별도의 설정이 필요하지 않지만, 저장소 디렉터리 변경이나 상세 오류 로깅 활성화 등 특정 사용 사례에 따라 설정을 변경할 수 있습니다.

설정 매개변수를 변경하는 방법에는 세 가지가 있습니다:

  • 프로젝트에 crawlee.json 파일 추가
  • 환경 변수 설정
  • Configuration 클래스 사용

위의 방법들을 조합해서 사용할 수도 있지만, 다음과 같은 우선순위가 적용된다는 점을 유의해야 합니다: crawlee.json < 생성자 옵션 < 환경 변수

crawlee.json은 기본 설정입니다. Configuration 생성자에 제공된 옵션은 JSON에 지정된 옵션을 덮어씁니다. 환경 변수는 두 가지 모두를 덮어씁니다.

crawlee.json

Crawlee를 구성하는 첫 번째 방법은 crawlee.json 파일을 사용하는 것입니다. ConfigurationOptions를 파일에 지정하고 프로젝트 루트에 위치시키기만 하면, Crawlee가 제공된 옵션을 전역 설정으로 사용합니다.

crawlee.json
{
"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']);

이 예제를 실행하면(프로젝트 루트에 persistStateIntervalMillislogLevel이 지정된 crawlee.json 파일이 있다고 가정), 기본 Key-Value 저장소에서 SDK_CRAWLER_STATISTICS 파일을 찾을 수 있습니다. 이 파일은 완료된 요청이 1개이고 크롤러 실행 시간이 약 10초임을 보여줍니다. 이는 crawlee.json에 설정된 대로 10초 후에 상태가 저장되었음을 확인해줍니다. 또한 crawlee.json에서 logLevelDEBUG로 설정되었기 때문에 터미널에서 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를 사용하는 전역 설정을 사용합니다. 따라서 이번에도 첫 번째 상태 저장 전인 실행이 중단되었습니다.