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๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ ํ•ฉ๋‹ˆ๋‹ค.