문서의 각 단락이 어느 리비전에서 마지막으로 수정되었는지 확인할 수 있습니다. 왼쪽의 정보 칩을 통해 작성자와 수정 시점을 파악하세요.

Flask | |
개발자 | 아르민 로나허 |
최초 공개 | 2010년 4월 1일 |
프로그래밍 언어 | Python |
라이선스 | BSD-3-Clause License |
유형 | 마이크로 웹 프레임워크 |
공식 웹사이트 | https://palletsprojects.com/p/flask/ |
상세 정보 | |
설치 방법 | pip install flask |
사용처 | Pinterest API 오픈나무 위키독스 |
특징 | 가볍고 코드가 단순함 다양한 웹 엔진과 연동 가능 확장 기능이 많음 API 서버 제작에 편리함 Django에 비해 높은 커스터마이징 가능성 |
관련 기술 | Django FastAPI Bottle Sinatra |
여담 | 원래 Bottle의 패러디 만우절 프로젝트로 시작됨. 정식 명칭은 라틴어 flascō(병)에서 유래함. Ruby의 Sinatra에 해당하는 Python 웹 프레임워크로 간주됨. |

Flask는 파이썬으로 작성된 마이크로 웹 프레임워크이다. 개발자는 아르민 로나허이며, 2010년 4월 1일에 최초로 공개되었다. 기본적인 웹 서버 구축에 필요한 핵심 기능만을 제공하며, 추가적인 기능은 확장 모듈을 통해 선택적으로 적용할 수 있는 것이 특징이다. 이로 인해 개발자는 프로젝트의 필요에 맞게 유연하게 프레임워크를 구성할 수 있다.
Flask는 BSD 라이선스 하에 배포되는 오픈 소스 소프트웨어이다. 공식 웹사이트는 팔레츠 프로젝트(Pallets Projects)에서 관리하고 있다. 풀스택 프레임워크인 장고와 자주 비교되지만, Flask는 최소주의 철학을 따르며 간결함과 확장성을 중시한다. 이는 작은 규모의 프로젝트나 API 서버를 빠르게 개발하는 데 매우 적합하게 만든다.

Flask는 마이크로 웹 프레임워크로 분류된다. 이는 풀 스택 프레임워크인 Django와 대비되는 개념으로, 핵심 기능만을 최소한으로 제공한다는 철학을 반영한다. 따라서 데이터베이스 추상화 계층(ORM), 폼 유효성 검사, 사용자 인증과 같은 고수준의 도구들은 기본적으로 포함하지 않는다. 대신, 개발자가 필요에 따라 이러한 기능들을 확장 기능(익스텐션)을 통해 선택적으로 조합하여 사용하도록 설계되었다. 이러한 접근 방식은 프레임워크 자체를 매우 가볍고 유연하게 만든다.
Flask의 또 다른 주요 특징은 간결하고 직관적인 API 설계에 있다. 단 몇 줄의 코드로도 웹 서버를 구동할 수 있으며, 데코레이터를 이용한 라우팅 정의는 코드의 가독성을 매우 높인다. 이는 특히 RESTful API를 빠르게 개발해야 하는 상황이나, 소규모 프로젝트를 시작할 때 큰 장점으로 작용한다. 내장된 개발 서버와 디버거는 개발 과정을 더욱 편리하게 지원한다.
Flask는 WSGI 표준을 따르기 때문에 Gunicorn이나 uWSGI와 같은 다양한 웹 서버 게이트웨이 인터페이스와 호환된다. 또한, Jinja2 템플릿 엔진을 기본 탑재하여 동적인 HTML 페이지 생성을 지원한다. 이러한 설계는 개발자에게 핵심 웹 개발 도구를 제공하면서도, 데이터베이스 연결(SQLAlchemy), 사용자 세션 관리(Flask-Login), 폼 처리(WTForms) 등과 같은 복잡한 부가 기능의 선택과 구현은 전적으로 개발자의 손에 맡긴다.
결국 Flask의 특징은 '필요한 것만 골라 쓸 수 있는 유연성'과 '간결한 코드 작성'에 있다. 이는 학습 곡선이 비교적 낮고, 프로젝트의 규모와 복잡도에 맞춰 프레임워크를 자유롭게 구성할 수 있게 해준다. 이러한 특성 덕분에 프로토타이핑, 마이크로서비스, API 서버 개발에 널리 채택되고 있다.

Flask는 마이크로 웹 프레임워크의 특성상 가볍고 유연하여 다양한 웹 개발 시나리오에 적합하다. 특히 프로토타입 개발이나 소규모 프로젝트에서 빠르게 서버를 구축해야 할 때, 그리고 개발자가 특정 구성 요소를 직접 선택하고 제어하고자 할 때 널리 사용된다.
주요 사용처로는 API 서버 개발이 가장 대표적이다. JSON 형식의 데이터를 주고받는 RESTful API를 간결한 코드로 빠르게 구현할 수 있어, 모바일 애플리케이션의 백엔드나 싱글 페이지 애플리케이션(SPA)의 서버로 자주 활용된다. 또한, 데이터 시각화 대시보드, 마이크로서비스 아키텍처의 개별 서비스, 간단한 CRUD 기능을 가진 관리자 페이지를 만드는 데에도 적합하다.
다수의 대규모 서비스에서도 Flask는 핵심적인 역할을 담당한다. 예를 들어, 소셜 미디어 플랫폼 Pinterest는 그 API 서버에 Flask를 사용한 것으로 알려져 있다. 국내에서는 위키독스와 같은 학습 플랫폼이 Flask로 구축된 대표적인 사례이다. 이러한 사례들은 Flask가 단순한 소규모 프로젝트를 넘어, 확장성 있는 구조로 성장할 수 있는 기반을 제공함을 보여준다.
사용처 분야 | 주요 특징 및 예시 |
|---|---|
API 서버 | RESTful API, 모바일 앱 백엔드, SPA 백엔드 구축에 최적화됨. |
프로토타입/소규모 웹앱 | 빠른 개발과 배포가 가능하여 아이디어 검증에 적합함. |
마이크로서비스 | 특정 기능을 담당하는 경량 서비스 구성 요소로 사용됨. |
데이터 대시보드 | 데이터 분석 결과를 웹 기반으로 시각화하는 데 활용됨. |
교육 및 학습 | 웹 프레임워크의 기본 개념을 익히기 위한 교재와 예제에 많이 등장함. |

Flask는 파이썬 패키지 관리자인 pip를 통해 간편하게 설치할 수 있다. 대부분의 경우, 터미널이나 명령 프롬프트에서 다음 명령어 한 줄을 실행하는 것으로 설치가 완료된다.
Flask를 설치하기 전에는 시스템에 파이썬과 pip가 미리 설치되어 있어야 한다. 최신 버전의 파이썬을 설치하면 일반적으로 pip도 함께 포함된다. 설치가 완료된 후에는 flask --version 명령어를 통해 정상적으로 설치되었는지 버전을 확인할 수 있다.
가상 환경을 사용하는 것이 권장되는 방법이다. venv나 virtualenv 같은 도구로 프로젝트별 가상 환경을 생성하고 활성화한 후, 그 안에서 Flask를 설치하면 프로젝트 간 의존성 충돌을 방지할 수 있다. 이는 특히 여러 프로젝트를 동시에 관리할 때 유용한 방법이다.
Flask는 의존성 패키지들을 함께 설치한다. 주요 의존 패키지로는 Werkzeug와 Jinja가 있으며, 이들은 각각 WSGI 유틸리티 라이브러리와 템플릿 엔진의 역할을 담당한다. 따라서 Flask 설치 명령어 하나로 웹 애플리케이션 개발에 필요한 핵심 도구들이 모두 준비된다.

Flask의 가장 큰 장점 중 하나는 간결한 코드로 웹 애플리케이션을 빠르게 시작할 수 있다는 점이다. 기본적인 애플리케이션 구조는 단일 파일로도 구성이 가능하며, 몇 줄의 코드만으로 웹 서버를 실행할 수 있다. 이는 마이크로 웹 프레임워크의 특징을 잘 보여준다.
가장 기본적인 예제는 다음과 같다. 이 코드는 루트 URL(/)로 접속했을 때 'Hello World!'라는 문자열을 반환하는 간단한 웹 서버를 생성한다.
```python
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
```
이 예제에서 Flask 클래스를 임포트하고 애플리케이션 인스턴스를 생성한다. @app.route() 데코레이터는 특정 URL 경로와 함수를 연결하는 라우팅을 담당한다. app.run() 메서드를 호출하면 내장된 개발용 웹 서버가 실행되어 애플리케이션을 로컬에서 테스트할 수 있다.
보다 실용적인 예로, 동적 URL을 처리하거나 HTML 템플릿을 렌더링하는 방법이 있다. Flask는 Jinja 템플릿 엔진을 내장하고 있어, 변수를 전달하여 동적인 웹 페이지를 쉽게 생성할 수 있다. 또한, GET 및 POST 요청을 처리하여 사용자 입력을 받는 폼 기능도 구현 가능하다. 이러한 기본 예제들을 확장하여 복잡한 API 서버나 웹 애플리케이션으로 발전시킬 수 있는 토대를 제공한다.

Flask는 핵심 기능을 최소화한 마이크로 웹 프레임워크로 설계되어, 많은 고급 기능이 기본적으로 포함되어 있지 않다. 이러한 설계 철학은 개발자가 프로젝트의 필요에 따라 자유롭게 기능을 선택하고 조합할 수 있도록 하기 위함이다. 이에 따라 Flask 생태계에는 데이터베이스 연동, 사용자 인증, 폼 처리, API 문서화 등 다양한 기능을 제공하는 수많은 공식 및 서드파티 확장 기능들이 개발되어 있다. 이러한 확장 기능들은 표준화된 방식으로 Flask 애플리케이션에 통합되어, 복잡한 기능도 비교적 쉽게 구현할 수 있게 해준다.
주요 확장 기능으로는 ORM인 SQLAlchemy를 쉽게 통합할 수 있는 Flask-SQLAlchemy, 사용자 세션 관리와 로그인/로그아웃 기능을 제공하는 Flask-Login, 웹 폼 생성을 단순화하는 Flask-WTF, RESTful API 구축을 위한 Flask-RESTful 등이 널리 사용된다. 또한, 관리자 인터페이스 생성(Flask-Admin), 메일 발송(Flask-Mail), 캐싱(Flask-Caching)과 같은 확장 기능들도 프로젝트의 요구사항에 따라 선택적으로 적용할 수 있다.
이러한 확장 기능들은 대부분 pip를 통해 간편하게 설치할 수 있으며, Flask 애플리케이션 인스턴스에 초기화하는 방식으로 사용한다. 이는 개발자로 하여금 Django와 같은 풀 스택 프레임워크가 제공하는 통합된 구조에 얽매이지 않고, 필요한 구성 요소만으로 가볍고 효율적인 웹 애플리케이션 또는 API 서버를 구축할 수 있는 유연성을 부여한다. 결과적으로 Flask는 확장 기능 생태계를 통해 작은 규모의 프로젝트부터 대규모 엔터프라이즈 애플리케이션까지 폭넓게 적용 가능한 프레임워크로 자리 잡았다.

Flask와 Django는 모두 파이썬으로 웹 애플리케이션을 구축하기 위한 프레임워크이지만, 설계 철학과 사용 방식에서 뚜렷한 차이를 보인다. 가장 큰 차이는 Flask가 마이크로 프레임워크를 표방하는 반면, Django는 "배터리 포함" 방식을 채택한 풀 스택 프레임워크라는 점이다. 이는 Flask가 최소한의 핵심 기능만을 제공하고, 데이터베이스 연동이나 인증과 같은 추가 기능은 개발자가 필요한 확장 모듈을 선택하여 조합하도록 설계되었음을 의미한다. 반면 Django는 웹 개발에 필요한 대부분의 구성 요소(ORM, 관리자 인터페이스, 인증 시스템 등)를 자체적으로 내장하고 있어, 처음부터 포괄적인 구조를 제공한다.
이러한 설계 차이는 프로젝트의 규모와 복잡도에 따라 적합한 도구를 선택하는 기준이 된다. Flask는 작고 유연한 서비스, 특히 마이크로서비스 아키텍처나 단순한 API 서버를 빠르게 구축할 때 강점을 발휘한다. 개발자는 필요한 라이브러리만 선택하여 가볍게 시작할 수 있으며, 애플리케이션 구조를 자유롭게 설계할 수 있다. 반면 Django는 대규모이고 복잡한 웹 애플리케이션(예: 콘텐츠 관리 시스템, 전자상거래 플랫폼)을 체계적으로 구축할 때 유리하다. 내장된 강력한 기능들과 명확한 규칙(예: MTV 패턴) 덕분에 개발 생산성이 높고, 유지보수가 용이한 코드베이스를 유지할 수 있다.
두 프레임워크의 선택은 궁극적으로 개발 팀의 선호도와 프로젝트 요구사항에 달려 있다. Flask는 학습 곡선이 비교적 완만하고, 미니멀한 접근 방식을 선호하는 개발자에게 적합하다. Django는 풍부한 기능과 안정적인 생태계를 중시하며, 빠르게 표준화된 방식으로 제품을 출시해야 하는 상황에서 더 빛을 발한다. 최근에는 FastAPI와 같은 현대적인 비동기 프레임워크도 등장하며 파이썬 웹 개발 생태계의 선택지가 더욱 다양해졌다.

Flask는 그 자체로는 핵심 기능만 제공하는 마이크로 프레임워크이지만, 생태계 내에는 이를 보완하거나 함께 사용되는 다양한 관련 도구와 프레임워크가 존재한다. Flask의 확장 기능(Flask-Extension)들은 공식적으로 인증된 패키지들로, 데이터베이스 연동, 사용자 인증, 폼 처리, API 문서화 등 특정 기능을 쉽게 추가할 수 있게 해준다. 대표적인 예로는 데이터베이스 ORM을 위한 Flask-SQLAlchemy, 사용자 세션 관리를 위한 Flask-Login, RESTful API 구축을 위한 Flask-RESTful 등이 있다.
Flask와 자주 비교되는 다른 파이썬 웹 프레임워크들도 중요한 관련 도구이다. 대표적인 풀스택 프레임워크인 Django는 많은 기능을 내장한 반면, Flask는 최소한의 핵심을 제공한다는 철학적 차이가 있다. 비동기 처리를 중시하는 현대적 API 서버 개발에는 FastAPI가 인기를 얻고 있으며, 이는 Flask의 간결함과 비동기 지원의 장점을 결합한 것으로 볼 수 있다. 마이크로 프레임워크 계열에서는 Bottle이 Flask와 유사한 접근 방식을 취한다.
개발 생산성을 높이는 도구들도 널리 사용된다. 가상 환경 관리 도구인 venv나 virtualenv는 프로젝트별 의존성을 격리하는 데 필수적이다. 패키지 관리에는 pip가 표준으로 사용되며, 의존성 파일은 주로 requirements.txt를 통해 관리한다. 또한, WSGI 호환 웹 서버인 Gunicorn이나 uWSGI는 개발 서버를 넘어 실제 프로덕션 환경에서 Flask 애플리케이션을 서비스하기 위해 함께 배포된다.

Flask는 원래 2010년 만우절에 시작된 패러디 프로젝트였다. 당시 개발자 아르민 로나허는 파이썬의 또 다른 마이크로 프레임워크인 Bottle을 희화화한 프로젝트로 Flask를 공개했다. 이 유머러스한 시작은 이름에서도 드러나는데, Flask와 Bottle 모두 '병'을 의미하는 단어에서 유래했다. Flask는 라틴어 'flascō'에서, Bottle은 영어 'bottle'에서 각각 차용한 것이다.
이러한 가벼운 시작과는 달리, Flask는 빠르게 실용적인 도구로 발전하여 마이크로 웹 프레임워크의 대표주자 중 하나가 되었다. 이는 Ruby 진영의 Sinatra와 그 철학을 공유한다고 볼 수 있다. 두 프레임워크 모두 최소한의 핵심 기능을 제공하며, 개발자가 필요에 따라 확장 기능을 선택하여 조합하는 방식을 지향한다.
Flask의 성공은 단순함과 유연성에 있다. 핵심은 매우 작고 간결하게 유지되면서도, 풍부한 생태계를 통해 데이터베이스 연동, 폼 처리, 인증 등 거의 모든 웹 개발 요구사항을 충족할 수 있는 확장 라이브러리가 제공된다. 이로 인해 초기에는 장난스러운 프로젝트로 시작했음에도, 현재는 API 서버 개발부터 복잡한 웹 애플리케이션 구축에 이르기까지 폭넓게 사용되는 중요한 도구가 되었다.
