세바스티안 라미레즈(Sebastián Ramírez)가 2018년에 발표한 모던 파이썬 웹 프레임워크, FastAPI는 Flask와 Django를 빠르게 따라잡으며 성장했습니다. GitHub 스타 수를 기준으로 2023년 말에 FastAPI가 Flask를 앞지르면서 두 번째로 인기 있는 파이썬 웹 프레임워크가 되었습니다.
마이크로프레임워크(Microframework)는 최소한의 기능만을 제공하는 웹 애플리케이션 프레임워크. 즉, 필요한 핵심 기능들만 포함하고, 추가적인 기능들은 사용자가 필요에 따라 확장하거나 외부 라이브러리로 보완할 수 있는 프레임워크를 의미합니다. 일반적인 웹 프레임워크에 비해 경량화된 형태이며, 복잡한 기능이나 미리 정의된 구조가 적기 때문에 개발자가 자유롭게 설계를 할 수 있다는 장점이 있습니다.
마이크로프레임워크는 다음과 같은 특징을 가집니다:
1. 간결함: 불필요한 기능을 배제하고 기본적인 기능만 제공하므로 코드가 간단하고 유지보수하기 쉽습니다. 2. 확장 가능성: 필요한 기능(예: 데이터베이스 연결, 인증, 세션 관리 등)을 플러그인 형태로 추가할 수 있습니다. 3. 경량성: 복잡한 설정 없이 빠르게 실행 가능한 경량 구조를 가집니다.
WSGI(Web Server Gateway Interface)는 파이썬을 위한 웹 서버와 웹 애플리케이션 간의 인터페이스입니다. WSGI는 파이썬에서 웹 애플리케이션을 개발할 때 표준 인터페이스 역할을 하여, 다양한 웹 서버와 애플리케이션이 호환되도록 돕습니다.
동기식 프레임워크는 요청을 처리할 때 한 번에 하나씩 순차적으로 처리하는 방식입니다. 요청을 받아들인 후 그 요청이 완전히 처리될 때까지 다른 요청을 처리하지 않고 대기합니다. 즉, 각 요청 처리가 완료되기 전까지 다음 요청을 처리하지 않으므로, 많은 요청이 들어오면 성능 병목이 생길 수 있습니다. 그러나 코드가 단순하고 직관적이기 때문에 개발자가 관리하기 쉽습니다.
WSGI 기반 동기식 프레임워크의 특징
1. 동기식 처리 방식: 요청이 들어오면 서버는 그 요청을 처리한 후 응답을 반환하기 전까지 다른 작업을 수행하지 않습니다. 2. 간단한 구조: 동기식 코드는 비동기 코드보다 상대적으로 간단하며, 개발자가 논리를 작성하기 더 쉽습니다. 3. 멀티스레드/멀티프로세스: 성능을 개선하기 위해 동시성을 제공할 수 있지만, 동기식 방식 자체는 하나의 요청에 대해 하나의 스레드나 프로세스를 사용합니다. 4. 범용성: WSGI는 파이썬 웹 애플리케이션 표준이므로 다양한 웹 서버와 프레임워크가 WSGI를 지원합니다. 덕분에 WSGI 기반의 동기식 프레임워크는 여러 웹 서버와 호환됩니다.동기식 프레임워크의 한계
동기식 프레임워크는 요청을 순차적으로 처리하기 때문에, 다수의 동시 요청을 효율적으로 처리하는 데 한계가 있을 수 있습니다. 특히 I/O 작업이 많은 환경(예: 데이터베이스 쿼리, 외부 API 요청 등)에서 비동기 방식보다 성능이 떨어질 수 있습니다. 이 경우에는 비동기 프레임워크나 비동기 처리 기법을 도입하는 것이 더 적합할 수 있습니다.
요약하자면, WSGI 기반 동기식 프레임워크는 파이썬에서 전통적으로 널리 사용되는 웹 애플리케이션 개발 방식으로, 간단하고 직관적인 코드 작성을 지원하지만, 동시성 처리에 있어서는 성능상의 한계가 있을 수 있는 방식입니다.
jsonify() 함수로 데이터를 JSON으로 변환해 반환하며, 최신 버전에서는 딕셔너리를 자동으로 JSON으로 변환합니다.request.args 객체를 통해 쿼리 매개변수를 처리합니다. 쿼리 매개변수는 딕셔너리 형태로 저장됩니다.request.json에 저장합니다.request.headers 객체에 저장하며, 대소문자를 구분하지 않습니다.| 프레임워크 | 장점 | 단점 |
|---|---|---|
| Django | 풀스택 프레임워크, 강력한 ORM, 보안 기능 | 학습 곡선이 가파름, 소규모 프로젝트에 과도함 |
| Flask | 가볍고 유연성 있음, 확장성 높음 | 대규모 프로젝트에 구조화 어려움, 비동기 지원 부족 |
| FastAPI | 매우 빠른 성능, 자동 API 문서, 비동기 지원 | 커뮤니티 규모가 작음, 일부 기능에 추가 라이브러리 필요 |
세 프레임워크는 각각의 특징과 장단점이 있으며, 프로젝트의 규모와 요구 사항에 따라 선택이 달라집니다. FastAPI는 비동기 지원과 빠른 성능을 필요로 하는 API 프로젝트에 적합하며, Django는 큰 규모의 데이터베이스 및 완벽한 웹 애플리케이션을 개발하는 데 유리합니다. Flask는 간단하고 유연한 프로젝트에 적합하며, 확장 가능한 마이크로프레임워크로 사용할 수 있습니다.
FastAPI로 작성한 API는 리액트나 Vue.js, Svelte와 같은 Frontend 웹 프레임워크에서 사용할 수 있고 안드로이드나 아이폰 앱에서도 사용할 수 있다. 만약 장고나 플라스크로 웹 서비스를 만들었다면 이에 대응하는 안드로이드나 아이폰 앱을 위한 API 개발을 따로 해야 하지만 FastAPI는 한번 만든 API를 여러 클라이언트에서 변경없이 사용할 수 있다.
FastAPI는 현대적이고 빠르며 고성능의 웹 프레임워크로, Python 3.8+에서 파이썬 표준 타입 힌트를 사용하여 API를 쉽게 빌드할 수 있게 도와줍니다.
Python 버전 3.10을 설치하기 위해 다음 명령어를 사용하세요:
conda create -n fastapi python=3.10
가상 환경을 활성화하려면 다음 명령어를 실행:
# conda activate <환경명>
conda activate fastapi
FastAPI를 설치하려면 다음 명령어를 실행:
pip install fastapi
다음은 FastAPI 서버를 실행하기 위한 예시 코드:
from fastapi import FastAPI, Request
import uvicorn
app = FastAPI()
@app.get("/")
def home(request: Request):
return {"name": "Hello World"}
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8080)
서버를 실행하려면 다음 명령어를 실행:
python app.py
웹 브라우저에서 localhost:8080에 접속하여 결과를 확인할 수 있습니다.
FastAPI로 만든 백엔드 서버에 데이터를 요청하고 응답을 받아서 처리하는 프로그램을 개발하기 위해서는 프론트엔드 프레임워크가 필요하다. 프론트엔드 프레임워크로 스벨트(Svelte)를 사용할 것이다. 이번 장에서는 Svelte 개발에 필요한 환경을 구성해 보자.
: React, Vue.js 등과 비슷한 역할을 하는 프론트엔드용 웹 프레임워크이다. 2016년에 Rich Harris에 의해 최초 발표되었으며 현재 꾸준한 인기를 얻고 있다.
Svelte를 사용하려면 Node.js가 필요하다. Node.js는 자바스크립트로 애플리케이션을 개발할 수 있게 해주는 도구이다. 명령창에서 아래 명령어로 Node.js가 설치되었는지 확인하자.
c:\ > node -v
만약 설치되지 않았다면 Node.js 공식 사이트에서 최신 버전을 다운로드하여 설치하자.
Node.js가 설치되면 npm도 함께 설치된다. Svelte는 npm을 사용해 설치할 수 있다. 아래 명령을 입력하여 Svelte 프로젝트를 생성하자.
(myapi) c:/projects/myapi> npm create vite@latest frontend -- --template svelte
(myapi) c:/projects/myapi/frontend> npm install
Svelte 애플리케이션을 실행 명령어:
(myapi) c:/projects/myapi/frontend> npm run dev
Svelte는 기본적으로 자바스크립트 타입을 체크하도록 설정되어 있다. 파이보 프로젝트는 타입스크립트를 사용하지 않기 때문에 이 설정을 끄도록 하자. jsconfig.json 파일을 열고 checkJs 옵션을 false로 설정한다.
{
"compilerOptions": {
"checkJs": false
}
}
VSCode 터미널에서 다음 명령어로 Svelte 서버를 실행하자:
frontend % npm run dev
브라우저에서 http://127.0.0.1:5173/ 주소를 입력하면 Svelte 애플리케이션이 실행된다.
Svelte 코드를 실시간으로 변환하고 브라우저에서 확인하려면 Node.js 서버가 필요하다. 하지만 운영 단계에서는 Svelte 코드가 빌드되어 순수 HTML, CSS, Javascript 파일로 배포되므로 Node.js 서버는 필요 없다.