1. 학습 목표 설정
- Python에서 AI 모델을 학습시키고, RESTful API로 제공하는 방법 이해.
- Spring Boot에서 Python API를 호출하여 결과를 처리하는 방법 학습.
- Python과 Spring Boot 간의 데이터 통신 방식(JSON 등) 이해.
2. Python에서 AI 모델 준비
1. Python 환경 설정:
- Python 설치 및 주요 라이브러리 준비:
pip install flask tensorflow pandas numpy
2. 모델 학습 및 저장: 예를 들어, 간단한 TensorFlow 모델을 학습시키고 저장합니다:
import tensorflow as tf
import numpy as np
# 데이터 준비
X = np.array([1, 2, 3, 4], dtype=float)
Y = np.array([2, 4, 6, 8], dtype=float)
# 모델 정의
model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')
# 모델 학습
model.fit(X, Y, epochs=100)
# 모델 저장
model.save("model.h5")
3. Flask로 API 서버 작성: 저장된 모델을 불러와 Flask API로 예측 기능을 제공합니다:
from flask import Flask, request, jsonify
import tensorflow as tf
import numpy as np
# Flask 애플리케이션
app = Flask(__name__)
# 모델 로드
model = tf.keras.models.load_model("model.h5")
@app.route('/predict', methods=['POST'])
def predict():
data = request.json
input_data = np.array(data['inputs'])
predictions = model.predict(input_data).tolist()
return jsonify({'predictions': predictions})
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=5000)
4. Flask 서버 실행:
python app.py
서버가 실행되면, http://localhost:5000/predict에서 예측 API를 사용할 수 있습니다.
3. Spring Boot에서 Python API 호출
1. Spring Boot 프로젝트 생성:
Spring Initializer(https://start.spring.io/)에서 Maven 프로젝트를 생성하고 다음 의존성을 추가:
- Spring Web
- Spring Boot DevTools
- Gson (JSON 처리)
2. Spring Boot에서 Python API 호출 코드 작성: Spring Boot에서 REST API를 호출하려면 RestTemplate 또는 WebClient를 사용합니다:
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/api")
public class PythonIntegrationController {
@PostMapping("/predict")
public String getPrediction(@RequestBody Map<String, Object> inputData) {
String pythonApiUrl = "http://localhost:5000/predict";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.postForEntity(pythonApiUrl, inputData, String.class);
return response.getBody();
}
}
3. Spring Boot 실행:
- Spring Boot 애플리케이션을 실행한 후, POST 요청으로 /api/predict에 데이터를 보내면 Python 모델 결과를 반환받을 수 있습니다.
4. 테스트 방법
1. Python API 테스트:
- Postman 또는 curl을 사용해 Python API를 테스트:
curl -X POST -H "Content-Type: application/json" -d '{"inputs": [[5], [10]]}' http://localhost:5000/predict
2. Spring Boot API 테스트:
curl -X POST -H "Content-Type: application/json" -d '{"inputs": [[5], [10]]}' http://localhost:8080/api/predict
5. 심화 학습
- 에러 처리:
- Spring Boot와 Python 간의 통신 오류를 처리하고 로그를 기록.
- Docker 통합:
- Python Flask 서버와 Spring Boot 서버를 각각 Docker 컨테이너로 실행하여 관리.
- 성능 최적화:
- Python API 호출 시 비동기 방식(WebClient)을 사용하여 성능 개선.
- 실시간 데이터 처리:
- Kafka 등 메시지 큐를 사용해 대규모 데이터를 처리하는 환경 구성.
6. 학습 순서
- Python에서 AI 모델을 학습하고 저장하는 방법 이해.
- Flask를 활용해 모델을 REST API로 배포.
- Spring Boot에서 Python API를 호출해 결과를 통합.
- 심화 주제로 Docker, 비동기 처리, 클라우드 배포 등을 학습.
위 과정을 단계적으로 진행하며 실습하면 Python 모델과 Spring Boot를 통합하는 기술을 효과적으로 익힐 수 있습니다!