기술블로그-Fastapi편

✅ Python / FastAPI Annotated + Field 문법 정리: 실행에 영향이 있을까?

Chansman 2025. 5. 27. 12:06

✅ Python / FastAPI Annotated + Field 문법 정리: 실행에 영향이 있을까?


1. 📌 질문 요약

url_code: Annotated[str, Field(description="회의 URL 코드. unique 합니다.")]

이 코드는 실제로 기능 실행에 영향을 주는가? 아니면 단지 Swagger 문서용, 타입 검사용 힌트인가?


🎯 결론 먼저

✅ Annotated[...] + Field(...)는 실제 실행 로직에는 거의 영향을 주지 않습니다.

  • 이 코드는 Swagger 문서 자동 생성, 유효성 검사, 타입 힌트/IDE 자동완성 용도로만 작동합니다.
  • 실제 API 로직에는 아무런 동작 변화 없이 응답/리턴값은 그대로 동작합니다.

2. 🔍 구성 요소별 상세 설명

🟡 url_code: str

  • 기본적인 타입 힌트입니다.
  • FastAPI와 Pydantic은 이 정보를 기반으로
    • 문서 자동화
    • 유효성 검사 (예: int 자리에 str 넣으면 에러)
    • IDE 자동완성
      등을 처리합니다.

🟦 Field(...)

  • 추가 정보와 제약 조건을 설정하는 도구입니다.
  • description, max_length, regex, example, default 등을 설정할 수 있습니다.
  • 하지만 이 설정은 모두 문서용/검사용이지, 로직 자체를 바꾸지는 않습니다.

예:

Field(description="설명", max_length=10)

→ Swagger UI에 설명이 나오고, max_length가 유효성 검사의 기준이 됩니다.

🟥 Annotated[...]

  • Python 3.9 이상부터 도입된 공식 메타데이터 첨부 방식입니다.
  • Annotated[str, Field(...)] 형태로 타입 힌트에 추가 정보를 덧붙입니다.
  • 이것은 Pydantic이나 FastAPI 같은 프레임워크가 읽고 활용하는 구조이며,
    • Python 인터프리터 자체는 실행 시 무시합니다.

3. 📘 예시 정리

url_code: Annotated[str, Field(description="회의 URL 코드. unique 합니다.")]

항목 역할 실행 영향

str 타입 힌트 ❌ 없음
Field(...) 설명 / 문서화 / 유효성 제한 ❌ 없음
Annotated[...] 위 둘을 묶은 타입+메타정보 ❌ 없음

4. 🧠 실제 동작 비교

코드 결과

return {"url_code": "abc"} 작동함 ✅
return CreateMeetingResponse(url_code="abc") 작동함 ✅
위에 Field, Annotated를 안 써도? 여전히 작동함 ✅

결론: 문서에는 표시 안 되지만, 기능에는 전혀 영향 없음


✅ 요약 정리

구성 요소 실행 영향 설명

str 타입 힌트 정적 타입 추론용 힌트
Field(...) Swagger 문서 + 유효성 검사 설명
Annotated[...] 타입 + 설명을 묶는 메타데이터 구조

📌 실제 실행 로직(예: return, DB 저장, API 호출 등)에는 아무런 영향을 주지 않습니다.


이 구조는 주로 "Swagger 문서를 풍부하게" 또는 "입력값 유효성 검사 조건을 명확하게" 하기 위한 수단입니다.
실행 성능이나 로직 자체를 바꾸는 목적은 전혀 아니라는 점을 기억하세요!