[java] Quartz Scheduler와 크롤링 결과 저장하기

이번 글에서는 Java에서 Quartz Scheduler를 사용하여 정기적으로 크롤링을 실행하고, 그 결과를 저장하는 방법에 대해 알아보겠습니다.

Quartz Scheduler란?

Quartz Scheduler는 Java 기반의 강력한 스케줄링 라이브러리입니다. 이를 사용하여 다양한 작업을 원하는 시간에 주기적으로 실행할 수 있습니다. Quartz는 스프링 프레임워크와 통합되어 사용할 수 있어 편리하게 작업을 예약하고 실행할 수 있습니다.

크롤링 결과 저장하기

크롤링 결과를 저장하기 위해 jsoup 라이브러리를 사용할 것입니다. 먼저 Maven 프로젝트의 pom.xml에 다음 의존성을 추가해주세요.

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.14.1</version>
</dependency>

크롤링 코드를 작성하기 위해 아래와 같이 Crawler.java 파일을 생성해주세요.

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;

public class Crawler {

    public static void main(String[] args) {
        try {
            // 크롤링할 URL 설정
            String url = "https://example.com";
            
            // Jsoup을 사용하여 HTML 파싱
            Document document = Jsoup.connect(url).get();

            // 원하는 데이터 선택
            Elements elements = document.select(".result");
            
            // 결과 출력
            for (Element element : elements) {
                System.out.println(element.text());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 코드에서는 https://example.com에서 .result 클래스를 가진 요소를 크롤링하고, 결과를 출력합니다.

Quartz Scheduler로 크롤링 예약하기

Quartz Scheduler를 사용하여 크롤링 작업을 예약하기 위해 아래와 같이 CrawlingJob.java 파일을 생성합니다.

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class CrawlingJob implements Job {

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        // 크롤링 코드 작성
    }
}

CrawlingJob 클래스의 execute 메서드에서는 앞서 작성한 크롤링 코드를 실행하면 됩니다.

마지막으로, Quartz Scheduler로 크롤링 작업을 예약하기 위해 아래와 같이 SchedulerMain.java 파일을 생성합니다.

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

public class SchedulerMain {

    public static void main(String[] args) {
        try {
            // 스케줄러 팩토리 생성
            SchedulerFactory schedulerFactory = new StdSchedulerFactory();
            Scheduler scheduler = schedulerFactory.getScheduler();

            // 크롤링 작업(Job) 생성
            JobDetail jobDetail = JobBuilder.newJob(CrawlingJob.class).build();

            // 크론 표현식으로 실행 주기 설정 (예를 들어 매일 10시에 실행)
            Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(10, 0)).build();

            // 스케줄러에 작업과 트리거 등록
            scheduler.scheduleJob(jobDetail, trigger);

            // 스케줄러 시작
            scheduler.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}

위 코드에서는 CrawlingJob 클래스를 스케줄러에 등록하고, 매일 10시에 실행되도록 설정하였습니다.

결론

이렇게 Java의 Quartz Scheduler를 사용하여 크롤링 작업을 예약하고, 그 결과를 저장하는 방법에 대해 알아보았습니다. Quartz를 활용하면 자동화된 작업 스케줄링을 쉽게 구현할 수 있으며, 크롤링 결과를 저장해두면 필요한 데이터를 원하는 시간에 가져올 수 있습니다.

자세한 내용은 Quartz Scheduler 공식 홈페이지jsoup 공식 홈페이지를 참조하시기 바랍니다.