# 10. Spring Boot(Java) 웹 + Python AI 챗봇 연동

웹 화면/요청 처리는 **Spring Boot(Java)** 가, AI 답변은 **Python(Flask)** 이 담당한다.
두 프로세스가 HTTP 로 통신하는 **폴리글랏(다언어) 마이크로서비스** 구조다. (RAG 아님, 간단 챗봇)

```
[브라우저] --/api/chat--> [Spring Boot :8080] --/chat--> [Python AI :5000] --> OpenAI
```

## 구성
```
10_springboot_chatbot/
├─ pom.xml                                  의존성(spring-boot-starter-web)
├─ src/main/java/com/example/chatbot/
│  ├─ ChatbotApplication.java               앱 진입점
│  └─ ChatController.java                    /api/chat → Python AI 로 전달
├─ src/main/resources/
│  ├─ application.properties                server.port=8080
│  └─ static/{index.html, app.js}           채팅 화면 (Spring 이 자동 서빙)
└─ python_ai/ai_server.py                   공통 AI 서비스 (Flask, :5000)
```

## 실행 (터미널 2개)
```bash
# ① Python AI 서비스 (먼저)
cd python_ai
pip install flask openai python-dotenv      # 최초 1회
python ai_server.py                          # http://localhost:5000

# ② Spring Boot 웹 (Java 17+, Maven 필요)
mvn spring-boot:run                          # http://localhost:8080
```
브라우저에서 http://localhost:8080 접속 → 메시지 입력.
`OPENAI_API_KEY` 는 프로젝트 루트의 `.env` 에서 읽는다.

## 비교 포인트
같은 구조를 **11(Node.js) · 12(FastAPI)** 로도 구현했다.
웹 티어가 하는 일은 셋 다 동일("요청 받아 AI 서비스로 넘기고 답을 반환")인데,
설정·타입·보일러플레이트의 양이 언어/프레임워크마다 얼마나 다른지 비교해 보라.
