Flask
Chapter 4-8(1) Flask 애플리케이션에서 HTTP 기본 인증 사용
Chansman
2025. 4. 22. 20:45
📌 개념 정리
Flask는 파이썬 기반의 웹 프레임워크로, 간단한 웹 애플리케이션을 빠르게 구축할 수 있게 도와줍니다. Flask는 기본적으로 경량화된 구조를 제공하며, 필요한 라이브러리나 기능을 추가해가며 확장할 수 있습니다. 이번 예제에서는 Flask와 flask_httpauth 라이브러리를 사용하여 사용자 인증을 구현하고, 보호된 페이지를 구현하는 방법을 다루고 있습니다.
🚦 동작 원리 및 구조
이 Flask 애플리케이션은 기본적으로 두 가지 페이지를 제공합니다:
- 홈 페이지 (/ 경로) - 기본적으로 사용자가 접속할 수 있는 페이지입니다.
- 보호된 페이지 (/protected 경로) - 인증된 사용자만 접근할 수 있는 페이지입니다.
인증 흐름:
- 사용자가 페이지에 접근하면, flask_httpauth 라이브러리의 verify_password 함수를 사용해 사용자 인증을 처리합니다.
- 인증된 사용자만 protected 페이지에 접근할 수 있습니다.
구조:
- app.py: 애플리케이션의 핵심 로직을 포함한 파일입니다. Flask 서버를 실행하고, 두 페이지(index, protected)를 제공합니다. 인증 기능도 여기에서 처리됩니다.
- index.html: 홈 페이지로, 사용자가 접근할 수 있는 기본적인 페이지입니다.
- secret.html: 보호된 페이지로, 인증된 사용자만 접근할 수 있습니다.
💻 코드 예시 및 흐름 분석
1. app.py
from flask import Flask, jsonify, render_template
from flask_httpauth import HTTPBasicAuth
app = Flask(__name__)
auth = HTTPBasicAuth()
# 사용자 정보
users = {
"admin": "secret", # 사용자명: 비밀번호
"guest": "pw123"
}
# 인증 함수 정의
@auth.verify_password
def verify_password(username, password):
if username in users and users[username] == password:
return username # 인증 성공 시 사용자명 반환
# 인증된 사용자만 접근 가능한 페이지
@app.route('/protected')
@auth.login_required # 로그인된 사용자만 접근 가능
def protected():
return render_template('secret.html') # 보호된 콘텐츠를 렌더링
# 기본 홈 페이지
@app.route('/')
def index():
return render_template('index.html') # 홈 페이지
if __name__ == '__main__':
app.run(debug=True)
2. index.html
<!DOCTYPE html>
<html>
<head>
<title>Home Page</title>
</head>
<body>
<h1>Welcome to the Home Page</h1>
<a href="/protected">Go to Protected Resource</a>
</body>
</html>
3. secret.html
<!DOCTYPE html>
<html>
<head>
<title>Secret Page</title>
</head>
<body>
<h1>Secret Page</h1>
<p>Welcome to the secret page!</p>
<a href="/">Home</a>
<a href="/logout">Logout</a>
</body>
</html>
🧪 실전 사례
이 애플리케이션은 간단한 사용자 인증을 구현한 예제입니다. flask_httpauth 라이브러리를 사용하여 로그인 기능을 구현하고, 인증된 사용자만 접근할 수 있는 보호된 페이지를 제공합니다. 예를 들어, 홈 페이지에서는 누구나 접근할 수 있지만, 보호된 페이지는 admin 또는 guest와 같은 사용자 이름과 비밀번호를 입력해야만 열 수 있습니다.
🧠 고급 팁 or 자주 하는 실수
- 세션 관리: 기본적인 인증은 Basic Authentication을 사용하여 처리하지만, 실제 서비스에서는 session이나 JWT를 사용하여 사용자 상태를 관리하는 것이 일반적입니다.
- 보안: 비밀번호를 평문으로 저장하는 것은 보안상 좋지 않습니다. hashlib 같은 라이브러리로 비밀번호를 해시화해서 저장하는 것이 안전합니다.
- 로그인 실패 처리: 인증 실패 시 사용자에게 어떤 피드백을 제공할지 고민해보세요. 예를 들어, 실패 횟수를 추적하여 일정 횟수 이상 실패하면 계정을 잠그는 등의 추가 보안 조치를 고려할 수 있습니다.
✅ 마무리 요약 및 복습 포인트
- Flask를 사용하여 간단한 웹 애플리케이션을 만들 수 있습니다.
- flask_httpauth 라이브러리를 통해 기본 인증을 구현할 수 있습니다.
- 인증이 필요한 페이지에 접근할 때 @auth.login_required 데코레이터를 사용하여 인증을 요구할 수 있습니다.
- 실제 서비스에서는 세션 관리와 비밀번호 보안 등을 강화해야 합니다.