플라스크 (Flask)

IT 위키

플라스크(Flask)는 파이썬으로 작성된 경량 웹 프레임워크로, 심플한 구조와 확장성이 뛰어나 소규모 웹 애플리케이션부터 프로토타입 개발에 널리 사용된다.

1 개요[편집 | 원본 편집]

플라스크는 Werkzeug와 Jinja2를 기반으로 개발되었으며, 기본적으로 최소한의 기능만 제공한다. 필요에 따라 다양한 확장 모듈을 추가하여 데이터베이스 연동, 폼 검증, 인증, 파일 업로드 등 여러 기능을 쉽게 구현할 수 있다.

2 특징[편집 | 원본 편집]

  • 단순하고 유연한 설계로 빠른 프로토타이핑에 적합하다.
  • 내장 개발 서버와 디버거를 제공하여 개발 과정에서 빠른 테스트와 디버깅이 가능하다.
  • RESTful 요청 처리를 쉽게 구성할 수 있으며, 라우팅 기능이 직관적이다.
  • 다양한 확장 모듈(Flask-SQLAlchemy, Flask-WTF, Flask-Login 등)을 통해 기능 확장이 용이하다.
  • Jinja2 템플릿 엔진을 사용하여 HTML 템플릿 렌더링을 지원한다.

3 내장 서버와 프로덕션 배포[편집 | 원본 편집]

플라스크가 제공하는 내장 웹 서버는 개발과 디버깅을 위한 용도로 설계되어 있다. 이 서버는 경량화되어 있어 간단한 테스트와 로컬 개발 환경에서는 유용하지만, 보안과 성능 면에서 제한이 있어 실제 운영 환경에서는 적합하지 않다. 프로덕션 환경에서는 Gunicorn, uWSGI, 또는 Waitress와 같은 별도의 WSGI 서버를 사용하여 더 높은 안정성과 확장성을 확보하는 것이 바람직하다.

4 설치[편집 | 원본 편집]

플라스크는 pip를 사용하여 쉽게 설치할 수 있다.

pip install Flask

5 기본 예제[편집 | 원본 편집]

다음은 플라스크를 이용하여 간단한 웹 애플리케이션을 구현한 예제이다.

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello, Flask!"

@app.route("/greet/<name>")
def greet(name):
    return f"Hello, {name}!"

@app.route("/data", methods=["POST"])
def data():
    json_data = request.get_json()
    return jsonify({"received": json_data})

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

위 예제에서는 기본 경로, 동적 URL 경로, POST 요청을 처리하는 API 엔드포인트를 구현하였다. 디버깅 모드에서는 내장 서버를 통해 빠른 테스트가 가능하다.

6 프로덕션 배포[편집 | 원본 편집]

개발 중에 제공되는 내장 서버는 보안, 동시 접속 처리, 성능 등의 이유로 프로덕션 환경에서는 사용되지 않는다. 실제 운영 환경에서는 다음과 같은 WSGI 서버를 사용하여 애플리케이션을 배포하는 것이 좋다.

  • Gunicorn: 멀티 워커 프로세스를 통해 동시 요청을 효율적으로 처리한다.
  • uWSGI: 높은 안정성과 다양한 기능을 제공하며, Nginx와 함께 사용하면 정적 파일 처리에도 유리하다.
  • Waitress: Windows 환경에서도 안정적으로 운영 가능한 WSGI 서버이다.

예를 들어, Gunicorn과 함께 플라스크 애플리케이션을 배포하는 방법은 다음과 같다.

gunicorn main:app --workers 4

여기서 "main"은 애플리케이션 파일명을, "app"은 Flask 인스턴스 객체를 의미하며, --workers 옵션을 통해 여러 프로세스로 요청을 분산시킬 수 있다.

7 같이 보기[편집 | 원본 편집]

8 참고 문헌[편집 | 원본 편집]