TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 웹개발>

[파이썬] 플라스크(Flask) - 블루프린트

by 기록자_Recordian 2024. 7. 15.
728x90
반응형
시작에 앞서
해당 내용은 <가장 빠른 풀스택을 위한 Flask & FastAPI>, Dave Lee 지음. BJ Public 출판.
내용을 토대로 작성되었습니다. 보다 자세한 사항은 해당 교재를 참고하시기 바랍니다.

블루프린트란?

 

블루프린트(Blueprint)는 플라스크에서 여러 컴포넌트를 논리적으로 그룹화하여 대규모 애플리케이션을 구성하는 방식이다.

이를 통해 기능별로 코드를 분리하고 재사용할 수 있다.

블루프린트는 웹 애플리케이션의 구조를 체계적으로 나타내는데, 특히 대규모 프로젝트에서 코드를 모듈화하여 관리할 때 유용하다.

 

◆ 블루프린트가 필요한 이유

블루프린트는 대규모 애플리케이션의 복잡성을 줄이고, 코드의 재사용성을 높이며, 프로젝트의 유지보수를 용이하게 한다.

  • 모듈화: 블루프린트를 사용하면 코드를 논리적인 단위로 분리할 수 있어 유지보수가 쉬워진다.
  • 재사용성: 블루프린트를 작성해두면 다른 프로젝트에서도 쉽게 가져와 사용할 수 있다
  • 코드의 가독성: 각 블루프린트가 특정 기능을 담당하므로, 코드를 빠르게 이해할 수 있다

인증 시스템, 프로필 페이지, 게시판 시스템 등 각기 다른 기능을 하는 모듈들을 블루프린트로 분리함으로써 각 모듈을 독립적으로 개발하고 통합할 수 있다.


블루프린트 기본 사용법

 

블루프린트를 생성하기 위해서는 Blueprint 클래스의 인스턴스를 생성해야 한다.

Blueprint 클래스는 flask 모듈 내에 정의되어 있다.

from flask import Blueprint, Flask

# Blueprint 객체 생성
# 첫 번째 인자는 블루프린트의 이름
# 두번 째 인자는 블루프린트가 정의되는 모듈의 이름. 
# 일반적으로 '__name__' 사용

auth_blueprint = Blueprint('auth', __name__)

▶ 두 번째 인자 __name__은 플라스크가 템플릿과 정적 파일을 찾을 때 경로를 결정하는 데 사용된다.


블루프린트가 객체가 생성되면,  해당 객체를 사용하여 라우트를 정의할 수 있다.

라우트는 클라이언트의 요청을 특정 함수에 연결하는 규칙이다.

# 블루프린트를 사용하여 라우트 정의
@auth_blueprint.route('/login')
def login():
    return '로그인 페이지입니다'

@auth_blueprint.route('/logout')
def logout():
    return '로그아웃 되었습니다'

▶ @auth_blueprint('/login') 은 URL 경로 /login 에 대한 요청을 처리할 때 login() 함수를 등록하는 데코레이터이며, /logout에 대한 요청은 logout() 함수로 라우팅된다.

※ 데코레이터(decorator)는 함수나 메서드에 적용되어, 해당 함수나 메서드의 기능을 확장하거나 변경하는 역할을 한다.


생성된 블루프린트는 플라스크 애플리케이션 객체에 등록해야 실제로 작동한다. 이 과정은 register_blueprint() 메서드를 통해 이루어진다.

app = Flask(__name__)

#블루프린트 등록
# url_prefix는 해당 블루프린트의 모든 라우트 앞에 붙게 되는 접두사
app.register_blueprint(auth_blueprint, url_prefix='/auth')

▶ app.register_blueprint() 메서드를 호출할 때 url_prefix='/auth' 인자를 전달하면, auth_blueprint 에 정의된 모든 라우트 앞에 자동으로 /auth가 붙는다. (/login >  /auth/login으로 매핑)

 

블루프린트의 등록은 플라스크 애플리케이션의 실행 전, 애플리케이션의 객체가 완전히 구성된 후에 이루어져야 한다.

이렇게 하면 애플리케이션 내의 다른 설정들과 충돌 없이 블루프린트를 통합할 수 있다.

 

[전체 코드]

from flask import Blueprint, Flask

# Blueprint 객체 생성
# 첫 번째 인자는 블루프린트의 이름
# 두번 째 인자는 블루프린트가 정의되는 모듈의 이름. 
# 일반적으로 '__name__' 사용

auth_blueprint = Blueprint('auth', __name__)

# 블루프린트를 사용하여 라우트 정의
@auth_blueprint.route('/login')
def login():
    return '로그인 페이지입니다'

@auth_blueprint.route('/logout')
def logout():
    return '로그아웃 되었습니다'

app = Flask(__name__)

#블루프린트 등록
# url_prefix는 해당 블루프린트의 모든 라우트 앞에 붙게 되는 접두사
app.register_blueprint(auth_blueprint, url_prefix='/auth')

 

블루프린트는 애플리케이션의 구조를 깔끔하게 유지하고, 복잡한 애플리케이션을 체계적으로 개발할 수 있게 도와주는 강력한 기능이다. 이를 통해 개발자는 애플리케이션의 각 부분을 독립적으로 개발하고, 유지보수할 수 있는 유연성을 얻을 수 있다.


애플리케이션 구조 모듈화

 

◆ 기능별 views.py 파일 생성

auth와 main 폴더 안에 각각의 views.py 파일을 생성하고, 이 파일 안에서 해당 기능과 관련된 라우트들을 정의한다.

 

먼저 /auth/views.py에는 아래와 같은 코드를 작성한다

from flask import Blueprint

auth_blueprint = Blueprint('auth', __name__)

@auth_blueprint.route('/login')
def login():
    return '로그인 페이지입니다'

@auth_blueprint.route('/logout')
def logout():
    return '로그아웃 되었습니다'

 

main/views.py 에는 이와 유사하게 다음과 같이 작성한다

from flask import Blueprint

main_blueprint = Blueprint('main', __name__)

@main_blueprint.route('/')
def home():
    return '메인 페이지입니다'

◆ 애플리케이션 객체에 블루프린트 등록

app.py에서는 애플리케이션 객체를 생성하고, 앞에서 정의한 블루프린트를 등록한다.

from flask import Flask
from auth.views import auth_blueprint
from main.views import main_blueprint

app = Flask(__name__)

app.register_blueprint(auth_blueprint, url_prefix='/auth')
app.register_blueprint(main_blueprint, url_prefix='/')

@app.route('/welcome')
def welcome():
    return '환영합니다! 이것은 블루프린트를 사용하지 않는 직접적인 라우트입니다'

 

app.register_blueprint() 메서드를 사용하여 auth_blueprint와 main_blueprint를 등록하면, 이 블루프린트들에 정의된 라우트들이 애플리케이션의 URL 맵에 추가된다.

url_prefix를 설정함으로써 각 블루프린트의 라우트들이 특정한 기본 경로를 갖게 한다.

 

@app.route('/welcome') 구문은 애플리케이션의 메인 URL 맵에 바로 'welcome' 경로를 추가하는 예제로, 이는 메인 환영 메시지와 같은 중앙집중식으로 관리되어야 하는 페이지에 유용할 수 있다.

728x90
반응형