배포 환경 이식을 위한 Porting

Linux 기반 크롤러 이식 및 구현

본 크롤러를 관리자가 매번 실행하기에는 한계가 있다. 그러므로 컴퓨터에게 주기적으로 실행 및 관리를 맡기고, 에러 발생 시, 로그파일을 기록하는 부분까지 구현을 완료

한다. 본 프로젝트의 서버의 운영체제는 Linux(Uvuntu 18.04)로 진행하며, 이에 해당하는 작업을 설계 및 구현한다. 사용 GUI Tool 로서는 X-Shell 및 Termius 그리고 MongoDB Compass를 사용한다.

과정

요구 라이브러리 설치

해당 크롤러가 Linux에서도 실행되기 위해서 해당 크롤러가 동작할 요구 라이 브러리를 설치해야할 필요성이 존재한다. 이를 위해서 requirements.txt를 생성 한다. 해당 requirements.txt 안에는 크롤러가 동작하기 위한 라이브러리 종류 와 해당 라이브러리의 버전이 기록되어 있다.

플랫폼 분리

크롤러가 서버에서 운영도중에 에러가 발생 시, 서버에서 디버깅하는 것은 잘못된 코드 하나가 치명적인 결과를 야기할 수 있는 좋지 않은 행동이다. 그러므로 서버에서는 에러 확인 및 실행에만 리소스를 사용할 수 있도록, 본 크롤러를 현재 개발환경인 Windows와 서버의 운영체제인 Linux에 동일하게 실행할 수 있도록 코드를 수정한다.

아래 사진을 예시로 두어서, MongoDB를 연결하는 과정에서 platform 라이브러리를 사용하여, Windows와 Linux 환경에서의 실행 차이를 두었다.

로깅 작업

본 프로그램의 로깅 작업에는 크게 3가지로 나뉘어진다.

  1. 크롤러 실행 도중 에러 발생 [ crawler_log.log ]

  2. 크롤러 시작시각, 끝시각 및 실행시각 기록 [ crawler_time.log ]

  3. 현재 크롤러의 크롤링게시판 위치 [ crawler_ing.log ]

본 크롤러의 로깅작업을 통해서 만약 오류가 발생할 시에 디버깅을 좀 더 원활하게 하고, 실행되는 시각과 크롤링된 데이터를 파악하여서 크롤링을 실행할 시각 및 크롤링 데이터 개수를 통해서 유의미한 정보를 도출한다. 또한 현 재 크롤러의 크롤링게시판의 위치를 파악하여, 현재 크롤러가 어느 부분을 크롤 링하고 있는지 관리자가 쉽게 파악할 수 있게 한다.

Crawler_log.log

크롤러 실행 도중 에러가 발생한다면, 후에 디버깅 및 리팩토링 작업을 위해서 해당 파일에 기록을 해준다. 기록 문구는 해당 시각, 해당 게시판, 해당 URL, 해당 오류명을 표기한다. 해당 게시판에서 오류가 난다면 DB에 저장된 URL 테 이블에서 크롤링 최대 5회동안 크롤링을 일시중지하는 작업을 실행한다.

Crawler_time.log

롤러 실행시각을 명확하게 파악하기 위해서 해당 로깅작업을 진행한다. 기록되는 문구는 크롤러가 시작하는 시각, 현재 데이터베이스에 저장된 게시글의 총 수, 크롤러가 끝난 시각, 크롤러가 실행되는 시간, 크롤링 이 후에 데이터베 이스에 저장된 게시글의 총 수, 크롤링한 데이터 수를 출력해준다.

Crawler_ing.ing

현재 크롤링하고 있는 정확한 게시판 위치와 게시판 페이지를 로깅작업을 함으로써, 서버에서 크롤러를 실행시켜두고, 언제든지 현재 실행 중인 크롤러의 현재 작업 위치를 파악할 수 있다.

크롤러 주기적 자동 실행

관리자가 크롤러를 매번 실행 및 관리하지 않게 하기 위해서 Linux의 cron 기능을 이용한다. 이 기능은 유닉스 계열 컴퓨터 운영 체제의 시간 기반 잡 스케줄러이다. 이 과정에서는 cron을 이용하여서, 해당 작업을 고정된 시간, 날짜, 간격에 주기적으로 실행할 수 있도록 한다. 본 작업에서는 해당 크롤러를 3일에 한 번씩, 00시 00분마다 실행할 수 있도록 작성해주었다.

Last updated