미니프로젝트 TIL

Donghwan Oh·2026년 8월 25일

와이어프레임

Flask 블루프린트

Flask Blueprint & init.py 요약

1. Blueprint를 쓰는 이유 (순환 참조 방지)

문제점: app.py에서 라우트를 불러오고, auth.py에서 @app.route를 쓰기 위해 app을 불러오면 상호 import로 인한 순환 참조 에러가 발생합니다.

해결책: auth.py는 app 대신 독립적인 auth_bp (Blueprint 객체)를 사용하고, app.py에서 이를 가져와 등록만 함으로써 참조 방향을 단방향으로 만듭니다.

2. 핵심 질문 답변

from routes.auth import auth_bp는 무슨 뜻인가요?

routes 폴더 내 auth.py 파일에서 auth_bp 변수를 가져오겠다는 의미입니다.

init_app(app) 함수 파라미터로 app을 써도 되나요?

가능합니다. import 시점에 app을 불러오는 것이 아니라, app.py에서 생성 완료된 app 객체를 함수 인자로 전달받아 실행하는 시점에는 이미 app이 준비되어 있으므로 순환 참조가 발생하지 않습니다.

  1. 코드 예시
    ① 라우트 파일 (routes/auth.py)
from flask import Blueprint, render_template

# app을 import하지 않고 독립적인 Blueprint 객체 생성
auth_bp = Blueprint('auth', __name__)

@auth_bp.route('/login')
def login():
    return render_template('login.html')

② 패키지 초기화 파일 (routes/init.py)

from .main import main_bp
from .auth import auth_bp

# app을 전달받아 블루프린트를 일괄 등록하는 함수
def init_app(app):
    app.register_blueprint(main_bp)
    app.register_blueprint(auth_bp, url_prefix='/auth')

③ 메인 실행 파일 (app.py)

from flask import Flask
import routes

app = Flask(__name__)

# 생성된 app 객체를 init_app 함수에 전달
routes.init_app(app)

if __name__ == '__main__':
    app.run(debug=True)

HTMX

profile
왜?에 대해 공부한 것을 기록합니다.

0개의 댓글