프로그래밍/Python

Python 웹 개발: Flask 완벽 가이드

shimdh 2025. 2. 28. 09:18
728x90

현대 웹 개발은 단순한 정적인 페이지를 넘어 동적인 데이터 처리, API 제공, 사용자 인증, 데이터베이스 연동 등의 복잡한 기능을 요구합니다. Python은 그 유연성과 강력한 라이브러리 지원 덕분에 웹 개발에서 중요한 역할을 차지하고 있으며, 그중에서도 Flask는 가볍고 강력한 웹 프레임워크로 많은 개발자들에게 사랑받고 있습니다.

Flask는 간단한 문법과 확장 가능한 구조를 갖추고 있어, 빠르게 웹 애플리케이션을 구축할 수 있습니다. 이번 글에서는 Flask의 핵심 개념, 라우팅, 템플릿 렌더링, 데이터베이스 연동 및 실전 활용법까지 자세히 살펴보겠습니다.


1. Flask란 무엇인가?

🔹 Flask의 특징

Flask는 Python 기반의 마이크로 웹 프레임워크로, 웹 애플리케이션을 빠르고 쉽게 개발할 수 있도록 도와줍니다. Flask의 주요 특징은 다음과 같습니다.

  • 경량성: 불필요한 기능 없이 핵심 기능만 포함하고 있어 빠르고 간결함.
  • 유연성: 프로젝트 구조를 자유롭게 구성할 수 있어 확장성이 뛰어남.
  • 확장성: 플러그인과 외부 라이브러리를 활용하여 기능 추가 가능.
  • 템플릿 엔진: Jinja2를 사용하여 동적 HTML 페이지를 쉽게 생성할 수 있음.
  • REST API 개발 가능: Flask는 API 개발에도 적합하여, 백엔드 서비스 구축에 많이 활용됨.

2. Flask 설치 및 기본 실행

🔹 Flask 설치하기

Flask는 Python 패키지 관리자 pip를 이용하여 간단하게 설치할 수 있습니다.

pip install Flask

🔹 "Hello, World!" Flask 웹 애플리케이션 만들기

다음은 가장 기본적인 Flask 애플리케이션 코드입니다.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(debug=True)

✅ 실행 방법

  1. 위 코드를 app.py 파일로 저장합니다.
  2. 터미널에서 python app.py 실행.
  3. 브라우저에서 http://127.0.0.1:5000/에 접속하면 "Hello, World!"가 표시됩니다.

3. Flask 라우팅과 HTTP 요청 처리

웹 애플리케이션에서는 클라이언트가 특정 URL로 요청을 보낼 때, Flask가 해당 요청을 적절한 함수로 처리하도록 구성해야 합니다. 이를 라우팅(Routing) 이라고 합니다.

🔹 기본 라우팅

@app.route('/hello')
def say_hello():
    return 'Hello, Flask!'

위 코드에서 /hello 경로로 요청이 들어오면 say_hello() 함수가 실행됩니다.

🔹 URL 동적 매개변수 사용

URL에 변수를 포함하여 동적으로 처리할 수도 있습니다.

@app.route('/user/<username>')
def greet_user(username):
    return f'안녕하세요, {username}님!'
  • /user/Alice → "안녕하세요, Alice님!" 출력
  • /user/Bob → "안녕하세요, Bob님!" 출력

🔹 HTTP 메서드 처리 (GET, POST)

웹 애플리케이션에서는 폼 데이터를 제출하거나 JSON 데이터를 전송할 때 POST 요청을 사용합니다.

from flask import request

@app.route('/submit', methods=['POST'])
def submit():
    data = request.form['data']  # HTML 폼에서 전송된 데이터 가져오기
    return f'입력된 데이터: {data}'

이제 클라이언트는 /submit 경로로 POST 요청을 보내 데이터를 서버에 전달할 수 있습니다.


4. 템플릿 렌더링 (Jinja2)

Flask는 Jinja2 템플릿 엔진을 사용하여 HTML을 동적으로 생성할 수 있습니다.

🔹 HTML 템플릿 파일 (templates/index.html)

<!doctype html>
<html>
<head><title>{{ title }}</title></head>
<body>
    <h1>{{ heading }}</h1>
    <p>{{ content }}</p>
</body>
</html>

🔹 Flask에서 템플릿 렌더링

from flask import render_template

@app.route('/')
def home():
    return render_template('index.html', title='홈페이지', heading='Flask 웹 개발', content='이 페이지는 Flask로 생성되었습니다.')

✅ 실행 결과
웹 브라우저에서 http://127.0.0.1:5000/로 접속하면 위의 HTML 파일이 렌더링됩니다.


5. Flask와 데이터베이스 연동 (SQLAlchemy)

대부분의 웹 애플리케이션은 데이터를 저장해야 하며, 이를 위해 Flask는 SQLAlchemy와 같은 ORM(Object Relational Mapping) 라이브러리를 제공합니다.

🔹 SQLAlchemy 설치

pip install flask-sqlalchemy

🔹 데이터베이스 모델 정의

from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)

# 데이터베이스 생성
db.create_all()

위 코드는 SQLite 데이터베이스와 연결하고, User 테이블을 생성하는 코드입니다.

🔹 데이터 삽입 및 조회

@app.route('/add_user/<name>')
def add_user(name):
    new_user = User(username=name)
    db.session.add(new_user)
    db.session.commit()
    return f'사용자 {name}이(가) 추가되었습니다!'

@app.route('/users')
def list_users():
    users = User.query.all()
    return {user.id: user.username for user in users}
  • /add_user/AliceAlice 사용자 추가
  • /users → 모든 사용자 목록 출력

6. REST API 개발 (JSON 응답)

Flask는 RESTful API 개발에도 적합합니다. JSON 데이터를 반환하는 API를 만들 수 있습니다.

🔹 JSON 응답 API

from flask import jsonify

@app.route('/api/users')
def get_users():
    users = User.query.all()
    return jsonify([{ "id": user.id, "username": user.username } for user in users])
  • /api/users 요청 시, JSON 형식으로 사용자 데이터를 반환합니다.

🔥 결론: Flask로 강력한 웹 애플리케이션 개발하기

Flask는 간단한 문법과 강력한 확장성을 제공하여, 웹 개발 초보자부터 전문가까지 다양한 프로젝트에 활용할 수 있습니다.

🎯 핵심 정리

  • Flask는 경량 웹 프레임워크로 빠른 개발이 가능.
  • 라우팅을 활용하여 동적 URL을 처리하고, HTTP 메서드를 활용한 요청 처리 가능.
  • 템플릿 렌더링을 통해 동적인 HTML 페이지 생성.
  • SQLAlchemy를 활용하여 데이터베이스 연동 가능.
  • RESTful API를 구축하여 JSON 응답을 쉽게 반환 가능.

실제 프로젝트에서 Flask를 활용하면 웹 애플리케이션, REST API, 데이터 분석 대시보드 등 다양한 솔루션을 구축할 수 있습니다. 직접 실습하면서 Flask의 강력한 기능을 경험해 보세요! 🚀

728x90