앱의 기능을 조직화하는 방법, 블루프린트(Blueprints)와 뷰(Views)
플라스크 튜토리얼의 세 번째 단계인 Blueprints and Views에서는 사용자의 요청에 응답하는 비즈니스 로직(View)을 어떻게 작성하고, 이를 깔끔하게 그룹화(Blueprint)하는지 배웁니다. 이번 페이지에서는 특히 서비스의 핵심인 인증(Authentication) 기능을 구현합니다.
1. 블루프린트(Blueprint)란?
프로젝트 규모가 커지면 모든 기능을 한 파일에 담기 어렵습니다. 블루프린트는 연관된 뷰(View)들을 하나의 그룹으로 묶어주는 '설계도' 역할을 합니다.
- flaskr/auth.py: 인증 관련 기능(회원가입, 로그인 등)을 담는 블루프린트 파일을 생성합니다.
- url_prefix:
url_prefix='/auth'라고 설정하면, 이 블루프린트에 속한 모든 주소 앞에 자동으로/auth가 붙습니다. (예:/auth/register)
2. 주요 뷰(View) 함수 구현
블루프린트 안에서 실제 작동하는 함수들을 작성합니다. 각 함수는 특정 URL과 연결되어 데이터를 처리합니다.
- 회원가입 (Register): 사용자가 입력한
username과password를 검증하고, 비밀번호를 해시(Hash) 처리하여 안전하게 데이터베이스에 저장합니다. - 로그인 (Login): 입력된 정보를 DB와 비교합니다. 성공 시
session이라는 안전한 쿠키에 사용자의 ID를 저장하여, 이후 페이지 이동 시에도 로그인 상태를 유지하게 합니다. - 로그아웃 (Logout): 세션에 저장된 정보를 삭제하여 로그인 상태를 해제합니다.
3. 인증 시스템의 핵심 기능들
단순히 페이지를 보여주는 것 외에, 보안과 편의성을 위한 기능들이 포함됩니다.
| 기능 | 명령어/데코레이터 | 설명 |
|---|---|---|
| 사전 로드 | @bp.before_app_request |
어떤 페이지에 접속하든, 뷰 함수가 실행되기 전에 로그인된 사용자 정보를 DB에서 가져와 g.user에 담아줍니다. |
| 로그인 필수 제한 | login_required |
글쓰기처럼 로그인이 필요한 기능에 이 데코레이터를 붙이면, 로그인하지 않은 사용자를 자동으로 로그인 페이지로 보냅니다. |
| URL 생성 | url_for() |
실제 주소(예: /auth/login) 대신 함수 이름(auth.login)을 사용하여 주소를 생성합니다. 나중에 주소가 바뀌어도 코드 수정을 최소화할 수 있습니다. |
4. 앱에 블루프린트 등록하기
작성한 auth.py의 블루프린트를 애플리케이션 팩토리가 인식할 수 있도록 flaskr/__init__.py에 등록해야 합니다.
# flaskr/__init__.py 내부
from . import auth
app.register_blueprint(auth.bp)
실무 팁: 보안 수칙
이 튜토리얼에서 강조하는 보안의 핵심은 "비밀번호를 그대로 저장하지 말 것"입니다.
- generate_password_hash: 비밀번호를 알아볼 수 없는 문자로 변환합니다.
- check_password_hash: 로그인 시 입력값과 변환된 값을 안전하게 비교합니다.
Official Flask Tutorial: Blueprints and Views
블루프린트를 사용하면 프로젝트의 구조가 훨씬 체계적으로 변합니다. 특히 g 객체와 session의 차이점을 명확히 이해해두면 상태 관리가 훨씬 쉬워집니다.
'Flask' 카테고리의 다른 글
| 앱의 메인 기능 완성, 블로그 블루프린트(Blog Blueprint) (0) | 2026.03.11 |
|---|---|
| 웹 앱에 생동감을 불어넣는 정적 파일(Static Files) 관리 (0) | 2026.03.11 |
| 사용자에게 보여지는 화면, 템플릿(Templates) 구현하기 (0) | 2026.03.05 |
| 플라스크 앱의 기억 장치, 데이터베이스 설정하기 (0) | 2026.03.03 |
| 플라스크(Flask) 앱의 심장, '애플리케이션 팩토리' 이해하기 (0) | 2026.03.03 |