FastAPI 서버개발, FastAPI란 무엇인가 주요 특징 및 장점

FastAPI란 무엇인가?

FastAPI는 현대적인 웹 프레임워크로, Python으로 작성된 비동기 서버 프레임워크입니다. Python의 표준 타입 힌트를 사용하여 자동으로 API 문서를 생성하고, 데이터 유효성 검사 및 직렬화를 지원합니다. 2018년 Sebastián Ramírez에 의해 처음 개발된 FastAPI는 최고 속도를 지향하며, 명시적이고 간결한 코드 작성이 가능합니다.

FastAPI는 비동기 프로그래밍을 지원하여 높은 성능과 처리를 제공한다는 점에서 특별합니다. 또한, RESTful API 구축에 최적화되어 있으며, 자동 문서화 기능을 통해 Swagger UI와 ReDoc을 지원합니다.

FastAPI의 주요 특징

1. 높은 성능

FastAPI는 Starlette를 기반으로 하여, 비동기적으로 요청을 처리할 수 있어 성능이 뛰어납니다. 기본적으로 ASGI를 지원하여 25,000 이상의 동시 요청을 처리할 수 있습니다. 이는 Flask 등 전통적인 웹 프레임워크에 비해 월등한 성능을 제공합니다.

2. 입력 데이터 유효성 검사

FastAPI는 Pydantic을 내부적으로 사용하여 JSON 객체의 구조를 정의할 수 있습니다. 데이터 모델을 정의하고, 자동으로 유효성을 체크하며, 잘못된 데이터가 들어오면 적절한 오류 메시지를 반환합니다. 다음은 Pydantic 모델을 이용한 예제입니다.


from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    is_offer: Optional[bool] = None

3. 자동 문서화

FastAPI는 OpenAPI 사양을 기반으로 자동으로 API 문서를 생성합니다. API의 엔드포인트와 파라미터뿐 아니라 요청 및 응답의 데이터 모델도 포함되어, Swagger UI 및 ReDoc를 쉽게 사용할 수 있습니다. 서버를 실행하면 다음과 같은 기본 문서화 주소를 사용할 수 있습니다.

  • http://localhost:8000/docs (Swagger UI)
  • http://localhost:8000/redoc (ReDoc)

4. 비동기 지원

FastAPI에서는 비동기 프로그래밍을 쉽게 구현할 수 있습니다. asyncawait 키워드를 사용하여 비동기 작업을 수행할 수 있습니다. 예를 들어, 외부 API와의 통신이나 DB 쿼리 처리를 비동기 방식으로 처리할 수 있습니다.


from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    result = await fetch_item(item_id)  # 비동기 작업
    return {"item_id": item_id, "result": result}

5. 의존성 주입

FastAPI는 의존성 주입을 쉽게 처리할 수 있는 기능을 내장하고 있어 복잡한 비즈니스 로직을 깔끔하게 분리할 수 있습니다. 아래는 의존성 주입을 이용한 예제입니다.


from fastapi import Depends, FastAPI

app = FastAPI()

def get_query(x: int = 0):
    return x

@app.get("/items/")
async def read_items(q: int = Depends(get_query)):
    return {"q": q}

FastAPI의 장점

1. 빠른 개발 속도

FastAPI는 명확한 기능을 제공하여 개발자가 빠르게 프로토타입을 만들고, 운영 환경에 배포할 수 있도록 돕습니다. 데이터 유효성 검사 및 자동 문서화 덕분에 코드 작성 시 소요되는 시간을 절약할 수 있습니다. 이로 인해 팀은 비즈니스 로직에 집중할 수 있습니다.

2. 커뮤니티와 지원

FastAPI의 인기는 급속도로 증가하고 있으며, 이는 활발한 커뮤니티와 풍부한 문서화 덕분입니다. 많은 개발자들이 FastAPI를 사용하고 있으며, 다양한 예제와 라이브러리 보조를 통해 학습과 개발이 수월해졌습니다.

3. 완벽한 호환성

FastAPI는 Python 3.6 이상과 완벽하게 호환됩니다. 또한, Starlette 및 Pydantic과 함께 사용되므로 이미 해당 라이브러리를 사용하는 애플리케이션과의 통합이 용이합니다.

4. Swagger UI와 ReDoc을 통한 문서화

FastAPI는 API를 효율적으로 문서화할 수 있는 강력한 도구를 제공합니다. Swagger UI와 ReDoc은 개발자 및 API 사용자에게 사용하기 쉬운 인터페이스 제공하여, API를 신속히 이해하고 사용할 수 있도록 도와줍니다.

FastAPI 기본 사용 예제

다음은 FastAPI를 사용하여 기본 RESTful API를 구축하는 간단한 예제입니다.


from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "query": q}

위 코드는 FastAPI의 기본적인 구조로, 루트 URL(/)에 GET 요청을 보내면 {"Hello": "World"}라는 응답을 반환하며, 특정 아이템의 정보를 요청할 때는 /items/{item_id} 엔드포인트를 호출하여 해당 아이템의 정보를 반환합니다.

결론

FastAPI는 현대 Python 웹 개발에서 필수적인 프레임워크 중 하나로 자리 잡고 있습니다. 비동기적으로 작동하며 높은 성능을 발휘하고, 데이터 유효성 검사 및 자동 문서화 기능 덕분에 개발자에게 큰 장점을 제공합니다. 학습과 활용이 용이하며, 사용자가 증가함에 따라 발전하고 있는 FastAPI는 앞으로도 많은 프로젝트에서 중요한 역할을 할 것입니다.

FastAPI 서버개발, FastAPI와 다른 웹 프레임워크(Flask, Django 등) 비교

FastAPI란 무엇인가?

FastAPI는 현대적인 API를 구축하기 위해 작성된 Python 웹 프레임워크입니다. 고속(High Performance), 빠른 개발(Quick to Code), 더 나은 코드 품질(Better Code Quality) 및 단순한 해를 제공하기 위해 설계되었습니다. FastAPI는 Starlette을 기반으로 하고, Pydantic을 사용하여 데이터 유효성 검사를 수행합니다.

FastAPI는 선언적 프로그래밍 방식을 채택하여 코드의 가독성을 높이고, 자동으로 API 문서를 생성합니다. OpenAPI와 JSON Schema를 지원하므로, API 문서를 작성할 필요가 없습니다. 또한, 비동기 프로그래밍을 지원하여 높은 성능을 제공합니다.

다른 웹 프레임워크와의 비교

FastAPI를 이해하기 위해서 Flask와 Django와 같은 다른 웹 프레임워크와의 비교가 필요합니다. 이들은 각각의 장단점이 있으며, 특정 상황에서 FastAPI가 더 적합할 수 있습니다.

Flask

Flask는 Python의 마이크로 웹 프레임워크로, 매우 가볍고 쉽게 사용할 수 있는 구조를 가지고 있습니다. Flask는 필요한 기능을 추가하기 위해 다양한 확장 모듈을 제공하지만, 기본적으로는 최소한의 기능만 제공됩니다.

장점

  • 단순하고 경량화된 구조를 가지고 있어 배우기 쉽다.
  • 유연성과 확장성이 뛰어나 다양한 플러그인을 통해 필요한 기능을 추가할 수 있다.
  • 자유로운 구조의 코드를 작성할 수 있어 작은 프로젝트에 적합하다.

단점

  • Большинство функций нужно реализовать самостоятельно, такие как управление пользователями и аутентификация.
  • 비동기 처리 지원이 제한적이며, 대규모 애플리케이션에는 적합하지 않을 수 있다.

Django

Django는 기능이 많은 풀 스택 웹 프레임워크로, 개발자가 빠르고 쉽게 웹 애플리케이션을 만들 수 있도록 돕습니다. 다양한 내장 기능을 제공하며, ORM(Object Relational Mapping)을 통해 데이터베이스와의 상호작용을 간편하게 만들어 줍니다.

장점

  • 강력한 관리 패널과 인증 시스템을 기본으로 제공한다.
  • 확장성이 뛰어나며, 대규모 애플리케이션 개발에 적합하다.
  • ORM을 지원하여 데이터베이스와 쉽게 상호작용할 수 있다.

단점

  • 비교적 무거운 프레임워크로 리소스 소비가 많다.
  • 설정과 구조가 복잡하여 학습 곡선이 가파르다.

FastAPI

FastAPI는 이러한 Flask와 Django와는 달리, 비동기 웹 애플리케이션 개발에 매우 적합하고, 데이터 유효성 검사 및 자동 문서 생성 기능을 내장하고 있습니다. FastAPI는 다음과 같은 주요 장점을 제공합니다.

장점

  • 비동기 프로그래밍 지원: FastAPI는 asyncio 라이브러리를 기반으로 비동기 처리를 지원하므로, 높은 성능의 서비스 제공이 가능하다.
  • 자동 문서화: OpenAPI와 JSON Schema를 사용하여 API 문서가 자동으로 생성된다.
  • 데이터 유효성 검사: Pydantic을 통해 데이터의 스키마를 정의하고 유효성을 검증할 수 있다.

단점

  • 새로운 프레임워크로, 생태계가 다소 부족할 수 있다.
  • Pluggable Architectures를 지원하지 않기 때문에 특정 기능은 직접 구현해야 할 수도 있다.

예제 코드

아래는 FastAPI로 간단한 RESTful API를 구현한 예제 코드입니다.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello, FastAPI!"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

위 코드는 FastAPI를 사용하여 기본적인 API 서버를 구축한 것으로, 두 개의 엔드포인트를 제공합니다. 첫 번째 엔드포인트는 루트에서 “Hello, FastAPI!”를 반환하고, 두 번째 엔드포인트는 아이템 ID와 선택적 쿼리 파라미터를 받아 해당 정보를 반환합니다.

결론

FastAPI는 고속, 간편한 API 개발을 제공하여, 데이터 유효성 검사를 필요로 하는 현대적인 애플리케이션 개발에 매우 적합합니다. Flask와 Django는 각각의 장점과 단점을 가지고 있으며, 특정 상황에서 FastAPI가 보다 뛰어난 성능을 발휘할 수 있습니다. 따라서 프로젝트의 요구 사항에 따라 적합한 웹 프레임워크를 선택하는 것이 중요합니다.

FastAPI 서버개발, FastAPI에서 CORS 설정하기

날짜:

작성자: AI 기술지원팀

서론

FastAPI는 Python으로 웹 API를 만들기 위한 현대적이고 뛰어난 성능을 가진 웹 프레임워크입니다. Python의 비동기 기능을 활용하여 빠르고 효율적인 서버를 구축할 수 있습니다. 또한 FastAPI는 Swagger UI와 ReDoc을 통한 자동 문서화 기능을 제공하여 API 개발을 용이하게 합니다. 이런 혜택 덕분에 FastAPI는 현재 많은 개발자들 사이에서 인기를 끌고 있는 웹 프레임워크가 되었습니다.

이 글에서는 FastAPI에서 CORS(Cross-Origin Resource Sharing) 설정의 중요성과 구체적인 방법에 대해 탐구해 보겠습니다.

CORS란 무엇인가?

CORS는 Cross-Origin Resource Sharing의 약어로, 웹 애플리케이션이 서로 다른 출처의 리소스에 접근할 수 있게 허용하는 메커니즘입니다. 예를 들어, 클라이언트가 http://example.com에서 호스팅되는 웹 애플리케이션이라고 할 때, http://api.example.com에서 제공하는 API에 접근할 필요가 있다면 CORS가 필요합니다.

브라우저는 보안상의 이유로 한 출처에서 로드된 웹 페이지가 다른 출처의 리소스에 접근하는 것을 기본적으로 제한합니다. 이러한 제한을 우회하기 위해 CORS 설정이 필요합니다.

FastAPI에서 CORS 설정하기

FastAPI에서는 fastapi.middleware.cors 모듈을 통해 CORS 설정을 간편하게 할 수 있습니다. CORS 미들웨어를 사용하여 특정 도메인에서 오는 요청을 허용하거나 차단할 수 있습니다.

FastAPI에서 CORS를 설정하기 위해서는 다음 두 가지 단계를 수행해야 합니다.

  1. CORS 미들웨어 설치: CORS 미들웨어가 설치되어 있어야 합니다. FastAPI는 CORS 미들웨어를 기본적으로 제공하고 있습니다.
  2. CORS 미들웨어 적용: FastAPI 애플리케이션 인스턴스에 CORS 미들웨어를 추가합니다.

1. CORS 미들웨어 설치

FastAPI를 사용하려면 먼저 FastAPI와 관련 패키지를 설치해야 합니다. 아래의 명령어를 통해 FastAPI와 Uvicorn(ASGI 서버)를 설치할 수 있습니다:

pip install fastapi uvicorn

2. CORS 미들웨어 적용 예제

이제 FastAPI 애플리케이션을 생성하고 CORS 미들웨어를 적용하는 예제를 살펴보겠습니다:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

# CORS 설정
origins = [
    "https://example.com",  # 특정 도메인
    "http://localhost:8000"  # 로컬 개발용
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,  # 허용할 도메인 목록
    allow_credentials=True,
    allow_methods=["GET", "POST", "PUT", "DELETE"],  # 허용할 HTTP 메서드
    allow_headers=["*"],  # 허용할 헤더
)

@app.get("/")
async def root():
    return {"message": "Hello, World!"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

코드 설명

위 코드를 활용하여 FastAPI 애플리케이션을 설정합니다:

  • from fastapi import FastAPI: FastAPI 인스턴스를 생성하기 위한 모듈을 가져옵니다.
  • from fastapi.middleware.cors import CORSMiddleware: CORS 미들웨어를 가져옵니다.
  • origins: 이 리스트에는 허용할 도메인을 추가합니다. 개발 중에는 로컬 호스트와 같은 URL도 포함될 수 있습니다.
  • app.add_middleware: FastAPI 애플리케이션에 CORS 미들웨어를 추가합니다. 여기에 정의된 매개변수들은 CORS 동작을 정의합니다.
  • allow_credentials=True: 이 설정을 사용하면 고객 인증정보를 포함한 요청이 허용됩니다.
  • allow_methods: 이 리스트에는 허용할 HTTP 메서드(GET, POST, PUT, DELETE 등)를 정의합니다.
  • allow_headers=["*"]: 모든 요청 헤더를 허용합니다. 필요에 따라 구체적으로 정의할 수도 있습니다.
  • @app.get("/"): 루트 경로에 대한 GET 요청을 처리하는 엔드포인트입니다.
  • uvicorn.run(app, host="0.0.0.0", port=8000): Uvicorn을 통해 서버를 시작합니다.

3. CORS의 중요성

CORS는 여러 사용 사례에서 중요하게 작용합니다. 특히, 프런트엔드 개발 및 API 제공 시 웹 애플리케이션이 서로 다른 출처에서 데이터와 리소스를 공유할 수 있도록 돕습니다. 다음은 CORS가 필요한 몇 가지 주요 이유입니다:

  • 보안: CORS는 웹 애플리케이션이 잠재적으로 악의적인 요청으로부터 보호받을 수 있도록 도와줍니다.
  • 상호 운영성: 서로 다른 도메인 간에 API를 호출할 수 있어 서비스 간의 상호 작용을 가능하게 합니다.
  • 유연성: 다양한 클라이언트 애플리케이션(웹, 모바일 등)에서 API에 접근할 수 있도록 허용합니다.

4. CORS 관련 오류 처리

CORS 설정이 올바르지 않거나 허용되지 않는 출처에서 요청이 들어오는 경우 브라우저에서는 CORS 관련 오류 메시지를 표시합니다. 일반적인 오류와 그 해결 방법은 다음과 같습니다:

  • Access-Control-Allow-Origin 오류: 이 오류는 서버에서 요청한 출처를 허용하지 않을 때 발생합니다. CORS 미들웨어 설정에서 허용할 출처를 올바로 설정했는지 확인합니다.
  • Preflight 요청 오류: 특정 HTTP 메서드(예: PUT, DELETE 등)를 사용할 때 발생할 수 있습니다. 이러한 경우에는 서버가 OPTIONS 메서드에 대한 요청을 처리할 수 있도록 설정해야 합니다.

5. 다양한 CORS 설정하기

CORS 설정은 비즈니스 요구 사항에 따라 다양하게 구성할 수 있습니다. 일반적으로 다음과 같은 옵션을 설정할 수 있습니다:

  • 부분적 허용: 특정 도메인만 허용하려면 allow_origins에 해당 도메인만 추가합니다.
  • 모든 도메인 허용: 모든 도메인에서 요청을 허용하려면 allow_origins=["*"]로 설정합니다. 하지만, 보안상의 이유로 권장되지 않습니다.
  • 동적 허용: 요청 헤더를 기반으로 CORS 설정을 동적으로 처리할 수 있습니다. 이 경우, 요청의 출처를 확인하여 동적으로 허용 여부를 결정할 수 있습니다.

결론

FastAPI는 CORS 설정을 간단하게 처리할 수 있는 강력한 도구를 제공하여, 프런트엔드와 백엔드 간의 원활한 통신을 가능하게 합니다. 적절한 CORS 설정은 보안, 유연성 및 서비스 간의 상호 작용을 보장하는 데 필수적입니다. 따라서 FastAPI로 웹 서비스를 개발할 때 CORS 설정을 주의 깊게 다루어야 합니다.

이 글을 통해 FastAPI에서 CORS 설정을 간편하게 진행할 수 있는 방법을 배우셨기를 바랍니다. FastAPI를 사용하여 더욱 안전하고 효율적인 웹 애플리케이션을 개발해 보세요!

이 글이 도움이 되었다면 댓글로 의견을 남겨 주세요!

FastAPI 서버개발, React, Vue.js 또는 Angular와 FastAPI 통합하기

이 글에서는 FastAPI를 이용하여 효율적인 백엔드 서버를 개발하고, 이를 React, Vue.js 또는 Angular와 통합하는 방법에 대해 자세히 알아보겠습니다. FastAPI는 Python 기반의 현대적인 웹 프레임워크로, 고성능 API를 쉽게 구축할 수 있게 해줍니다. 이를 통해 클라이언트-서버 구조의 웹 애플리케이션을 구성하는 예제와 함께 설명드리겠습니다.

1. FastAPI 소개

FastAPI는 Starlette 기반으로 구축된 웹 프레임워크입니다. 비동기식 프로그래밍을 지원하며, 매우 높은 성능과 자동 문서화 기능을 제공합니다. 기본적 구조는 간단하며, 짧은 코드로 서버를 구축할 수 있습니다.

  • 비동기 요청 처리: FastAPI는 async/await 구문을 통해 비동기 처리를 쉽게 구현할 수 있습니다.
  • 자동 문서화: OpenAPI 및 JSON Schema를 기반으로 한 API 문서화가 자동으로 이루어집니다.
  • 타입 힌트 지원: Python의 타입 힌트를 활용하여 코드의 가독성과 유지 보수성을 높일 수 있습니다.

FastAPI 설치하기

pip install fastapi uvicorn

2. 기본 FastAPI 서버 구축하기

다음 예제는 기본적인 FastAPI 서버를 구축하는 방법을 보여줍니다. 웹 서버를 통해 간단한 ‘Hello World’ API를 만들어보겠습니다.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

위의 코드를 저장한 후, 다음 명령어로 서버를 실행할 수 있습니다:

uvicorn main:app --reload

localhost:8000에서 ‘Hello, World’ 메시지를 확인할 수 있습니다. 또한, http://localhost:8000/docs를 방문하면 Swagger UI를 통해 API 문서를 확인할 수 있습니다.

3. 데이터 모델링

FastAPI는 Pydantic을 사용하여 데이터 모델을 정의하고 검증할 수 있습니다. 다음은 사용자 정보를 처리하기 위한 사용자 모델을 정의하는 예제입니다.

from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str
    email: str

이제 이 모델을 사용하여 사용자 정보를 받는 API를 생성해 보겠습니다.

@app.post("/users/")
async def create_user(user: User):
    return user

위 코드를 통해 POST 요청으로 사용자 정보를 받아 JSON 형태로 응답합니다.

4. FastAPI와 React 통합하기

React는 페이지 기반의 사용자 인터페이스를 구축할 수 있는 JavaScript 라이브러리입니다. FastAPI와 React를 통합하여 클라이언트와 서버 간의 데이터를 주고받는 방법을 설명하겠습니다.

React 설치하기

React 프로젝트를 생성하기 위해 Create React App를 사용할 수 있습니다. 다음 명령어로 프로젝트를 생성합니다.

npx create-react-app my-app

API 호출하기

React를 사용하여 FastAPI 서버에 API 요청을 보내고 응답을 처리하는 방법은 다음과 같습니다.

import React, { useState, useEffect } from 'react';

function App() {
    const [user, setUser] = useState(null);

    const createUser = async () => {
        const response = await fetch('http://localhost:8000/users/', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({ id: 1, name: 'John Doe', email: 'john@example.com' }),
        });
        const data = await response.json();
        setUser(data);
    };

    return (
        

FastAPI와 React 통합 예제

{user &&
{JSON.stringify(user, null, 2)}

}

);
}

export default App;

위의 코드에서 버튼을 클릭하면 FastAPI 서버에 사용자 정보가 전송되고, 응답으로 받은 JSON 데이터가 화면에 출력됩니다.

5. FastAPI와 Vue.js 통합하기

Vue.js는 또 다른 인기 있는 프론트엔드 프레임워크로, FastAPI와 함께 사용할 수 있습니다.

Vue.js 설치하기

Vue CLI를 사용하여 새로운 Vue.js 프로젝트를 생성합니다. 다음 명령어로 프로젝트를 생성하세요.

vue create my-vue-app

API 호출하기

Vue.js에서 FastAPI로 POST 요청을 보내는 방법은 다음과 같습니다.

<template>
  <div>
    <h1>FastAPI와 Vue.js 통합 예제</h1>
    <button @click="createUser">사용자 생성</button>
    <pre v-if="user">{{ user }}</pre>
  </div>
</template>

<script>
export default {
  data() {
    return {
      user: null,
    };
  },
  methods: {
    async createUser() {
      const response = await fetch('http://localhost:8000/users/', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({ id: 1, name: 'Jane Doe', email: 'jane@example.com' }),
      });
      this.user = await response.json();
    },
  },
};
</script>

위 코드를 적용하고 버튼을 클릭하여 사용자 정보를 생성하면 FastAPI 서버에 POST 요청이 이루어집니다.

6. FastAPI와 Angular 통합하기

Angular는 또 다른 강력한 프론트엔드 프레임워크로, FastAPI와 통합하여 SPA(Single Page Application)을 만들 수 있습니다.

Angular 설치하기

Angular CLI를 사용하여 새로운 Angular 프로젝트를 생성합니다.

ng new my-angular-app

API 호출하기

Angular에서 FastAPI로 데이터를 전송하는 예시는 다음과 같습니다.

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  template: `
    

FastAPI와 Angular 통합 예제

{{ user | json }}

`,
})
export class AppComponent {
user: any;

async createUser() {
const response = await fetch('http://localhost:8000/users/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ id: 1, name: 'Chris Doe', email: 'chris@example.com' }),
});
this.user = await response.json();
}
}

위 코드를 통해 Angular 애플리케이션에서 FastAPI 서버에 사용자가 생성되는 요청을 보낼 수 있습니다.

7. 결론

이 글에서는 FastAPI를 이용하여 기본적인 백엔드 서버를 구축하고, React, Vue.js, Angular와 통합하는 방법을 알아보았습니다. FastAPI는 빠르고 효율적인 웹 API 개발을 가능하게 하며, 다양한 프론트엔드 프레임워크와 쉽게 통합할 수 있는 장점을 가지고 있습니다. 이번 강좌를 통해 FastAPI와 클라이언트 측 프레임워크 간의 상호작용을 이해하고, 응용 프로그램의 아키텍처 설계에 대한 통찰을 얻으시길 바랍니다.

FastAPI 서버개발, Jinja, 반복문

FastAPI는 웹 API 개발을 위해 설계된 현대적이고 빠른 프레임워크로, Python으로 작성되어 있으며 Starlette와 Pydantic을 기반으로 하고 있습니다. FastAPI는 비동기 프로그래밍을 지원하여 높은 성능을 자랑하며, 코드 작성 시 자동으로 OpenAPI와 JSON Schema를 생성해줍니다. 이번 글에서는 FastAPI 서버 개발 방법을 다루고, Jinja 템플릿 언어를 사용하여 HTML을 구성하는 방법을 설명하겠습니다. 또한, 반복문을 활용하여 동적으로 HTML 콘텐츠를 생성하는 방법을 함께 알아보겠습니다.

1. FastAPI 소개

FastAPI는 Python 3.6 이상에서 사용할 수 있는 웹 프레임워크로, RESTful API를 간편하게 구축할 수 있게 해줍니다. FastAPI의 가장 큰 특징은 다음과 같습니다.

  • 비동기 지원: FastAPI는 async/await 구문을 지원하여 비동기 요청을 처리할 수 있습니다.
  • 자동 문서화: 작성한 API에 대해 자동으로 OpenAPI 문서를 생성합니다.
  • 데이터 검증: Pydantic을 사용하여 API 요청 및 응답 데이터의 검증이 용이합니다.

2. FastAPI 설치

FastAPI를 설치하기 위해서는 Python이 설치되어 있어야 하며, 다음과 같은 명령어를 사용하여 설치할 수 있습니다.

pip install fastapi uvicorn

3. FastAPI 기본 설정

FastAPI를 처음 설정해보겠습니다. 아래는 기본적인 FastAPI 서버의 예제입니다.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

위의 코드는 FastAPI 서버를 생성하고, 루트 경로(“/”)에 GET 요청이 들어오면 “Hello, World”라는 JSON 응답을 생성합니다. 이 코드를 실행하기 위해서는 다음 명령어를 사용합니다.

uvicorn main:app --reload

여기서 “main”은 Python 파일의 이름이며, “app”은 FastAPI 인스턴스 이름입니다. –reload 플래그를 사용하면 코드 변경 시 자동으로 서버를 재시작합니다.

4. Jinja 템플릿 소개

Jinja는 Python 웹 프레임워크에서 널리 사용되는 템플릿 엔진입니다. Jinja를 사용하면 HTML 파일과 Python 코드를 분리하여 웹 애플리케이션의 관리 및 유지보수를 용이하게 할 수 있습니다. FastAPI는 Jinja를 통해 HTML 템플릿을 렌더링할 수 있습니다.

5. FastAPI에서 Jinja 사용하기

FastAPI에서 Jinja를 사용하기 위해 먼저 Jinja2를 설치해야 합니다.

pip install jinja2

다음으로, Jinja 템플릿을 사용하기 위한 FastAPI의 기본 설정을 살펴보겠습니다.


from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates

app = FastAPI()

templates = Jinja2Templates(directory="templates")

@app.get("/", response_class=HTMLResponse)
async def read_root(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})

여기서 “templates”라는 디렉토리를 생성하고 그 안에 “index.html” 파일을 만들어야 합니다. “TemplateResponse”를 사용하여 Jinja 템플릿을 렌더링하고 있습니다.

6. Jinja 템플릿에 반복문 사용하기

Jinja에서는 Python의 리스트나 딕셔너리와 같은 iterable 객체를 쉽게 반복할 수 있는 기능을 제공합니다. 아래는 Python 리스트를 반복하여 HTML 리스트를 생성하는 예제입니다.


@app.get("/items/", response_class=HTMLResponse)
async def read_items(request: Request):
    items = ["Apple", "Banana", "Cherry"]
    return templates.TemplateResponse("items.html", {"request": request, "items": items})

위 코드에서 “items” 리스트를 FastAPI 경로(“/items/”)에 대한 GET 요청에 대한 응답으로 HTML 템플릿에 전달합니다. 이제 “items.html” 파일을 생성하여 Jinja 반복문을 사용하여 리스트 항목을 출력해보겠습니다.






    
    Items List


    

과일 목록

    {% for item in items %}
  • {{ item }}
  • {% endfor %}

위의 “items.html” 파일에서 Jinja의 {% for %} 구문을 사용하여 “items” 리스트의 각 항목을 반복하여 출력하고 있습니다. 이를 통해 웹 페이지에 동적으로 HTML 콘텐츠를 생성할 수 있습니다.

7. Jinja의 조건문 사용하기

반복문과 함께 Jinja에서는 조건문도 사용할 수 있습니다. 예를 들어, 과일 목록에서 특정 조건에 따라 다른 내용을 출력하도록 설정할 수 있습니다.






    
    Items List


    

과일 목록

    {% for item in items %}
  • {{ item }}
  • {% if item == "Banana" %} (이것은 바나나입니다!) {% endif %} {% endfor %}

위의 예제에서는 “item”이 “Banana”일 때, 추가 메시지를 출력하도록 설정하였습니다. Jinja의 조건문을 통해 HTML 템플릿 내에서 동적인 콘텐츠를 쉽게 제어할 수 있습니다.

8. FastAPI와 Jinja를 활용한 전체 예제

지금까지 배운 내용을 바탕으로 FastAPI와 Jinja를 활용한 전체 예제를 만들어 보겠습니다. 프로젝트 폴더 구조는 다음과 같습니다.


project/
│
├── main.py
└── templates/
    ├── index.html
    └── items.html

이제 “main.py” 파일에 전체 코드를 작성해보겠습니다.


from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates

app = FastAPI()
templates = Jinja2Templates(directory="templates")

@app.get("/", response_class=HTMLResponse)
async def read_root(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})

@app.get("/items/", response_class=HTMLResponse)
async def read_items(request: Request):
    items = ["Apple", "Banana", "Cherry"]
    return templates.TemplateResponse("items.html", {"request": request, "items": items})

이제 “index.html” 파일과 “items.html” 파일은 이전에 설명한 내용과 동일하게 작성하십시오. FastAPI 서버를 실행한 후, “/” 경로에 접속하여 메인 페이지를 확인하고 “/items/” 경로에 접속하여 과일 목록을 볼 수 있습니다.

9. 결론

이번 강좌에서는 FastAPI를 사용하여 웹 API를 개발하는 방법과 Jinja 템플릿을 통해 HTML을 동적으로 생성하는 방법, 그리고 반복문과 조건문을 활용하여 보다 복잡한 UI를 구성하는 방법을 배웠습니다. FastAPI의 매력은 그 간결함과 비동기 처리 능력, 그리고 자동 문서화 기능에 있습니다. 앞으로 FastAPI와 Jinja를 활용하여 더욱 다양한 웹 애플리케이션을 개발해보시길 바랍니다.

10. 다음 단계

더 나아가 FastAPI의 고급 기능인 유저 인증, 데이터베이스 통합, 비동기 작업 등을 학습하여 실무에 적용할 수 있는 방향으로 발전시켜 보십시오. FastAPI의 공식 문서도 참고하시면 많은 도움이 될 것입니다.

© 2023 Your Name. All rights reserved.