본문 바로가기
파이썬

파이썬 프로젝트(3) : flask로 파이썬에서 Spring으로 데이터 보내기

by 스노위13 2022. 11. 23.

1. 내용 : 파이썬을 이용하여 제목에서 유의미한 키워드를 추출하였다. 그리고 이 키워드를 flask를 사용해서 각각의 펀딩 페이지에 넘겨 주었다.

2. 특이점 :  파이썬에서 추천 시스템인 userbase와 contentbase로 유저에게 추천할 펀딩을 뽑아내고 각 펀딩의 제목을 활용해서 키워드도 추출해 냈다. 이에 관한 내용은 아래의 링크에서 확인해주시길!
https://codewos.tistory.com/60
https://codewos.tistory.com/59
이제 이렇게 해서 나온 결과물을 Spring에서 만든 프로젝트로 보내야 하는데.... 대체 어떻게? 그건 flask로 REST_API를 만들어 사용하는 것! 생각보다 간단하다. 

3. 코드 및 설명

1) 파이썬 시작 부분
flask를 설치하고 CORS 오류가 발생할 수 있으므로 flask_cors도 설치한다. 

$pip install flask
$pip install flask_cors

만약 리눅스 사용자인데 pip로 flask가 설치되지 않는다면 pip3 install flask로 설치해보도록 한다.        

app = Flask(__name__)
CORS(app)

Flask를 활용하는 app을 만들고 이를 CORS에 적용해주면 CORS 오류를 방지할 수 있다. 같은 반 친구가 알려준 내용~     

 2) JSP javascript 요청 부분

<script type="text/javascript">
let memId = $("form[name='fundinginfo']").find('#memId').val();
let list ="";
let str="";
let result =[];

$(function(){
	fn_funding_recommend();
});	

function fn_funding_recommend(){
	$.ajax({
		url : "http://192.168.0.25:5000/recommend/"
		, data:{memId : memId}
		, success: function(data) {
			list = JSON.parse(data);
    	   for(i=0; i < list.length; i += 8){
    	   		result.push(list.slice(i, i + 8));
    	   }
    	   console.log(result);
			for(let i in result[0]) {				  
				
				str+='<div class="funding">';
				str+='<a href="<%=request.getContextPath()%>/funding/fundingView.wow?fuNo='+ list[i].fu_no +'&memId=${USER_INFO.userId}"><img class="fundingimg" alt="" src="'+ list[i].fu_img +'"></a>';
				str+='<a href="<%=request.getContextPath()%>/funding/fundingView.wow?fuNo='+ list[i].fu_no +'&memId=${USER_INFO.userId}"><b>'+ list[i].title +'</b></a>';			
				str+='<div class="category">♥'+ (list[i].like)*10 +' <b>|</b> '+ list[i].category +' <b>|</b> '+ list[i].cnt +' 달성 '+'</div>';
				str+='</div>';
			};
				$("#list").append(str);
		},
		error : function() {
			console.log('error');
      }		
	}); //ajax
}
</script>


  
사용자가 View 화면을 요청하면 Spring에서 Ajax를 활용해서 요청을 보내는데 주소는 각각 /recommend/ /keywordtag/로 보냈다. 위의 코드는 추천 시스템을 요청하는 Ajax이다. 추천 시스템에서는 유저의 ID 값으로 DB를 조회하기 때문에 Id를 data로 보냈다.(키워드에서는 펀딩 고유 번호를 받아 DB를 조회하기 때문에 고유 번호를 의미하는 fuNo를 보냈는데 이에 관한 내용은 위와 거의 같으므로 생략함)

그리고 이를 통해 이전 글에서 만든 메소드를 활용하여 데이터를 만들어 내고 이를 json data로 만들어서 Spring에 보내주었고 이를 sucess 부분에서 활용하여 화면단에 넣어 주었다. 이에 대한 파이썬 전체 코드는 아래와 같다.

from flask import Flask, request, jsonify
from flask_cors import CORS
import pandas as pd

from proj_contentbase import get_cate_recomment
from proj_userbase import get_user_recomment
from pythonproj.keyword import take_tag

app = Flask(__name__)
CORS(app)

@app.route('/recommend/', methods=['GET'])
def recommend():
    # 로그인한 아이디 파라미터로 받기
    memId = request.args["memId"]
    # 메소드에 id 값 넣고 실행해서 결과 받기
    temp = get_cate_recomment(memId)
    df1 = temp.drop('score', axis=1)
    df2 = get_user_recomment(memId)
    result = pd.concat([df2, df1]).drop_duplicates()
    # print(result)
    # 받은 결과를 Spring에 JSON DATA로 보내주기
    js = result.to_json(orient='records', force_ascii=False)
    # print(js)
    return jsonify(js)

@app.route('/keywordtag/', methods=['GET'])
def keywordtag():
    # fuNo 파라미터로 받기
    fuNo = request.args["fuNo"]
    # 메소드에 fuNo 값 넣고 실행해서 결과 받기
    df1 = take_tag(fuNo)
    result = df1
    print(f'take_tag:{result}')
    return result

if __name__ == '__main__':
    app.run(debug=True, host="0.0.0.0")

위의 proj_contentbase, proj_userbase, pythonproj.keyword 는 이전 글에서 만든 메소드를 가져온 것이다.(2번에 있는 링크 참고) 궁금하시면 참고하시길~!

댓글