- Java 와 Python 연동 목차
반응형
폐쇄망 환경에서 자바와 파이썬을 하나의 서버에서 서로 연동하여
파이썬에서는 시계열분석을, 자바에서는 파이썬에서 예측한 결과값을 받아 화면에 전달하는 코드입니다.
자바와 파이썬이 설치된 곳은 같은 서버이고 통신을 하기위해서는 포트번호도 같아야 합니다.
1.Java (Client)
package com.example.demo.controller;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/qot/stst")
public class MLController {
private final Logger logger = LogManager.getLogger(QotProdRankController.class);
@PostMapping("/analysis")
public List<String> getAnalysisRslt() {
List<String> resultList = new ArrayList<>();
try{
URL url = new URL("http://10.000..000:20101/ml");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
int responseCode = conn.getResponseCode();
logger.debug("Response Code:"+ responseCode);
if(responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while((line = in.readLine()) != null) {
resultList.add(line);
}
logger.debug("Response:" + resultList.toString());
in.close();
}
}catch(Exception e) {
e.printStackTrace();
}
return resultList;
}
}
2. Python(Server)
from flask import Flask
from datetime import datetime, timedelta
import pickle
import numpy as np
app=Flask(__name__)
with open('/hli_app/sw/was/sarima_model.pkl','rb') as f:
sarima_model = pickle.load(f)
@app.route('/ml')
def analysis():
try:
periods = request.json.get('periods',3)
if not isinstance(periods, int) or periods <=0:
return jsonify({"error": "'periods' mustb e a positive integer."}),400
today = datetime.today()
predicted_data = sarima_mode.forecast(steps=periods)
dates = [(today+timedelta(days=30*i)).strftime('%Y-%m') for i in range(1,periods+1)]
predicted_result = [{"month":month,"forecast":value} for month,value in zip(dates,predicted_data)
return jsonify({"forecast": forecast.tolist()})
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
app.run('0.0.0.0',port=20101)
위 코드는 클라이언트 역할을 하는 Java 코드와 서버의 역할을 하는 Python의 코드입니다.
반응형
'IT' 카테고리의 다른 글
IP 주소 확인 (0) | 2024.12.16 |
---|---|
오라클 힌트 (1) | 2024.12.13 |
AI 에이전트란? (3) | 2024.12.10 |
폐쇄망에서 Python 설치 (0) | 2024.12.10 |
금융회사 실무 - 대용량 처리 오라클 힌트 (0) | 2023.05.05 |