지난주 파이썬 언어와 뷰티풀 수프를 활용한 웹 스크래핑에 이어, 오늘은 플라스크를 활용한 서버 구축을 배웠다.
Flask는 express와 마찬가지로 쉽게 간단하게 서버를 구축할 수 있는 프레임워크다.
다만 짧은 기간에 여러가지를 배우니 문법에 혼동이 많았다.
오늘 배운 내용을 간략히 정리해보고자 한다.
Flask는 파이썬으로 작성된 마이크로 웹 프레임워크로, 2010년 아르민 로나허(Armin Ronacher)에 의해 만들어졌습니다. '마이크로'라는 접두어는 Flask의 핵심이 간결하고 확장 가능하게 유지되면서도, 필요에 따라 다양한 확장 기능을 추가할 수 있음을 의미합니다.
Flask는 다음과 같은 철학을 바탕으로 설계되었습니다:
Flask와 자주 비교되는 Django는 다음과 같은 차이점이 있습니다:
특징 | Flask | Django |
---|---|---|
규모 | 마이크로 프레임워크 | 풀스택 프레임워크 |
철학 | 최소한의 기능, 필요에 따라 확장 | 배터리 포함 (필요한 모든 기능 내장) |
학습 곡선 | 낮음 | 상대적으로 높음 |
자유도 | 높음 | 규칙과 구조가 정해져 있음 |
적합한 프로젝트 | 소규모~중규모 프로젝트, API 서버 | 대규모 프로젝트, 콘텐츠 관리 시스템 |
Flask는 두 가지 주요 의존성을 가지고 있습니다:
1. Werkzeug: WSGI(Web Server Gateway Interface) 유틸리티 라이브러리
2. Jinja2: 템플릿 엔진
Flask 애플리케이션의 가장 기본적인 구조는 다음과 같습니다:
from flask import Flask
# Flask 애플리케이션 인스턴스 생성
app = Flask(__name__)
# 라우트 정의
@app.route('/')
def hello_world():
return 'Hello, World!'
# 애플리케이션 실행
if __name__ == '__main__':
app.run(debug=True)
Flask에서는 URL 패턴과 함수를 연결하는 라우팅을 데코레이터를 사용하여 간단하게 정의할 수 있습니다.
@app.route('/user/<username>')
def show_user_profile(username):
return f'User {username}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f'Post {post_id}'
특정 HTTP 메서드(GET, POST 등)에 대한 처리를 지정할 수 있습니다.
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
# 로그인 처리
return do_the_login()
else:
# 로그인 폼 표시
return show_the_login_form()
Jinja2 템플릿 엔진을 사용하여 HTML 페이지를 렌더링할 수 있습니다.
from flask import render_template
@app.route('/hello/<name>')
def hello(name):
return render_template('hello.html', name=name)
템플릿 예시 (hello.html):
<!DOCTYPE html>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
클라이언트에서 전송된 데이터를 처리할 수 있습니다.
from flask import request
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
# 인증 로직
return f'로그인 시도: {username}'
from flask import redirect, url_for, abort
@app.route('/redirect')
def redirect_example():
return redirect(url_for('hello_world'))
@app.route('/error')
def error_example():
abort(404)# 404 에러 발생
@app.errorhandler(404)
def page_not_found(error):
return render_template('404.html'), 404
from flask import session
app.secret_key = 'your_secret_key'# 세션을 암호화하기 위한 키
@app.route('/set_session')
def set_session():
session['username'] = 'user123'
return '세션이 설정되었습니다.'
@app.route('/get_session')
def get_session():
username = session.get('username')
return f'세션에 저장된 사용자명: {username}'
수업 때 세션과 쿠키를 다루진 않았지만 예제 코드를 넣어봤다.
이 밖에도 블루프린트, 애플리케이션 팩토리 등 파고들 분야가 많지만 프로젝트에서 주로 사용할 것 같지 않아 여기서 정리를 마친다!