AI 학습 관점에서 fastAPI 공부

허상범·2026년 2월 7일

Software Engineering

목록 보기
9/9

확실히 LLM 이전 시대보다 프로그래밍 공부의 속도나 효과가 엄청 높아졌다. 터미널로 fastAPI 설치 및 main.py 코드 돌려서 Swagger로 확인하는 것까지 예전에는 끙끙댔을 것 같은데 5분도 안되어서 초기 학습을 할 수 있는 환경이 되었다.

Self-질의응답 속도가 LLM 덕분에 질의응답 10초 정도만에 빠르게 지식 학습이 해결이 가능해진다. (사고력은 별개의 문제)

한창 fastAPI와 친해지려고 했다가 24년 8월에 입대를 하고, 결국 26년 2월 5일이 지나 오늘이 되었다. 이제 프로그래밍은 음악처럼 취미와 같이 틈틈이 학습해나가는 나의 취향 중 하나로 자리잡을 듯 하다.

커리어가 어떻게 뻗을지는 모르겠으나, 프로그래밍 실력은 그냥 재미삼아 꾸준히 높여나가보기. 개인 프로젝트 관리도 좀 해보고... (데이터 분석 서비스 같은 것들)

백엔드에 대한 블랙 박스를 가장 빠르고 효과적으로 선명하게 할 수 있는 방법이 직접 API를 개발해보는 것이었다. 그래서 선택한 것이 fastAPI 프레임워크였고.

지금은 AI가 많이 발달해있어서,AI 학습 관점에서 fastAPI를 다시 천천히 공부해보려고 한다. 한편, 불필요한 수학에 매달리지 말고 효율적으로 뭔가를 만들어나간다는 관점에서 프로그래밍 자체에 더 비중을 두기 (차쌤 조언)

fastAPI 학습 방향성

데이터 리터러시가 "데이터의 정합성"을 본다면, 백엔드 리터러시는 시스템 관점에서의 "구조적 정합성"을 보는 눈을 의미한다. (데이터는 시스템 입장에서 마이크로한 관점, 백엔드 리터러시는 더 매크로한 관점)

1. 데이터 리터러시 향상 : 데이터의 구조와 타입을 정확히 정의 및 제어하기

  • 1) Pydantic 깊게 파기 (데이터 모델링)
    • 데이터 처리 관점에서 FastAPI의 pydantic은 핵심적인 역할을 한다.
    • 단순히 Basemodel을 상속받는 것을 넘어서, Field를 화용한 제약조건 설정, validator를 활용한 데이터 검증 로직 구현을 연습하기
  • 2) Typed Python : 파이썬의 typing 모듈 적극 활용하기. 코드의 가독성을 높일 뿐 ㅏ니라, 데이터 흐름 추적 용이성도 높여줌

2. 백엔드 리터러시 향상

백엔드 리터러시는 "시스템의 확장성, 안정성을 설계하는 능력"임. fastAPI 관점에서는 크게 2가지가 중요.
1) async, await 원리 이해하기 : AI 모델은 추론(Inference) 과정에서 시간이 걸림. 이를 비동기로 처리하지 않으면 서버 전체가 대기 상태에 빠질 수 있음 (AI Latency 문제) 이를 해결하기 위해서는 UvicornStarlette 관계를 이해하고 비동기 통신의 이점을 느끼기.

2) Dependency Injection (의존성 주입) : FastAPI의 Depends는 백엔드 설계 관점의 꽃.

  • DB 세션 관리, 사용자 인증 등 백엔드 기능을 Depends로 분리하여 모듈화하는 연습

3. AI 응용 능력 향상

  • Streaming Responses(SSE), Background Task 등 LLM의 실시간 데이터 출력 및 Latency 문제를 백엔드 관점에서 어떻게 최적화할 것인지 연습해보면 좋다고 함.

샘플 프로젝트 : 실시간 데이터 분석기

Step 1. 데이터 스키마 설계

가장 먼저 할 일은 서버에 들어오고 나가는 데이터의 규격을 정의하는 것. Pydantic을 사용하면 잘못된 데이터가 입력되었을 때 입구에서부터 이를 차단할 수 있음.

from pydantic import BaseModel, Field
from typing import List, Optional

# [Data Literacy] 입력 데이터의 구조를 명확히 정의
class AnalysisRequest(BaseModel):
    title: str = Field(..., example="2024년 매출 데이터")
    raw_data: List[float] = Field(..., min_items=3, description="분석할 숫자 리스트 (최소 3개)")
    focus_area: Optional[str] = "trend" # trend, outlier, summary 중 선택

# 출력 데이터 구조
class AnalysisResponse(BaseModel):
    task_id: str
    status: str

Step 2. 의존성 주입을 위한 AI 처리 로직 만들기

백엔드 리터러시의 핵심은 모듈간, 기능간 결속력은 최대한 낮추고 유연성은 높여주는 것 (상호의존적 시스템보다는 유연한 설계) AI 모델을 직접 API 함수에 넣지 않고, Depends를 통해 주입시켜주기.

import asyncio
from fastapi import FastAPI, Depends

app = FastAPI()

# [Backend Literacy] AI 분석 기능을 클래스화하여 관리
class AIAnalyzer:
    async def analyze(self, data: List[float]):
        # 실제로는 여기서 OpenAI API 또는 Local LLM을 호출
        ## 시뮬레이션을 위해 0.5초씩 끊어서 응답을 생성
        for i in range(5):
            await asyncio.sleep(0.5)
            yield f"분석 단계 {i+1}: 데이터를 해석 중입니다... \n"
        yield f"결과: 평균값은 {sum(data)/len(data)}입니다."

# 의존성 주입 함수
def get_analyzer():
    return AIAnalyzer()

Step 3. 비동기 스트리밍 엔드포인트 구현

AI 응답이 길어질 때 사용자의 대기 시간을 줄이기 위해 StreamingResponse를 사용하여 결과가 생성되는대로 클라이언트에 즉시 출력시키는 방식을 구현.

from fastapi.responses import StreamingResponse

@app.post("/analyze")
async def run_analysis(
    request: AnalysisRequest, 
    analyzer: AIAnalyzer = Depends(get_analyzer)
):
    # [AI Application] 생성형 AI의 응답을 실시간으로 스트리밍합니다.
    return StreamingResponse(
        analyzer.analyze(request.raw_data), 
        media_type="text/event-stream"
    )
profile
Engineering & Science, Since 2021 | Backend, Data, Economics

0개의 댓글