1. FastAPI란?
FastAPI는 Python으로 작성된 웹 프레임워크로, RESTful API와 GraphQL 같은 현대적인 웹 API를 빠르고 효율적으로 개발할 수 있도록 설계되었습니다. 비동기 처리를 지원하여 대규모 트래픽을 처리하는 데 적합하며, 자동 문서화(OpenAPI/Swagger UI) 기능을 제공합니다.
특징
- 자동 API 문서화: OpenAPI를 통해 Swagger UI를 자동으로 생성.
- 타입 힌팅 지원: 코드 자동완성과 데이터 유효성 검사를 지원.
- 비동기 프로그래밍: 실시간 및 고성능 애플리케이션 개발 가능.
- Python 타입 힌트 활용: 코드 가독성 향상과 안정성 강화.
2. FastAPI vs Flask vs Django
FastAPI
- 장점: 최신 Python 기반 프레임워크로 비동기 프로그래밍과 자동 API 문서화를 지원.
- 단점: 비교적 새로운 프레임워크로 커뮤니티와 리소스가 제한적.
- 활용도: 데이터 집약적인 실시간 API와 고성능 애플리케이션.
Flask
- 장점: 경량 프레임워크로 배우기 쉽고 간단한 API 개발에 적합.
- 단점: 기본 제공 기능이 적어 대규모 애플리케이션 개발 시 비효율적.
- 활용도: 소규모 프로젝트, 프로토타입 개발.
Django
- 장점: 인증, 관리자 패널, ORM 등 많은 기본 기능 제공.
- 단점: 복잡한 설정과 구조, 소규모 프로젝트에는 과한 기능.
- 활용도: 전자상거래, 콘텐츠 기반 웹사이트.
3. 비동기 프로그래밍이란?
비동기 프로그래밍은 작업이 병렬적으로 실행될 수 있도록 하여, I/O 작업이나 대기 시간 동안 다른 작업을 처리할 수 있는 프로그래밍 방식입니다.
동기 vs 비동기
- 동기(Synchronous): 작업이 순차적으로 실행되며, 하나의 작업이 끝나야 다음 작업이 시작.
- 비동기(Asynchronous): 작업이 독립적으로 실행되며, 대기 시간이 발생하면 다른 작업을 먼저 처리.
import asyncio
async def task1():
print("Task 1 시작")
await asyncio.sleep(2)
print("Task 1 완료")
async def task2():
print("Task 2 시작")
await asyncio.sleep(1)
print("Task 2 완료")
async def main():
await asyncio.gather(task1(), task2())
asyncio.run(main())
#출력
#Task 1 시작
#Task 2 시작
#Task 2 완료
#Task 1 완료
4. FastAPI 설치 및 환경 설정
Python 가상환경 생성
python -m venv venv
cd venv/Scripts
Activate.bat
cd ..
FastAPI 설치
pip install fastapi
ASGI 서버(Uvicorn) 설치
FastAPI 애플리케이션을 실행하기 위해 ASGI 서버인 Uvicorn을 설치합니다.
pip install "uvicorn[standard]"
- uvicorn[standard]는 기본 서버 기능 외에 Gzip 압축, CORS 지원 같은 추가 미들웨어를 포함.
FastAPI 기본 코드 예시
간단한 FastAPI 앱
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello, FastAPI!"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}
실행
uvicorn main:app --reload
- main:app: main.py 파일에서 app 객체를 실행.
- --reload: 코드 변경 시 자동으로 서버 재시작.
6. REST와 RESTful API
REST
- "Representational State Transfer"의 약자로, HTTP 기반의 자원(Resource)을 관리하기 위한 아키텍처 스타일.
- 자원을 고유하게 식별하고 상태를 전송.
RESTful API
- REST 아키텍처를 따르는 API.
- HTTP 메서드(GET, POST, PUT, DELETE 등)를 통해 자원 관리.
- 클라이언트와 서버 간 통신은 주로 JSON 형식.
RESTful API 예시
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/")
async def get_users():
return [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]
@app.post("/users/")
async def create_user(user: dict):
return {"id": 3, **user}
@app.put("/users/{user_id}")
async def update_user(user_id: int, user: dict):
return {"id": user_id, **user}
@app.delete("/users/{user_id}")
async def delete_user(user_id: int):
return {"message": f"User {user_id} deleted"}
7. JSON
JSON이란?
- "JavaScript Object Notation"의 약자로, 데이터를 표현하고 교환하기 위한 경량 데이터 형식.
- 장점:
- 읽기 쉽고 가볍다.
- 대부분의 프로그래밍 언어에서 지원.
- 서버-클라이언트 간 데이터 교환에 최적화.
FastAPI에서 JSON 반환
FastAPI는 Python의 dict를 자동으로 JSON으로 변환.
JSON 예시
from fastapi import FastAPI
app = FastAPI()
@app.get("/json/")
async def return_json():
return {"key": "value", "list": [1, 2, 3]}
8. 비동기 프로그래밍의 장점
- 응답성(Responsiveness):
- 대기 시간 동안 다른 작업을 처리하여 응답 속도 개선.
- 확장성(Scalability):
- 대규모 트래픽 처리에 유리.
- 자원 효율성(Resource Efficiency):
- CPU, 메모리 등을 효율적으로 활용.
- 병렬성(Concurrency):
- 여러 작업을 동시에 처리.
'인공지능 > LLM 서비스' 카테고리의 다른 글
AI 광고 문구 생성기 프로젝트: FastAPI와 Gradio를 활용한 구현 (0) | 2025.01.14 |
---|---|
Python FastAPI와 비동기 프로그래밍 기초 (0) | 2025.01.14 |
Gradio와 OpenAI로 번역 앱 만들기: Few-shot 학습 활용 (0) | 2025.01.12 |
Gradio (0) | 2025.01.12 |
프롬프트 엔지니어링 (0) | 2025.01.12 |