머신러닝을 위한 Flask - Node.JS 연동

2021. 3. 11. 18:10개인 프로젝트/기본 프로젝트 환경 세팅

나는 보통 개발 프로젝트를 진행할 때 서버로 NodeJS를 사용하는데, 머신러닝 관련 라이브러리는 파이썬이 훨씬 잘되어있는 것 같다. 

그래서 백단 서버는 NodeJS로 운영하되, client에서 머신러닝 모델을 돌려야 하는 요청이 오면 별도 파이썬 서버로 넘긴 후 결과를 NodeJS로 받아내는 방법이 없을까 고민했다.

 

stackoverflow.com/questions/59738972/can-i-use-node-js-for-the-back-end-and-python-for-the-ai-calculations

 

Can I use Node.js for the back end and Python for the AI calculations?

I am trying to create a website in Node.js. Though, as I am taking a course on how to use Artificial Intelligence and would like to implement such into my program. Therefore, I was wondering if it ...

stackoverflow.com

구글링을 해보니 nodeJS에서 파이썬을 이용하는 방법은 두 가지가 있다고 한다.

하나는 아예 파이썬 스크립트를 같은 소스코드에 넣어놓고 Node에서 경로를 찾아 돌리는 것.

 

하지만 이는 임시처리만 될 것 같아 두번째 방법을 사용해보기로 했다.

두번째 방법은 파이썬으로 새로운 서버를 하나 더 띄우고, API 콜하는 방식으로 파이썬 서버와 NodeJS서버가 통신하는 것이다.

 

따라서 진행해야 할 일은 다음과 같다.

 

1) 파이썬으로 서버 구축

2) 파이썬 API에서 sklearn으로 result 만들기

3) Node서버와 연결

 

웹서버를 구축하는 프레임워크는 장고를 포함해 여러가지가 있으나, 나는 간단한 테스트용 API만 만들꺼라서 Flask를 사용하기로 했다.

 

Flask를 이용한 서버구축은 간단하다.

vscode의 python extension을 설치하고, pip install scikit-learn, pip install flask를 수행한다

 

app.py파일 하나만 존재하고, python cli를 이용해 스크립트를 실행해주면 된다.

 

flask에서는 서버 객체인 app을 만들어줄 Flask와, response를 json형태로 보내줄 jsonify, 외부 API 콜의 request를 읽기 위한 request 객체를 이용한다.

또한 restAPI 구성은 flast_restx를 이용했다.

더불어 테스트를 위한 sklearn의 테스트 데이터들도 받았다.

 

 

flask의 app.py를 실행하면, 내가 테스트해보려는 경로는 별도 지정해주지 않았을때 localhost와 5000포트가 된다.

NodeJS를 활용해 개발한 API와 다를바 없이 서버화면이 랜더링된다.

 

/test 경로는 API를 작성하기 위해 만들었는데 화면에 접속하면 get 메소드의 result가 랜더링된다.

세부 로직은 sklearn의 load_iris 데이터를 불러왔다

머신러닝의 많은 결과가 dataFrame이나 ndarray 객체이므로, response는 적절하게 파싱해주어야 한다.

 

이 API를 nodeJS 서버에서 콜해보았다.

리액트 뿐 아니라 nodeJS에서 하는 외부 콜도 axios를 사용한다.

 

client를 통해서 call해보면 flask API에서 return한 결과가 서버에 잘 찍힌다.

상세한 학습 및 예측 로직을 구성하여 결과를 리턴해주면, NodeJS에서 잘 가공한 후 Client에게 제공할 수 있다.