jeongsoo's picture
init
69f0bf5
"""
RAG ๊ฒ€์ƒ‰ ์ฑ—๋ด‡ ๋ฉ”์ธ ์‹คํ–‰ ํŒŒ์ผ
"""
# os ๋ชจ๋“ˆ ์ž„ํฌํŠธ
import os
import logging
# ๋กœ๊น… ์„ค์ •
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO
)
logger = logging.getLogger(__name__)
try:
# ์•ฑ ๋ชจ๋“ˆ์—์„œ Flask ์•ฑ ๊ฐ€์ ธ์˜ค๊ธฐ
from app.app import app
# ์žฅ์น˜ ๋ผ์šฐํŠธ ๋“ฑ๋ก ์ฝ”๋“œ ์ถ”๊ฐ€
try:
from flask_cors import CORS
from app.app_device_routes import register_device_routes
# CORS ์„ค์ •
CORS(app, supports_credentials=True)
# ์žฅ์น˜ ์„œ๋ฒ„ URL ํ™˜๊ฒฝ ๋ณ€์ˆ˜ (๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ)
DEVICE_SERVER_URL = os.getenv('DEVICE_SERVER_URL', 'http://localhost:5050')
logger.info(f"์žฅ์น˜ ์„œ๋ฒ„ URL: {DEVICE_SERVER_URL}")
# ์ธ์ฆ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
from app.app import login_required
# ์ธ์ฆ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์˜ค๋ฒ„๋ผ์ด๋“œ (์žฅ์น˜ API ์ธ์ฆ ์šฐํšŒ)
from functools import wraps
from flask import request, session, redirect, url_for
def device_login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
# API ์š”์ฒญ์ด๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ ์˜ค๋Š” ๊ฒฝ์šฐ ์ธ์ฆ ๋ฌด์‹œ (์ž„์‹œ ์กฐ์น˜)
if request.path.startswith('/api/device/'):
logger.info(f"์žฅ์น˜ API ์š”์ฒญ: {request.path} - ์ธ์ฆ ์ œ์™ธ")
return f(*args, **kwargs)
# ๊ทธ ์™ธ์—๋Š” ๊ธฐ์กด login_required ์‚ฌ์šฉ
return login_required(f)(*args, **kwargs)
return decorated_function
# ์žฅ์น˜ ๋ผ์šฐํŠธ ๋“ฑ๋ก (๋Œ€๋ฌธ์ž ๋ณ€์ˆ˜๋ช… ์‚ฌ์šฉ)
register_device_routes(app, device_login_required, DEVICE_SERVER_URL)
logger.info("์žฅ์น˜ ๋ผ์šฐํŠธ ์ง์ ‘ ๋“ฑ๋ก ์„ฑ๊ณต")
# 404 ์˜ค๋ฅ˜ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก
@app.errorhandler(404)
def not_found(e):
# ํด๋ผ์ด์–ธํŠธ๊ฐ€ JSON์„ ๊ธฐ๋Œ€ํ•˜๋Š” API ํ˜ธ์ถœ์ธ ๊ฒฝ์šฐ JSON ์‘๋‹ต
from flask import request, jsonify
if request.path.startswith('/api/'):
return jsonify({"success": False, "error": "์š”์ฒญํ•œ API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."}), 404
# ์ผ๋ฐ˜ ์›น ํŽ˜์ด์ง€ ์š”์ฒญ์ธ ๊ฒฝ์šฐ HTML ์‘๋‹ต
return "ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", 404
except Exception as e:
logger.error(f"์žฅ์น˜ ๋ผ์šฐํŠธ ๋“ฑ๋ก ์‹คํŒจ: {e}", exc_info=True)
except ImportError as e:
logger.error(f"์•ฑ ๋ชจ๋“ˆ ๊ฐ€์ ธ์˜ค๊ธฐ ์‹คํŒจ: {e}")
raise
if __name__ == '__main__':
port = int(os.environ.get("PORT", 7860))
logger.info(f"์„œ๋ฒ„๋ฅผ http://0.0.0.0:{port} ์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.")
app.run(debug=False, host='0.0.0.0', port=port)