- 크롤링한 데이터를 다양한 방법으로 처리하고 기계학습을 통해 뉴스 키워드를 예측하는 API 서비스 개발
- 뉴스 내용을 Node.js로 Crawling 해서 RabbitMQ에 집어넣고 Queue의 데이터를 Spring Boot로 Consume해서 JPA를 이용하여 PostgreSQL에 저장한다.
- DB에 있는 Data를 csv(tsv) 파일로 export 하고 뽑아낸 파일을 Python으로 Machine Learning 진행한다.
- 학습된 model을 저장하고 API로 서비스 후 Postman을 통해 테스트한다.
- BackEnd - Spring Boot (v2.3.9 / Spring Initializer), Node.js(v14.16.0), Python(v3.9.2)
- Messege Queue - RabbitMQ(v3.8.12)
- DataBase - PostgreSQL(v13.2)
- Server - Docker(v20.10.5 / for PostgreSQL, RabbitMQ)
- IDE - IntelliJ(Community / 11.0.9.1 / 2020.3.2), Visual Studio Code(v1.54.3)
- Testing - Postman
- Etc - JSON, JPA, Scikit-learn, pickle, sanic, pandas, lombok, re, ...
- Detailed : Can be found in each source code. Comments are written in each source code.
-
Crawling + Producer(MQ) : 뉴스 페이지를 크롤링하고 데이터를 Message Queue로 전송
-
Node.js 설치 여부 확인(Command) Node.js 설치 페이지
> node -V -
Visual Studio Code로 프로젝트를 생성하고 Crawling, Producer 생성 (VSCode 내 Terminal에서 node.js는 모듈, 패키지 설치를 npm을 이용한다.)
> npm initpackage.json 생성하기 위한 command / 프로젝트 이름, 버전, description, entry point(파일의 시작), test command, git repositry 등 작성
> npm install requestrequest : http 요청 모듈
> npm install cheeriocheerio : 문자열 파싱 모듈 (body 부분만 읽어오기 위해 사용)
-
설치 후에 package-lock.json (내부 의존성에 대한 버전) 파일, node_modules (설치한 모듈의 의존성을 확인하고 필요한 것들 자동으로 설치) 폴더 자동 생성됨.
-
app.js 작성 (app.js로 만든 이우 => package.json 내 "main" 부분 / Entry Point로 지정한 파일)
-
Docker 설치 여부 확인(Command) Docker 설치 페이지
Window에서 설치할 시 Enable Hyper-V Windows Features 체크 필요> docker --version -
RabbitMQ 를 Docker로 띄우기(Command) 참고
> docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management -
RabbitMQ 모니터링 페이지(localhost:15672) 접속, (기본 guest / guest)
-
Message Queue 생성
-
VSCode Terminal에서 app.js 실행 (Node.js에서 크롤링 + Rabbit MQ로 메시지 전송)
> node app -
Data Crawling 결과 (Day : 1..20, Page : 1..4, ML에 사용하는 데이터는 아래에서 에러 데이터 삭제)
- digital : 7631
- society : 8516
- economic : 8495
- foreign : 8391
- culture : 8537
- politics : 8345
-
-
Consumer(MQ) + DB Save : Spring Boot를 이용해서 Queue의 데이터를 읽고, PostgreSQL에 데이터 저장
-
Spring Initializer로 Spring Boot 프로젝트 생성
-
프로젝트 내 파일 설명
- .idea : IntelliJ 설정 파일
- .mvn : 메이븐 관련 파일
- src/main : 실행될 코드
- main/resources : 서버에서 프론트엔드 개발을 한다고 할 때 정적파일 위치 + 그 외에 프로젝트에 대한 설정 파일 위치
- application.properties : 서버 DB 등 설정 파일
- src/test : 실행될 코드를 테스트하는 코드
- .gitignore : 프로젝트를 깃으로 관리할 때 제외할 폴더 및 파일
- pom.xml : Maven을 이용하여 dependency 설정, 관리
- DemoApplication.java : 프로젝트 실행 위치
-
application.properties : local에 Oracle port와 겹쳐서 Spring Boot 내장 Tomcat Server port를 8090으로 변경
-
application.yaml 파일 생성 : 서버, DB 등 설정
-
dependency 추가 후 의존성 적용이 안될 경우(clean -> install)
-
RabbitConsumer Class 생성
- RabbitMQ의 메시지를 읽어오기 위한 RabbitListener 생성, 읽어온 데이터를 자바 객체로 읽어오기 위해
- jackson : JSON to Object / Object to JSON 에 사용
-
NewsDto Class 생성
- 읽어온 데이터를 저장할 자바 객체 생성
-
PostgreSQL Docker로 띄우기 (Command) 참고
> docker run --name pgsql -d -p 5432:5432 POSTGRES_PASSWORD=postgrespassword postgres -
PostgreSQL 모니터링 APP, pgAdmin 설치 및 사용 (password는 위에서 설정한 password)
-
PostgreSQL, JPA Dependency 추가
-
application.yaml 파일 설정
-
JpaRepository Interface 생성 참고
-
Spring Boot 실행
-
-
ML + API Service : PostgreSQL의 데이터를 csv 파일로 export하고 해당 데이터로 머신러닝 진행 후 model을 API로 서비스한다.
-
PostgreSQL의 데이터를 csv(tsv)로 저장 (pgAdmin에서)
-
저장된 tsv 파일의 첫 번째 줄에 column 추가
-
Anaconda 설치 (Python 개발 환경 세팅)
-
Anaconda Prompt 실행, 필요한 라이브러리 설치
(base)\> conda create -n 프로필명 python=버전(base)\> conda activate 프로필명(프로필명)\> pip install -U scikit-learn pandas numpy sanic- scikit-learn : 머신러닝을 하기 위한 라이브러리
- pandas : 데이터 컨트롤 / csv 파일을 연다.
- sanic : API 형태로 제공하기 위해 사용 (API 연결)
-
ML.py (Python code) 작성 후 실행
(프로필명)\> python ML.py -
api.py 작성 후 실행
(프로필명)\> python api.py -
기사 Contents 가져오기 (개발자 모드 / Postman에서 json 형식으로 보내기 위해서 replace 필요)
> \`이곳에 기사 복사, 붙여넣기\`.replace(/\“/g,"’").replace(/\n/g,""); -
Postman을 이용하여 API 호출 및 테스트 실행
-
- The Project was started by Foorogrammer.
- I started the project after seeing Foorogrammer's lecture.




















