728x90
반응형
Flask에서 사용자 인증: 세션 관리 및 쿠키 사용
Flask는 가볍고 강력한 Python 웹 프레임워크로, 사용자 인증과 같은 웹 애플리케이션의 중요한 기능을 간단히 구현할 수 있는 도구들을 제공합니다. 이번 포스팅에서는 Flask에서 세션 관리 및 쿠키를 사용하여 사용자 인증을 구현하는 방법을 예제와 함께 자세히 살펴보겠습니다.
1. 세션(Session)과 쿠키(Cookie)의 개념
세션(Session)
- 서버에 저장되는 사용자 데이터입니다.
- 세션은 각 사용자에게 고유한 세션 ID를 부여하며, 이 세션 ID는 클라이언트(브라우저) 측 쿠키에 저장됩니다.
- 세션은 주로 로그인 상태와 같은 사용자 정보를 저장하고 관리하는 데 사용됩니다.
쿠키(Cookie)
- 클라이언트 측(브라우저)에 저장되는 데이터입니다.
- 쿠키는 사용자 인증, 설정 저장, 추적 등을 위해 사용됩니다.
- Flask는 쿠키를 활용하여 세션 ID를 클라이언트에 전달합니다.
2. Flask 세션 관리 기본 설정
Flask는 flask.session
모듈을 사용하여 세션 관리를 제공합니다. 이를 위해 Flask 애플리케이션에 몇 가지 설정을 추가해야 합니다.
기본 설정
from flask import Flask, session
import os
app = Flask(__name__)
# 비밀 키 설정
app.secret_key = os.urandom(24)
@app.route('/')
def home():
return 'Welcome to Flask!'
if __name__ == '__main__':
app.run(debug=True)
secret_key
: 세션 데이터를 안전하게 보호하기 위한 키입니다.
3. 세션을 사용한 사용자 인증
로그인 구현
세션을 사용하여 사용자가 로그인할 때 사용자 정보를 저장할 수 있습니다.
예제: 로그인 및 로그아웃
from flask import Flask, session, redirect, url_for, request, render_template
app = Flask(__name__)
app.secret_key = 'your_secret_key'
# 사용자 데이터 (예: 데이터베이스 대신 딕셔너리 사용)
users = {
'admin': 'password123',
'user1': 'mypassword'
}
@app.route('/')
def home():
if 'username' in session:
return f"안녕하세요, {session['username']}! <a href='/logout'>로그아웃</a>"
return "<a href='/login'>로그인</a>"
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if username in users and users[username] == password:
session['username'] = username
return redirect(url_for('home'))
return '로그인 실패. 다시 시도하세요.'
return '''
<form method="post">
사용자 이름: <input type="text" name="username"><br>
비밀번호: <input type="password" name="password"><br>
<input type="submit" value="로그인">
</form>
'''
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('home'))
if __name__ == '__main__':
app.run(debug=True)
코드 설명
session['username']
: 사용자가 로그인하면 세션에 사용자 이름을 저장합니다.session.pop('username', None)
: 로그아웃 시 세션에서 사용자 이름을 제거합니다.users
딕셔너리: 간단한 사용자 인증을 위해 하드코딩된 사용자 데이터베이스 역할을 합니다.
4. 쿠키를 사용한 사용자 인증
세션 대신 쿠키를 직접 사용할 수도 있습니다.
예제: 쿠키를 이용한 사용자 인증
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route('/')
def home():
username = request.cookies.get('username')
if username:
return f"안녕하세요, {username}! <a href='/logout'>로그아웃</a>"
return "<a href='/login'>로그인</a>"
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
response = make_response(redirect('/'))
response.set_cookie('username', username, max_age=60*60*24) # 쿠키 만료 시간: 1일
return response
return '''
<form method="post">
사용자 이름: <input type="text" name="username"><br>
<input type="submit" value="로그인">
</form>
'''
@app.route('/logout')
def logout():
response = make_response(redirect('/'))
response.delete_cookie('username')
return response
if __name__ == '__main__':
app.run(debug=True)
코드 설명
request.cookies.get('username')
: 쿠키에서 사용자 이름을 가져옵니다.response.set_cookie
: 로그인 시 쿠키에 사용자 이름을 저장합니다.response.delete_cookie
: 로그아웃 시 쿠키를 삭제합니다.
5. Flask-Security와 같은 확장 도구 사용
Flask-Security와 같은 확장을 사용하면 세션 관리와 사용자 인증을 더욱 간편하게 구현할 수 있습니다. 하지만 간단한 애플리케이션에서는 Flask 기본 기능만으로도 충분히 강력한 인증 시스템을 구축할 수 있습니다.
6. 보안 고려 사항
- HTTPS 사용: 세션과 쿠키를 사용할 때 HTTPS를 통해 데이터를 암호화하여 전송해야 합니다.
- 비밀 키 관리:
secret_key
는 외부에 노출되지 않도록 주의해야 합니다. - 쿠키 보안: 쿠키에 민감한 정보를 저장하지 않으며,
HttpOnly
및Secure
속성을 설정합니다.
response.set_cookie('username', username, httponly=True, secure=True)
결론
이번 포스팅에서는 Flask에서 세션과 쿠키를 사용하여 사용자 인증을 구현하는 방법을 살펴보았습니다. Flask는 간단한 설정과 코드만으로도 강력한 인증 시스템을 제공할 수 있는 유연성을 가지고 있습니다. 실제 프로젝트에서 사용할 때는 보안 강화를 위한 추가적인 조치를 반드시 고려해야 합니다.
반응형
'Python > Python Flask' 카테고리의 다른 글
Flask 사용자 인증: Flask-Login으로 사용자 인증 구현하기 (0) | 2025.09.10 |
---|---|
Flask로 RESTful API와 JSON 데이터 처리하기 (0) | 2025.09.09 |
Flask로 RESTful API 엔드포인트 만들기 (0) | 2025.09.08 |
Flask RESTful API 기본 개념 (0) | 2025.09.07 |
Flask에서 폼 처리와 파일 업로드 기능 구현하기 (0) | 2025.09.06 |