정말 기초적인 FastAPI 튜토리얼 #3 - 입력 데이터 검증
파이썬의 타입 힌트 기능과 이를 활용하여 FastAPI에서 입력 값을 검증하는 방법을 알아봅니다.
이 튜토리얼은 파이썬을 조금 다뤄보신 분들이 FastAPI를 기초부터 배울 수 있게 구성했습니다.
3편에서는 다음 내용을 다룹니다.
- 파이썬의 타입 힌트
- 입력 데이터 검증하기
파이썬의 타입 힌팅
variable: type
파이썬은 동적 타입 언어이지만 3.5 버전부터 타입 힌트 기능을 제공합니다. (강타입 언어처럼 타입을 강제하지는 않습니다.)
타입 힌트에 익숙치 않은 분들을 위해 아주 간단하게 예시 코드를 보여드리겠습니다.
name: str = 'pycon' # 변수에 타입 힌트 추가 (타입 강제가 아님에 유의!)
def hello(name: str = 'default name') -> dict: # 함수의 인자와 리턴값에 타입 힌트 추가
return {'result': f'Hello {name}'}
타입 힌트 덕에 소스코드를 처음 읽고 개발하는 개발자는 실수를 줄일 수 있고, 개발 도구(IDE)들은 코드 힌트를 더 풍부하게 제공할 수 있습니다.
입력 데이터 검증하기
feat. 타입 힌팅
FastAPI 역시 파이썬의 타입 힌트 기능을 유용하게 활용합니다. 앞서 만든 add
API의 선언부에 다음과 같이 타입 힌트를 추가해봅시다.
# 이전 코드
# def add(x, y):
# return {"result": int(x) + int(y)}
@app.get("/add")
def add(x: int, y: int):
return {"result": x + y}
이전 코드에서는 변수 x
와 y
를 int형으로 변환해주었는데, 타입 힌트를 추가함으로써 형변환이 필요 없어졌습니다. 실제로 그런지 확인해볼까요? http://127.0.0.1:8000/add?x=1&y=2 링크를 열어 결과가 다음과 같은지 확인합시다.
{
"result": 3
}
FastAPI의 타입 힌트 활용은 자동 형변환에서 끝나지 않습니다. int형이 아닌 값을 변수에 입력하면 어떻게 되는지 확인해볼까요? http://127.0.0.1:8000/add?x=string&y=2 링크를 열어 결과가 다음과 같은지 확인합시다.
{
"detail": [
{
"type": "int_parsing",
"loc": [
"query",
"x"
],
"msg": "Input should be a valid integer, unable to parse string as an integer",
"input": "string",
"url": "https://errors.pydantic.dev/2.1/v/int_parsing"
}
]
}
type
부분에서는 오류가 발생한 이유가 int형 파싱(int_parsing
)이라고 알려주고, loc
부분에서는 쿼리 파라미터(query
) 중 x
라는 값이 잘못됐다고 알려줍니다. input
부분에서는 실제로 입력된 값이 string
이라고 알려주고요.
이렇게 FastAPI는 타입 힌트로 입력 데이터를 검증해줍니다.
실습 과제 #1
이제 multiply API에도 타입 힌트를 추가해봅시다.
답
@app.get("/multiply/{x}/{y}")
def multiply(x: int, y: int):
return {"result": x * y}
- 정답 확인 - 브라우저에서 http://127.0.0.1:8000/multiply/1/2 링크를 열어, 결과가 다음과 같다면 성공!
{
"result": 2
}
실습 과제 #2
user API에도 타입 힌트를 추가해봅시다.
답
@app.get("/user/{user_name}")
def user(user_name: str):
return {"message": f"My name is {user_name}"}
- 정답 확인 - 브라우저에서 http://127.0.0.1:8000/user/1234 링크를 열어, 결과가 다음과 같다면 성공!
{
"message": "My name is 1234"
}
(여기서는 1234
가 str형이 아님에도 오류가 발생하지 않은 이유를 생각해봅시다.)
요약
- 파이썬의 타입 힌트 기능을 알아보았습니다.
- 타입 힌트를 활용하여 입력 데이터를 검증하는 방법을 알아보았습니다.
다음 편에서는...
정말 기초적인 FastAPI 튜토리얼 #4 - 기본값과 선택적 쿼리에서는 다음 내용을 다룹니다.
- 쿼리 변수에 기본값 할당하기
- 선택적으로 쿼리 변수 입력받기
COMMENTS