SOOJLE
수즐 커뮤니티
수즐 커뮤니티
  • SOOJLE Document
  • 프로젝트 요약
  • Untitled
  • 프로젝트 개요
    • 프로젝트 소개
    • 추진 배경 및 필요성
    • 프로젝트 내용
      • 기능적 요구사항
      • 비기능적 요구사항
    • 개발환경 및 팀 구성
    • 워크플로우
      • 계획 수립 & 설계
      • 데이터 수집 및 정규화
      • 인공지능 개발
      • 서비스 모듈 개발
      • 성능 평가 및 보고
    • 프로젝트 예산 내역
  • 사전조사 & 의사결정
    • 사전조사
      • 재학생 대상 사전조사
      • 수집 URL 대상 목록
        • 세종대학교 직할
        • 세종대학교 학과
        • 공식 공지사항
        • 세종대 평생교육원
        • 외부 웹사이트
      • 학습 모델 사전조사
        • LSA - 잠재 의미 분석
        • LDA - 잠재 디리클레 할당
        • Word2Vec - 워드투벡터
        • FastText - 패스트텍스트
    • 의사결정
      • 사용자 인증 방식 의사결정
      • 데이터베이스 의사결정
        • MySQL vs MongoDB 성능 분석
      • 토픽별 의사결정
      • 부가 기능 의사 결정
  • 프로젝트 설계
    • 시스템 구조 설계
    • 핵심 기능 설계
      • 데이터 크롤러 설계
      • 게시물 토픽 정의 및 분류
      • 사용자 관심분야 측정
      • 뉴스피드 설계
        • 사용자-문서 유사도(Recommendation Score)
        • FaS (관심 분야 및 유사도 측정 - 추가)
        • 토픽 뉴스피드 목록
      • 검색 알고리즘 설계
        • 검색 알고리즘 1차 설계
        • 검색 알고리즘 1차 개선안
        • 검색 알고리즘 2차 설계
    • 요구사항 목록
      • DB 요구사항
      • 기능 요구사항
      • 품질 요구사항
      • 관리 요구사항
  • DB
    • 구조 설계
    • 테이블 명세
  • 데이터 크롤러
    • 데이터 크롤러 개요
    • 크롤링 URL 선정
    • 크롤러 구현을 위한 사전조사
    • 크롤러 개발 과정
      • 크롤러 프로그램 설계
      • 크롤러 규격화
      • 크롤러 정규화
      • 데이터 정제 과정
      • 에러 핸들러 구현
      • 배포 환경 이식을 위한 Porting
    • Issue & Exception
    • 결과 보고
  • 인공지능 개발
    • 인공지능 개발 개요
    • NLP 스터디
      • Bag of Words(BoW)
      • Document Term Matrix(DTM)
      • TF-IDF(Term Frequency-Inverse Document Frequency)
      • 문서 유사도(Document Similarity)
    • 데이터 전처리 과정
    • 개발 과정
      • 토크나이저 구현
      • LDA 모델 학습 및 구현
    • LDA 학습 모델링
      • 1차 파라미터 튜닝 결과 (NUM_TOPICS)
      • 2차 파라미터 튜닝 결과 (NUM_TOPICS)
      • 3차 파라미터 튜닝 결과 (NUM_TOPICS)
      • NUM_TOPICS 파라미터 의사결정
      • 4차 파라미터 튜닝 결과 (PASESS, ITERATION)
      • 최종 학습 모델 명세
    • Word2Vec(FastText) 학습 모델링
    • Issue & Exception
    • 성능 분석 결과
  • BackEnd
    • 서버 구축 및 배포
      • SOOJLE 서버 구조
      • 상용 서버 (UWSGI + NGINX) 구축
      • HTTPS 서버 구현
    • API 문서 개요
    • API 목록
      • Analysis
      • Auth API
      • Newsfeed API
      • Post API
      • Search API
      • Admin API
    • 세종 Auth API
    • 통계 기능 설계
    • Issue & Exception
    • 성능 분석 결과
  • FRONTEND
    • 프론트엔드 설계 개요
    • 디자인 설계 의사결정
      • 디자인 컨셉 및 기능 정의
      • 컴포넌트 디자인
      • Logo Variation
    • 화면 흐름도
    • 페이지 UI 명세
      • Main Page
      • Header
      • Footer
      • Mobile Control Bar
      • Login Page
      • Timeline Page
      • Menu Page
      • Hyperlink Icons Page
      • Search Component & Mobile Search Modal
      • Search Page
      • Post Block
      • Snackbar
  • 프로그램 배포
    • 프로그램 개요
    • 시스템 아키텍쳐
    • 주요 기능 및 명세
    • 프로그램 테스트
    • 구현 결과물 배포
  • 마무리
    • References
  • SOOJLE AI
  • SEJONG AUTH
  • IML Tokenizer
  • SOOJLE Crawler
  • SOOJLE Frontend
  • SOOJLE Backend
Powered by GitBook
On this page
  • Linux 기반 크롤러 이식 및 구현
  • 과정
  • 요구 라이브러리 설치
  • 플랫폼 분리
  • 로깅 작업

Was this helpful?

  1. 데이터 크롤러
  2. 크롤러 개발 과정

배포 환경 이식을 위한 Porting

Previous에러 핸들러 구현NextIssue & Exception

Last updated 5 years ago

Was this helpful?

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분마다 실행할 수 있도록 작성해주었다.