시작에 앞서
해당 내용은 <가장 빠른 풀스택을 위한 Flask & FastAPI>, Dave Lee 지음. BJ Public 출판.
내용을 토대로 작성되었습니다. 보다 자세한 사항은 해당 교재를 참고하시기 바랍니다.
이전 내용
타입 힌트를 활용한 라우팅
타입 힌트란?
타입 힌트는 프로그래밍 언어에서 변수, 함수 인자, 반환값 등의 데이터 타입을 명시적으로 표기하는 기법이다.
주로 정적 타입 검사, 리팩토링, 문서화 등에서 활용되는데, 이는 코드의 가독성을 높이고, IDE나 린터가 에러를 미리 잡을 수 있게 도와준다.
※ 리팩토링(refactoring)은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다. (출처: 위키백과)
즉, 이미 작성한 소스코드에서 구현된 일련의 행위들을 변경없이, 코드의 가독성과 유지보수성을 높이기 위해 내부구조를 변경하는 것이다.
타입 힌트는 최근 파이썬에서 기본적으로 지원되며, 플라스크에서도 활용 가능하다.
기본적인 타입 외에도 리스트, 딕셔너리, 옵셔널, 유니온 등 다양한 타입 힌트 문법을 활용할 수 있다.
- 옵셔널 타입: 옵셔널 타입은 Swift 프로그래밍 언어에서 사용되며, 변수나 상수가 값이 없을 수 있는 상태를 표현한다. 이는 값이 있을 수도 있고, 없을 수도 있다는 두 가지 가능성을 가지고 있음을 나타낸다.
- 유니온 타입: 2개 이상의 타입을 허용하는 경우로 |(vertical bar)를 통해 타입을 구분
◆ 파이썬 타입 힌트의 예
def greet(name: str) -> str:
return f"Hello, {name}"
- name: str은 name 변수의 타입이 문자열임을 명시
- -> str은 함수의 반환값이 문자열임을 명시
파이썬 타입 힌트는 선언한 타입 외 다른 타입이 들어와도 에러를 내지 않는다.
예를 들어 하단의 코드는 문제 없이 실행된다. (a: int, b: int는 a와 b가 정수임을 의도만 표현)
def add(a: int, b:int) -> int:
return 1
print(add("string", 2)) # 실행 시 에러 발생 X
◆ 플라스크 URL 타입 힌트
반면, 플라스크 URL 타입 힌트는 들어오는 타입이 선언한 타입과 다르면 실행 시 에러를 발생시킨다.
플라스크에서는 URL 경로에 변수의 타입을 명시할 수 있다.
플라스크에서 URL에 적용할 수 있는 타입 힌트와 파이썬에서 일반적으로 쓰는 타입 힌트는 약간 다르다.
from flask import Flask
app = Flask(__name__)
@app.route('/add/<int:num1>/<int:num2>')
def add(num1, num2):
return 'test'
위의 코드의 경우 /add/1/2로 접속하면 정상 작동되나, /add/one/two로 접속하면 Not Found 에러(404 에러)가 발생한다.
[플라스크에서 사용되는 타입]
- string(디폴트): 어떤 텍스트도 받지만 슬래시(/)는 제외
- int: 정수
- float: 부동소수점 숫자
- path: 슬래시를 포함한 문자열 (여러 폴더 또는 하위 경로를 하나의 문자열로 캡처 가능 / 라우트를 정의할 때 <path:변수명> 형태로 지정)
- uuid: UUID 문자열 (라우트를 정의할 때 <uuid:변수명> 형태로 지정
※ uuid(Universally Unique Identifier) 타입 형식의 문자열. 128bit 숫자이며, 유일성이 거의 보장되는 랜덤 식별자
[적용의 예]
테스트 방법
1. app.py 라는 이름으로 해당 코드를 저장 후, 터미널에서 flask run 명령으로 플라스크 서버 시작
from flask import Flask
app = Flask(__name__)
@app.route('/int/<int:var>')
def int_type(var: int):
return f'Integer: {var}'
@app.route('/float/<float:var>')
def float_type(var: float):
return f'Float: {var}'
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
return f'Subpath: {subpath}'
@app.route('/uuid/<uuid:some_id>')
def show_uuid(some_id):
return f'UUID: {some_id}'
2. 웹 브라우저를 열고 다음 각각의 경로를 방문하여 결과 확인
- integer 타입 (만약 정수가 아닌 타입이 오면 404 에러 발생)
- float 타입 (만약 소수가 아닌 타입이 오면 404 에러 발생)
- path 타입
- UUID 타입 (만약 해당 포맷에 맞지 않는 문자열이 오면 404 에러 발생)
※ 타입에 맞지 않는 값(int 형인데 string 입력)을 입력할 경우 Not Found 에러 (404 에러) 발생
'[파이썬 Projects] > <파이썬 웹개발>' 카테고리의 다른 글
[파이썬] 플라스크(Flask) - 템플릿 (1) | 2024.07.14 |
---|---|
[파이썬] 플라스크(Flask) - 요청과 응답 (1) | 2024.07.14 |
[파이썬] 플라스크(Flask) - 라우팅 (1) (0) | 2024.07.13 |
[파이썬] 플라스크(Flask) - Hello, World! 애플리케이션 만들기 (0) | 2024.07.13 |
[파이썬] curl 명령어 (0) | 2024.07.13 |