File size: 2,819 Bytes
69f0bf5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
"""
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)