mypy - minnie0531/fastapi-template GitHub Wiki
python์ ๋์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ธํฐํ๋ฆฌํฐ๊ฐ ์ฝ๋๋ฅผ ์คํํ๋ฉด์ ํ์ ์ ์ฒดํฌํ๊ณ ์ฝ๋๋ฅผ ์คํ์ํต๋๋ค. ํ์ ์ด ์ ํด์ ธ ์์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ์ํ๋ ๋๋ก ํ์ ์ด ๋ณ๊ฒฝ์ํฌ ์ ์์ต๋๋ค.. ๊ทธ๋ฌ๋ ์ด๋ฌํ ํน์ง์ ๊ฐ๋จํ ์คํฌ๋ฆฝํธ๋ก์จ ์ฌ์ฉํ๊ธฐ์ ํธํ์ง๋ง ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉด์ ์ ์ฌ์ ์ธ ๋ฒ๊ทธ์ด์๋ฅผ ๊ฐ๊ฒ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด String type์ ๋ณ์์ integer type์ ๋ณ์๊ฐ sum์ ํ๊ฒ ๋๋ค๋ฉด ๋น์ฐํ ์ฝ๋๋ ์๋ฌ๋ฅผ ๋ฐ์ํ๊ฒ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ๊ท๋ชจ๊ฐ ํฐ ํ๋ก์ ํธ์์๋ type annotation์ ์ด์ฉํ์ฌ type์ ๋ํ hintํน์ ํ์ ์ ๋ช ์ํจ์ผ๋ก์จ ์ด๋ฌํ ์ค๋ฅ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ๋ช ์๋ type ๋ค์ mypy์ ์ํด ๊ฒ์ฌ๊ฐ ๊ฐ๋ฅํด ์ง๋๋ค.
- Iinstallation
pip install mypy - Run ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ๋๊ฒจ์ฃผ์ด ์คํ.
mypy file.py/directory - Mypy settings ํ๋ก์ ํธ์์ mypy๋ฅผ ํตํฉํ์ฌ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ(CI pipeline) ๋งค๋ฒ ์ปค๋งจ๋๋ฅผ ๋ณด๋ด๋ ๊ฒ ๋ณด๋ค ์ค์ ํ์ผ์ ์ด์ฉํ๋ฉด ํธ๋ฆฌํฉ๋๋ค. ์ค์ ํ์ผ์ ํ๋ก์ ํธ ์ต์์ ๋๋ ํ ๋ฆฌ์์ mypy.ini ๋๋ .mypy.ini ๋๋ setup.cfg์ ์ ์ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, app๊ณผ tests ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ํ์ผ์ ํ์ ์ฒดํฌํ๋ ์ผ๋ถ ๋๋ ํ ๋ฆฌ๋ฅผ ์ ์ธํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ ์ ์์ต๋๋ค.
[mypy]
files = app,tests
show_error_context = True
show_column_numbers = True
show_error_codes = True
pretty = True
[app.*.models.*]
ignore_errors = True
Type annotation
type annotation์ ๋ณ์/ํจ์๋ฅผ ์ ์ธํ ๋ ์๋์ ๊ฐ์ด type์ ๊ฐ์ด ๋ช ์ํด ์ค๋๋ค. ๋ณ์๋ :์ ์ด์ฉํ์ฌ, ํจ์๋ ->๋ฅผ ์ด์ฉํ์ฌ type annotation์ ํ ์ ์์ต๋๋ค.
a : int = 1
b : str = "hello"
def sum(a: int, b: int) -> int :
return a+b
๋ด์ฅ ํ์ ์ ์ด์ฉํด์ ์ข ๋ ๋ณต์กํ ํ์ ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ ๋๋ ์คํ ๋ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ typing ๋ชจ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ์ quality๋ฅผ ๋์ด๊ณ ์์ ์ฑ์ ํ๋ณดํ๊ธฐ ์ํด์ mypy๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅ ํฉ๋๋ค.