2021년 한창 돈이 복사될 때 만들었던 프로젝트를 기록하려고 한다.

 

큰 틀은 아래와 같다.

  1. 뉴스 크롤링 코드 작성(구글 뉴스)
  2. 감정 분석 코드 작성(제목에대한 긍정, 부정, 중립 의견 예측)
  3. 크롤링, 분석 결과저장(mongodb, GCP storage)
  4. 서버 구축
  5. 그래프 출력 웹 서버 작성

 

 

실행 환경 및 사용 언어 및 프레임워크와 구조는 아래와 같다.

    1. 뉴스 크롤링 및 감정 분석:
      • 언어는 python을 사용했고, 웹 서버 프레임워크는 Flask, 크롤링은 bs4을 사용했다.
      • 배포는 GCP cloud run에 배포하였고, cloud run에 배포하기 위해 웹 서버를 docker image로 만들어서 배포했다.
      • 크롤링한 결과를 https://github.com/ProsusAI/finBERT 의 모델을 이용하여 긍정, 부정, 중립의견을 예측한다.
      • 크롤링 결과와 분석 결과 둘 다 GCP storage에 저장하였고, mongo db에는 분석 결과만 저장하였다.
      • 주기적으로 실행을 위해 GCP scheduler을 이용하여 매일 같은 시간에 크롤링, 분석되도록 설정해 놓았다.
      • 배포를 자동화하기 위해 github 저장소 main브랜치에 push이벤트가 발생시 GCP cloud run에 배포되도록 설정했다.
    2. 웹 서버 구축,  웹 애플리케이션 배포:
      • 분석한 결과를 출력하기 위하여 웹서버를 구축하였다..
      • 처음 작성했던 서버는 node js(Nestjs)을 사용하였지만, 중간에 python(Flask)으로 변경하였다.
      • 프록시 서버, 웹 서버를 따로 두기 위하여 EC2를 2개 생성하였다.
        각각 운영체제는 ubuntu 20.04이다.
      • 프록시 서버는 reverse proxy서버로 외부에서 오는 요청을 받고, 내부의 서버로 전달하는 역할을 하고
        DB 서버를 겸해  데이터를 저장한다.
      • 프록시 서버는 nginx으로 작성하였고, ssl을 위해 letsencrypt을 사용하였다.
        ssl 적용을 위해 도메인을 구매하였다.
        DB의 경우 mysql과 mongodb 서버가 설치되었다.
      • 웹 애플리케이션은 외부와는 연결 없이 내부 VPC를 통해 프록시 서버에서 넘어온 요청을 수행하는 방식으로 작성했다.
        각각 t2.micro 인스턴스 유형이다.
        db서버의 경우 로그 작성 및 데이터 적재로 인해 t2.micro에서 주어지는 용량으로는 너무 적어
        스토리지를 추가하였다(16GB).
      • 그래프를 출력하는 웹 애플리케이션은 파이썬으로 작성하였고, service에 등록하여 실행시켰다.

 

각각의 단계를 포스팅을 할 계획이다.

 

각 링크

  1. 뉴스 크롤링 및 감정분석 글 링크
  2. 웹 서버 구축,  웹 애플리케이션 배포

 

 

GITHUB  주소

 

# 2022-09-28 수정

# 2022-09-30 수정

# 2022-10-05 수정

# 2022-10-19 수정