데이터베이스와 크롤러 스케쥴링 전략

023·2024년 7월 11일
0
post-thumbnail

서론

네이버 영화 API의 서비스 중단으로 인해, 실시간 영화 데이터의 접근성이 제한되었다. 이로 인해 데이터 수집의 대안으로, 대한민국의 대표적인 영화관 체인인 CGV의 웹사이트에서 직접 데이터를 크롤링하는 시스템을 구축하기로 결정하였다. 이 글에서는 영화의 예매율, 평점, 개봉 정보 등을 수집하여 데이터베이스에 저장하는 전략에 대한 정립을 목표로 한다.

1. 데이터베이스 저장 전략

영화 데이터의 동적인 특성을 고려하여 두 가지 저장 전략을 검토하였다

변경된 값만 저장(Incremental Update)

  • 개념: 크롤링한 데이터와 데이터베이스 내의 기존 데이터를 비교, 변경된 부분만 업데이트하는 방식.
  • 적용 이유: 이 방법은 데이터의 크기가 크고 변동이 빈번하지 않은 특정 필드(예: 평점, 예매율)에 효과적이다.
  • 장점: 불필요한 데이터 쓰기 작업 감소로 인한 성능 최적화 및 리소스 절약.
  • 단점: 복잡한 로직 설계 필요, 변경 추적 메커니즘이 복잡하다.

전체 데이터 비우고 저장(Complete Refresh)

  • 개념: 주기적으로 데이터베이스의 내용을 완전히 비우고 새로운 데이터로 대체하는 방식.
  • 적용 이유: 데이터 구조가 자주 변경되거나, 전체 데이터셋의 신뢰성을 확보하고 싶을 때 유용하다.
  • 장점: 데이터 일관성 유지 용이, 구현의 단순성.
  • 단점: 전체 데이터를 처리함으로써 발생하는 고비용, 시간 소모가 크다.

2. 크롤링 및 데이터 처리 로직 구현

public class MovieCrawler {
    private static final String URL = "http://www.cgv.co.kr/movies";
    
    public List<MovieDAO> crawlMovies() throws IOException {
        Document document = Jsoup.connect(URL).get();
        Elements movies = document.select("div.sect-movie-chart ol li");
        List<MovieDAO> movieList = new ArrayList<>();

        for (Element movie : movies) {
            MovieDAO movieDAO = new MovieDAO();
            movieDAO.extractDataFromElement(movie);
            movieList.add(movieDAO);
        }
        return movieList;
    }
}

이 코드는 CGV에서 영화 리스트를 크롤링하고 각 영화 정보를 파싱하여 MovieDAO 객체에 저장하는 로직을 보여준다. MovieDAO 클래스는 필요한 영화 데이터를 추출하고 적절하게 포맷하는 메서드를 포함한다.

3. 스케줄링 전략

크롤링 작업은 데이터의 신선도를 유지하고 시스템 부하를 관리하기 적합한 방식으로 스케줄링 방식을 고안하였다.

스케줄링 시간 결정

  • 개념: 크롤링을 서비스 이용자가 적은 시간대 즉 변화가 적은 시간대에 작업을 수행하는 방식.
  • 적용 이유: 유저 접속 적음은 데이터의 변화가 적다는 것을 의미하고 이는 곧 데이터의 신뢰성에 직결된다.
  • 장점: 데이터 신선도 유지, 서비스 부하 최소화, 장애 대응.

스케줄링 구현 방식

  • Quartz을 사용하여 크롤링 작업을 정기적으로 특정 시간에 크롤링 작업이 자동으로 실행되도록 설정한다.
@Scheduled(cron = "0 0 2 * * ?")  // 매일 새벽 2시에 실행
public void performCrawlingTask() {
    List<MovieDAO> movies = movieCrawler.crawlMovies();
    movieRepository.saveAll(movies);  // 변경된 값만 저장 또는 전체 데이터 비우고 저장
}

결론

이 프로젝트를 통해 실시간 영화 데이터 크롤링 및 관리 시스템을 성공적으로 구축하였다. 데이터베이스 저장 전략은 특히 중요하며, 데이터의 특성과 요구에 따라 적절한 전략을 선택하는 것이 중요하다. 앞으로도 이 시스템은 지속적으로 개선되어 더 효율적인 데이터 관리가 가능할 것으로 기대된다. 이 경험은 데이터 크롤링과 데이터베이스 관리 기술을 향상시키는 데 크게 기여하였다.

profile
Get your hands dirty

0개의 댓글