humanda5
์ •์ƒ ์ž‘๋™, ์ˆ˜์ • ์™„๋ฃŒ
b5ff045
raw
history blame
2.96 kB
# portfolio/app.py
from flask import Flask, render_template, url_for, redirect
# from npc_social_network.routes.npc_route import npc_bp
# from npc_social_network import simulation_core
# from stock.routes.stock_route import stock_bp
import threading
import logging
# -------------------------------------------------------------------
# ํŒŒ์ผ 1: portfolio/app.py (์ˆ˜์ •)
# ์—ญํ• : ์ „์ฒด ํฌํŠธํด๋ฆฌ์˜ค์˜ ์ง„์ž…์ .
# NPC ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ , ๊ด€๋ จ URL ๊ทธ๋ฃน(Blueprint)์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
# -------------------------------------------------------------------
# ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์ดˆ๊ธฐํ™”๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ž ๊ธˆ ์žฅ์น˜
init_lock = threading.Lock()
simulation_initialized = False
# ํŠน์ • ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฑธ๋Ÿฌ๋‚ด๊ธฐ ์œ„ํ•œ ํ•„ํ„ฐ ํด๋ž˜์Šค
class LogFilter(logging.Filter):
def filter(self, record):
# /api/world_state ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ๋กœ๊ทธ๋Š” ๊ธฐ๋กํ•˜์ง€ ์•Š์Œ
if "/api/world_state" in record.getMessage():
return False
return True
def create_app():
"""Flask ์•ฑ์„ ์ƒ์„ฑํ•˜๊ณ , ํ•„์š”ํ•œ Blueprint๋ฅผ ๋“ฑ๋กํ•˜๋Š” ํŒฉํ† ๋ฆฌ ํ•จ์ˆ˜."""
app = Flask(__name__,
template_folder='templates') # static/template ๊ฒฝ๋กœ๋ฅผ ๊ธฐ๋ณธ๊ฐ’
try:
from npc_social_network.routes.npc_route import npc_bp
app.register_blueprint(npc_bp)
print("โœ… 'npc_social' Blueprint๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋“ฑ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
# app.register_blueprint(stock_bp)
except Exception as e:
import traceback
print("="*60)
print("โŒ CRITICAL ERROR: Blueprint ๋“ฑ๋ก ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค!")
print(f" ์—๋Ÿฌ ๋ฉ”์‹œ์ง€: {e}")
print("="*60)
traceback.print_exc() # ์—๋Ÿฌ์˜ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
print("="*60)
# ํฌํŠธํด๋ฆฌ์˜ค์˜ ๋ฉ”์ธ ๋žœ๋”ฉ ํŽ˜์ด์ง€
@app.route("/")
def index():
return render_template("main.html")
return app
if __name__ == '__main__':
# 1. flask ์•ฑ ์‹คํ–‰
app = create_app()
# 2. NPC ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์ดˆ๊ธฐํ™” ๋ฐ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ ์‹œ์ž‘
try:
from npc_social_network import simulation_core
simulation_core.initialize_simulation()
print("โœ… ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
except Exception as e:
import traceback
print("="*60)
print("โŒ CRITICAL ERROR: ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์ดˆ๊ธฐํ™” ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค!")
print(f" ์—๋Ÿฌ ๋ฉ”์‹œ์ง€: {e}")
print("="*60)
traceback.print_exc()
print("="*60)
# 3. Flask ์›น ์„œ๋ฒ„ ์‹คํ–‰
log = logging.getLogger('werkzeug')
log.addFilter(LogFilter())
# use_reloader=False๋Š” ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ ์•ฑ์ด ๋‘ ๋ฒˆ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์—ฌ,
# ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‘ ๋ฒˆ ์‹œ์ž‘๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
app.run(debug=True, use_reloader=False, port=5000)