기술블로그-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 문서를 풍부하게" 또는 "입력값 유효성 검사 조건을 명확하게" 하기 위한 수단입니다.
실행 성능이나 로직 자체를 바꾸는 목적은 전혀 아니라는 점을 기억하세요!