API Endpoint

가상환경 만드는 방법 (권장)
- 프로젝트 폴더로 이동
cd C:\Users\somansa\Desktop\VScode\manta\flask-chat-app
- 가상환경 생성
python -m venv venv
venv 폴더 생성됨
- 가상환경 활성화
--powershell--
.\venv\Scripts\activate
--linux--
source /venv/bin/activate
활성화되면 터미널에 (venv) 표시
- 필요한 패키지 설치
pip install flask flask-cors
- 앱 실행
python app.py
app.py
from flask import Flask, request, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
@app.route('/sendMessage', methods=['POST'])
def send_message():
data = request.get_json()
message = data.get('message')
if not message:
return jsonify({'error': 'No message provided'}), 400
# Here you can add logic to process the message
response_message = f"Message received: {message}"
return jsonify({'response': response_message}), 200
if __name__ == '__main__':
app.run(debug=True)


BackEnd
from flask import Flask, request, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
@app.route('/sendMessage', methods=['POST'])
def send_message():
data = request.json # JSON 데이터 받기
username = data.get("username")
message = data.get("message")
# 서버 터미널에 출력
print(f"{username} says: {message}")
# JSON 응답 보내기
return jsonify({
"response": f"{username} says: {message}"
}), 200
if __name__ == '__main__':
app.run(debug=True)
- username 추가
FrontEnd
try {
const res = await fetch("http://localhost:5000/sendMessage", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ username: "Ju-hyeok", message: text }),
});
- username 추가


1️⃣ 기본 Flask 세팅
from flask import Flask, request, jsonify
app = Flask(__name__)
2️⃣ /sendMessage POST API
- 요청 방식: POST
- Content-Type: application/json
데이터 예시:
{
"username": "Juhyeok",
"message": "Hello!"
}
Flask 코드:
@app.route('/sendMessage', methods=['POST'])
def send_message():
# JSON 데이터 가져오기
data = request.get_json()
if not data or 'username' not in data or 'message' not in data:
return jsonify({"error": "username과 message 필수"}), 400
username = data['username']
message = data['message']
# 여기서 메시지 처리 로직 가능 (DB 저장, 로그 등)
print(f"{username} says: {message}")
# 응답
return jsonify({"status": "success", "username": username, "message": message}), 200
3️⃣ Flask 실행
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
python app.py
- 서버 실행 후: http://localhost:5000/sendMessage
- Postman, curl 등으로 테스트 가능
from flask import Flask, request, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
@app.route('/sendMessage', methods=['POST'])
def send_message():
data = request.get_json()
if not data or 'username' not in data or 'message' not in data:
return jsonify({"error": "username과 message 필수"}), 400
username = data['username']
message = data['message']
print(f"{username} says: {message}") # 서버 콘솔에 출력
return jsonify({"status": "success", "username": username, "message": message}), 200
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/sendMessage', methods=['POST'])
def send_message():
data = request.json # JSON 데이터 받기
username = data.get("username")
message = data.get("message")
# 서버 터미널에 출력
print(f"{username} says: {message}")
# JSON 응답 보내기
return jsonify({
"status": "success",
"username": username,
"message": message
}), 200
if __name__ == '__main__':
app.run(debug=True)
6️⃣ API 테스트
① Postman 사용
- Postman 열기 → POST 선택
- URL 입력: http://localhost:5000/sendMessage
- Body → raw → JSON 선택
{
"username": "Ju-Hyeok",
"message": "Hello!"
}


Send 클릭 → JSON 응답 확인
② curl 사용
VS Code 터미널에서
--- git bash/Mac/Linux ---
curl -X POST http://localhost:5000/sendMessage \
-H "Content-Type: application/json" \
-d '{"username":"Juhyeok","message":"Hello!"}'
---- Powershell ----
1.
$headers = @{ "Content-Type" = "application/json" }
$body = @{ "username"="Juhyeok"; "message"="Hello1" } | ConvertTo-Json
Invoke-RestMethod -Uri http://127.0.0.1:5000/sendMessage -Method POST -Headers $headers -Body $body
2.
$headers = @{ "Content-Type" = "application/json" }
$body = @{ "username"="Juhyeok"; "message"="Hello1" } | ConvertTo-Json
# POST 요청
$response = Invoke-RestMethod -Uri http://127.0.0.1:5000/sendMessage -Method POST -Headers $headers -Body $body
# key: value 형식으로 출력
$response.PSObject.Properties | ForEach-Object {
"{0} : {1}" -f $_.Name, $_.Value
}
응답 예시:



Flask 실행한 터미널 → API 서버 역할
app.py를 실행하면 Flask가 127.0.0.1:5000에서 HTTP 서버로 동작
/sendMessage 같은 엔드포인트를 만들어 클라이언트 요청을 처리
서버 터미널에는 클라이언트가 보낸 데이터가 print로 찍힘
PowerShell → 클라이언트 역할
Invoke-RestMethod로 Flask 서버에 POST 요청을 보냄
서버에서 처리 후 보내준 JSON 응답을 PowerShell에서 받음
$response로 확인 가능
즉, 지금 구조는 백엔드(Flask) ↔ 프론트/클라이언트(PowerShell) 관계입니다.
7️⃣ React/Next.js에서 연결
프론트엔드에서 fetch 요청 시 URL http://localhost:5000/sendMessage
method: "POST", headers: {"Content-Type":"application/json"}, body: JSON.stringify({username, message})
사용자 → 챗봇 UI → /sendMessage (Flask API 서버) → 처리 → JSON 응답 → 챗봇 UI → 사용자에게 보여줌
- /sendMessage = “챗봇 서버의 대화용 URL” 역할
- 챗봇 클라이언트는 PowerShell 대신 JavaScript Fetch, Axios 등으로 요청을 보내면 되고,
- 서버는 Flask가 처리해서 JSON으로 응답하면, 챗봇 화면에서 메시지가 표시됩니다.
Openai API endpoint
1️⃣ 사전 준비
- Python 패키지 설치
pip install flask openai
OpenAI API Key 준비
환경 변수로 저장하는 것이 안전합니다.
export OPENAI_API_KEY="sk-xxx..." # Linux/Mac
setx OPENAI_API_KEY "sk-xxx..." # Windows PowerShell
2️⃣ Flask 서버 코드 예제
from flask import Flask, request, jsonify
import openai
import os
app = Flask(__name__)
# OpenAI API 키 설정
openai.api_key = os.getenv("OPENAI_API_KEY")
@app.route("/sendMessage", methods=["POST"])
def send_message():
data = request.get_json()
user_input = data.get("message", "")
# OpenAI ChatCompletion 호출
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "당신은 친절한 챗봇입니다."},
{"role": "user", "content": user_input}
],
max_tokens=150
)
answer = response.choices[0].message.content
except Exception as e:
answer = f"Error: {str(e)}"
return jsonify({"message": answer})
if __name__ == "__main__":
app.run(debug=True)
3️⃣ 흐름 요약
클라이언트 → POST /sendMessage + { "message": "사용자 메시지" }
Flask 서버 → OpenAI API 호출
OpenAI → 생성한 답변 반환
Flask → JSON으로 클라이언트에 전송
클라이언트 → 화면에 표시
'알토르' 카테고리의 다른 글
| 알토르 3주차 OpenAI API 연동 (0) | 2026.05.11 |
|---|---|
| 알토르 3주차 - Fetch / Axios (0) | 2026.05.10 |
| HTTP이란? (0) | 2026.05.09 |
| 알토르 React ERROR - troubleshooting (0) | 2026.05.08 |
| 알토르 2주차 Python/Flask/API (0) | 2026.05.07 |