네이버 영화 API의 서비스 중단으로 인해, 실시간 영화 데이터의 접근성이 제한되었다. 이로 인해 데이터 수집의 대안으로, 대한민국의 대표적인 영화관 체인인 CGV의 웹사이트에서 직접 데이터를 크롤링하는 시스템을 구축하기로 결정하였다. 이 글에서는 영화의 예매율, 평점, 개봉 정보 등을 수집하여 데이터베이스에 저장하는 전략에 대한 정립을 목표로 한다.
영화 데이터의 동적인 특성을 고려하여 두 가지 저장 전략을 검토하였다
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
클래스는 필요한 영화 데이터를 추출하고 적절하게 포맷하는 메서드를 포함한다.
크롤링 작업은 데이터의 신선도를 유지하고 시스템 부하를 관리하기 적합한 방식으로 스케줄링 방식을 고안하였다.
@Scheduled(cron = "0 0 2 * * ?") // 매일 새벽 2시에 실행
public void performCrawlingTask() {
List<MovieDAO> movies = movieCrawler.crawlMovies();
movieRepository.saveAll(movies); // 변경된 값만 저장 또는 전체 데이터 비우고 저장
}
이 프로젝트를 통해 실시간 영화 데이터 크롤링 및 관리 시스템을 성공적으로 구축하였다. 데이터베이스 저장 전략은 특히 중요하며, 데이터의 특성과 요구에 따라 적절한 전략을 선택하는 것이 중요하다. 앞으로도 이 시스템은 지속적으로 개선되어 더 효율적인 데이터 관리가 가능할 것으로 기대된다. 이 경험은 데이터 크롤링과 데이터베이스 관리 기술을 향상시키는 데 크게 기여하였다.