컴퓨터/Python

Python (26) - Flask를 활용하여 웹서버를 만들어보자

달서비 2024. 11. 7. 01:00

파이썬을 백엔드로 사용하여 웹사이트를 구축할 수 있습니다. 소규모 프로젝트에 적합한 파이썬 기반 웹 프레임워크인 Flask에 대하여 알아보겠습니다.

 

Flask

Flask 로고

Flask는 파이썬 기반의 마이크로 웹 프레임워크로 간편하게 웹 애플리케이션을 개발할 수 있도록 도와줍니다. Flask는 Werkzeug WSGI 툴킷과 Jinja2 템플릿 엔진을 기반으로 하고 있습니다. 필요한 기능만 포함하고 있어 가볍고 빠릅니다. 뛰어난 확장성을 바탕으로 사용자가 원하는 기능을 쉽게 추가할 수 있는 유연성을 제공합니다.

 

Flask의 특징

  1. 간결성:  코드가 적고 직관적이고 짧아,  적은 코드만으로 웹사이트를 개발할 수 있습니다.
  2. 확장성:  DB연동, 그래프 추가 등 다양한 기능을, 플러그인을 통하여 원하는 기능을 쉽게 추가할 수 있습니다.
  3. RESTful 지원: RESTful 서비스를 구축하는 데 필요한 기능을 지원하며 API를 간편하게 개발할 수 있습니다.

 

더 많은 정보는 공식 문서를 통해 확인 할 수 있습니다.

https://flask.palletsprojects.com/en/2.2.x/

 

Welcome to Flask — Flask Documentation (2.2.x)

 

flask.palletsprojects.com

 

Flask 설치 및 Hello World! 출력하기

먼저 파이썬이 깔려 있지 않는 경우 파이썬을 설치해야 합니다, 파이썬이 설치되어 있다면 pip를 이용하여 Flask를 설치하도록 합니다. CMD에서 아래와 명령어를 입력합니다.

pip install flask

 

설치가 완료되면, 아래의 소스코드를 app.py 파일에 저장 후 Flask 애플리케이션을 실행합니다.

from flask import Flask
app = Flask(__name__)


@app.route('/')
def hello():
    return "Hello World!"
    
if __name__ == '__main__':
    app.run(debug=True)

 

웹 브라우저에서 아래 링크를 열면 Hello World가 출력합니다.

http://127.0.0.1:5000/

 

여기서 @app.route('/')는 URL 경로를 지정해 주는 데코레이터입니다. 경로'/'에 접속했을때 hello() 함수를 실행하도록 설정합니다. 

또한 app.run(debug=True)는 개발 모드로 서버를 실행시킵니다.

 

Flask로 RESTful API 구현하기

추가로 Flask를 이용하여 기본적은 CRUD(Create, Read, Update, Delete) 예제를 만들어 보겠습니다. 여기서는 간단하게 학생 정보를 관리하는 API를 구현합니다. 각 API 사용법은 다음과 같습니다.

  1. POST /events: 새로운 학생 정보를 추가합니다. (student_id, name, status)
  2. GET /events: 모든 학생 정보를 반환합니다.
  3. PUT /events/<student_id>: 특정 학생(student_id) 정보를 업데이트합니다.
  4. DELETE /events/<student_id>: 특정 학생(student_id) 정보를 삭제합니다.

마찬가지로 app.py에 아래 코드를 저장 후 실행하면 됩니다.

from flask import Flask, jsonify, request

app = Flask(__name__)

# 샘플데이터
sample_data = [
    {"student_id": "202400001", "name": "김철수", "status": "재학"},
    {"student_id": "202400002", "name": "홍길동", "status": "휴학"},
]

# student_id를 찾는 함수
def find_event(student_id):
    return next((event for event in sample_data if event["student_id"] == student_id), None)

# POST: 새로운 학생 정보를 추가한다.
@app.route("/events", methods=["POST"])
def create_event():
    data = request.get_json()
    new_event = {
        "student_id": data.get("student_id", ""),
        "name": data.get("name", ""),
        "status": data.get("status", "재학"),
    }
    sample_data.append(new_event)
    return jsonify(new_event), 201

# GET: 모든 학생 정보를 불러온다.
@app.route("/events", methods=["GET"])
def get_events():
    return jsonify(sample_data), 200

# PUT: 학생 정보를 업데이트한다.
@app.route("/events/<student_id>", methods=["PUT"])
def update_event(student_id):
    event = find_event(student_id)
    if not event:
        return jsonify({"error": "Data not found"}), 404

    data = request.get_json()
    event["name"] = data.get("name", event["name"])
    event["status"] = data.get("status", event["status"])
    return jsonify(event), 200

# DELETE: 학생 정보를 삭제한다.
@app.route("/events/<student_id>", methods=["DELETE"])
def delete_event(student_id):
    event = find_event(student_id)
    if not event:
        return jsonify({"error": "Data not found"}), 404

    sample_data.remove(event)
    return jsonify({"message": "Data deleted"}), 200

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

 

해당 코드에서 각 요청은 JSON 데이터를 주고받으며 POST, GET, PUT, DELETE 메서드를 사용하여 데이터를 처리합니다.

 

마지막으로

본격적으로 웹 서비스를 개발하기 위해서는 소프트웨어 흐름도, 데이터베이스 설계, 사용자 인증 및 권한 관리, 보안 등의 요소들이 필요합니다. Flask는 이러한 기능을 손쉽게 구현할 수 있도록 도와주는 다양한 라이브러리와 확장 기능들을 제공합니다. 위의 요소를 고려한다면 실제 서비스가 가능한 웹 애플리케이션을 구축할 수 있습니다. 이를 통해 사용자 경험(UX)을 최적화하고 개선된 서비스를 제공할 수 있습니다.

 

Reference

https://wikidocs.net/81039

 

1-01 필자가 생각하는 플라스크란?

플라스크(Flask)는 2004년 오스트리아의 오픈소스 개발자 아르민 로나허(Armin Ronacher)가 만든 웹 프레임워크다. 플라스크는 아르민 로나허가 만우절에 장난삼아 던…

wikidocs.net

https://velog.io/@new_wisdom/flask-1-flask-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-with-MAC

 

[Flask] #1 Flask 시작하기 with MAC

Soundee 프로젝트에서는 5초마다 들어오는 소리에 대한 추론 정보를 DB에 저장해야 한다. 서버 테스트를 위해서 일단 테스트로(?) 5초마다 DB소리 정보를 저장하는 쿼리를 날리고 그 정보를 받아오

velog.io