์ค๋ ์ฐ๋ฆฌ๋ Dropbox๊ฐ ์๋ฐฑ๋ง ์ค์ Python ์ฝ๋์ ๋ํ ์ ํ ์ ์ด๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑํ๋์ง์ ๋ํ ์๋ฃ ๋ฒ์ญ์ ๋ ๋ฒ์งธ ๋ถ๋ถ์ ๊ฒ์ํฉ๋๋ค.
โ
๊ณต์ ์ ํ ์ง์(PEP 484)
์ฐ๋ฆฌ๋ Hack Week 2014 ๋์ Dropbox์์ mypy์ ๋ํ ์ฒซ ๋ฒ์งธ ์ง์งํ ์คํ์ ์ํํ์ต๋๋ค. Hack Week๋ Dropbox๊ฐ ์ฃผ์ตํ๋ XNUMX์ฃผ์ผ ์ด๋ฒคํธ์ ๋๋ค. ์ด ๊ธฐ๊ฐ ๋์ ์ง์๋ค์ ์ํ๋ ๊ฒ์ ๋ฌด์์ด๋ ์ผํ ์ ์์ต๋๋ค! Dropbox์ ๊ฐ์ฅ ์ ๋ช ํ ๊ธฐ์ ํ๋ก์ ํธ ์ค ์ผ๋ถ๋ ์ด์ ๊ฐ์ ํ์ฌ์์ ์์๋์์ต๋๋ค. ์ด ์คํ์ ๊ฒฐ๊ณผ๋ก ์ฐ๋ฆฌ๋ mypy๊ฐ ์์ง ๋๋ฆฌ ์ฌ์ฉ๋ ์ค๋น๊ฐ ๋์ด ์์ง๋ ์์ง๋ง ์ ๋งํด ๋ณด์ธ๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ์ต๋๋ค.
๋น์์๋ Python ์ ํ ํํธ ์์คํ
์ ํ์คํํ๋ ค๋ ์์ด๋์ด๊ฐ ๋ ๋์์ต๋๋ค. ๋ด๊ฐ ๋งํ๋ฏ์ด Python 3.0๋ถํฐ ํจ์์ ์ ํ ์ฃผ์์ ์ฌ์ฉํ ์ ์์์ง๋ง ์ด๋ ์ ์๋ ๊ตฌ๋ฌธ๊ณผ ์๋ฏธ๊ฐ ์๋ ์์์ ํํ์์ผ ๋ฟ์
๋๋ค. ํ๋ก๊ทธ๋จ ์คํ ์ค์ ์ด๋ฌํ ์ฃผ์์ ๋๋ถ๋ถ ๋ฌด์๋์์ต๋๋ค. Hack Week ์ดํ ์ฐ๋ฆฌ๋ ์๋ฏธ ์ฒด๊ณ ํ์คํ ์์
์ ์์ํ์ต๋๋ค. ์ด ์ํ์ด ๋ฑ์ฅํ๊ฒ ๋ ๊ณ๊ธฐ๊ฐ ๋์์ต๋๋ค
์ฐ๋ฆฌ์ ๋๊ธฐ๋ ๋ ๊ฐ์ง ์ธก๋ฉด์์ ๋ณผ ์ ์์ต๋๋ค. ์ฒซ์งธ, ์ฐ๋ฆฌ๋ ์ ์ฒด Python ์ํ๊ณ๊ฐ ์ ํ ํํธ(Python์์ "์ ํ ์ฃผ์"๊ณผ ๋์ผํ๊ฒ ์ฌ์ฉ๋๋ ์ฉ์ด) ์ฌ์ฉ์ ๋ํ ๊ณตํต ์ ๊ทผ ๋ฐฉ์์ ์ฑํํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋์ต๋๋ค. ๊ฐ๋ฅํ ์ํ์ ๊ณ ๋ คํ๋ฉด ์ด๋ ์ํธ ํธํ๋์ง ์๋ ๋ง์ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ซ์ต๋๋ค. ๋์งธ, ์ฐ๋ฆฌ๋ Python ์ปค๋ฎค๋ํฐ์ ๋ง์ ๊ตฌ์ฑ์๊ณผ ํ์ ์ฃผ์ ๋ฉ์ปค๋์ฆ์ ๊ณต๊ฐ์ ์ผ๋ก ๋ ผ์ํ๊ณ ์ถ์์ต๋๋ค. ์ด๋ฌํ ์๊ตฌ๋ ์ฐ๋ฆฌ๊ฐ ๊ด๋ฒ์ํ Python ํ๋ก๊ทธ๋๋จธ ๋์ค์ ๋์ ์ธ์ด์ ๊ธฐ๋ณธ ์์ด๋์ด์์ "๋ฐฐ๊ต์"์ฒ๋ผ ๋ณด์ด๊ณ ์ถ์ง ์๋ค๋ ์ฌ์ค์ ๋ถ๋ถ์ ์ผ๋ก ์ํฅ์ ๋ฐ์์ต๋๋ค. ์ด๋ "์ค๋ฆฌ ํ์ดํ"์ผ๋ก ์๋ ค์ง ๋์ ์ ํ ์ธ์ด์ ๋๋ค. ์ปค๋ฎค๋ํฐ์์๋ ์ฒ์๋ถํฐ ์ ์ ํ์ดํ ์์ด๋์ด์ ๋ํด ๋ค์ ์์ฌ์ค๋ฌ์ด ํ๋๊ฐ ๋ํ๋ ์๋ฐ์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ์ ํ์ดํ์ด ํ์๊ฐ ์๋๋ผ๋ ๊ฒ์ด ๋ถ๋ช ํด์ง ํ(๊ทธ๋ฆฌ๊ณ ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ด ์ค์ ๋ก ์ ์ฉํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์ ํ) ๊ทธ ์ ์๋ ๊ฒฐ๊ตญ ์ฝํด์ก์ต๋๋ค.
๊ฒฐ๊ตญ ์ฑํ๋ ์ ํ ํํธ ๊ตฌ๋ฌธ์ ๋น์ mypy๊ฐ ์ง์ํ๋ ๊ฒ๊ณผ ๋งค์ฐ ์ ์ฌํ์ต๋๋ค. PEP 484๋ 3.5๋ Python 2015์ ํจ๊ป ์ถ์๋์์ต๋๋ค. Python์ ๋ ์ด์ ๋์ ์ผ๋ก ์ ๋ ฅ๋๋ ์ธ์ด๊ฐ ์๋๋๋ค. ๋๋ ์ด ์ฌ๊ฑด์ ํ์ด์ฌ ์ญ์ฌ์ ์์ด์ ์ค์ํ ์ด์ ํ๋ก ์๊ฐํ๊ณ ์ถ์ต๋๋ค.
๋ง์ด๊ทธ๋ ์ด์ ์์
2015๋ ๋ง, Dropbox๋ mypy ์์ ์ ์ํด XNUMX๋ช ์ผ๋ก ๊ตฌ์ฑ๋ ํ์ ๊ตฌ์ฑํ์ต๋๋ค. ์ฌ๊ธฐ์๋ ๊ท๋ ๋ฐ ๋ก์ฌ(Guido van Rossum), ๊ทธ๋ ํ๋ผ์ด์ค(Greg Price), ๋ฐ์ด๋น๋ ํผ์ (David Fisher)๊ฐ ํฌํจ๋์์ต๋๋ค. ๊ทธ ์๊ฐ๋ถํฐ ์ํฉ์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋ฐ์ ํ๊ธฐ ์์ํ์ต๋๋ค. mypy ์ฑ์ฅ์ ์ฒซ ๋ฒ์งธ ์ฅ์ ๋ฌผ์ ์ฑ๋ฅ์ด์์ต๋๋ค. ์์์ ์์ํ๋ฏ์ด ํ๋ก์ ํธ ์ด๊ธฐ์๋ mypy ๊ตฌํ์ C๋ก ๋ณํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ง๋ง ์ด ์์ด๋์ด๋ ํ์ฌ ๋ชฉ๋ก์์ ์ ์ธ๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ mypy์ ๊ฐ์ ๋๊ตฌ์ ๋นํด ์ถฉ๋ถํ ๋น ๋ฅด์ง ์์ CPython ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์คํ ์ ์คํํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์์ต๋๋ค. (JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ ๋์ฒด Python ๊ตฌํ์ธ PyPy ํ๋ก์ ํธ๋ ์ฐ๋ฆฌ์๊ฒ ๋์์ด ๋์ง ์์์ต๋๋ค.)
๋คํ์ค๋ฝ๊ฒ๋ ์ผ๋ถ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ ์ด ์ฌ๊ธฐ์ ๋์์ด ๋์์ต๋๋ค. ์ต์ด์ ๊ฐ๋ ฅํ "๊ฐ์๊ธฐ"๋ ์ฆ๋ถ ๊ฒ์ฌ ๊ตฌํ์ด์์ต๋๋ค. ์ด ๊ฐ์ ์ ์ด๋ฉด์ ์๋ ์์ด๋์ด๋ ๊ฐ๋จํ์ต๋๋ค. ์ด์ mypy ์คํ ์ดํ ๋ชจ๋ ๋ชจ๋์ ์ข ์์ฑ์ด ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ ์ข ์์ฑ์ ์์ ํ๋ ๋์ ์ด์ ์คํ ์ค์ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ ๋ ํ์ผ๊ณผ ์ด์ ์ข ์๋ ํ์ผ์ ๋ํด์๋ง ์ ํ ๊ฒ์ฌ๋ฅผ ์ํํ๋ฉด ๋์์ต๋๋ค. Mypy๋ ์กฐ๊ธ ๋ ๋์๊ฐ์ต๋๋ค. ๋ชจ๋์ ์ธ๋ถ ์ธํฐํ์ด์ค๊ฐ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ mypy๋ ์ด ๋ชจ๋์ ๊ฐ์ ธ์จ ๋ค๋ฅธ ๋ชจ๋์ ๋ค์ ํ์ธํ ํ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์ต๋๋ค.
์ฆ๋ถ ๊ฒ์ฌ๋ ๋๋์ ๊ธฐ์กด ์ฝ๋์ ์ฃผ์์ ๋ฌ ๋ ๋ง์ ๋์์ด ๋์์ต๋๋ค. ์์ ์ ์ฃผ์์ด ์ ์ง์ ์ผ๋ก ์ฝ๋์ ์ถ๊ฐ๋๊ณ ์ ์ง์ ์ผ๋ก ๊ฐ์ ๋จ์ ๋ฐ๋ผ ์ด ํ๋ก์ธ์ค์๋ ์ผ๋ฐ์ ์ผ๋ก mypy์ ๋ง์ ๋ฐ๋ณต ์คํ์ด ํฌํจ๋๋ค๋ ๊ฒ์ ๋๋ค. mypy์ ์ฒซ ๋ฒ์งธ ์คํ์ ํ์ธํ ์ข ์์ฑ์ด ๋ง์๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ๋งค์ฐ ๋๋ ธ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ํฉ์ ๊ฐ์ ํ๊ธฐ ์ํด ์๊ฒฉ ์บ์ฑ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ์ต๋๋ค. mypy๊ฐ ๋ก์ปฌ ์บ์๊ฐ ์ค๋๋์์ ๊ฐ๋ฅ์ฑ์ด ์์์ ๊ฐ์งํ๋ฉด ์ค์ ์ ์ฅ์์์ ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค์ ๋ํ ํ์ฌ ์บ์ ์ค๋ ์ท์ ๋ค์ด๋ก๋ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ์ค๋ ์ท์ ์ฌ์ฉํ์ฌ ์ฆ๋ถ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค. ์ด๋ mypy์ ์ฑ๋ฅ ํฅ์์ ํฅํ ๋ ํ๋์ ํฐ ๋ฐ๊ฑธ์์ ๋ด๋๋ ์ต๋๋ค.
์ด๋ Dropbox์์ ์ ํ ๊ฒ์ฌ๊ฐ ๋น ๋ฅด๊ณ ์์ฐ์ค๋ฝ๊ฒ ์ฑํ๋ ์๊ธฐ์์ต๋๋ค. 2016๋ ๋ง๊น์ง ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ ํ ์ฃผ์์ด ํฌํจ๋ ์ฝ 420000์ค์ Python ์ฝ๋๋ฅผ ๋ณด์ ํ์ต๋๋ค. ๋ง์ ์ฌ์ฉ์๊ฐ ์ ํ ๊ฒ์ฌ์ ์ด๊ดํ์ต๋๋ค. ์ ์ ๋ ๋ง์ ๊ฐ๋ฐํ์ด Dropbox mypy๋ฅผ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค.
๊ทธ ๋น์์๋ ๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ์ ๋ณด์์ง๋ง ์ฌ์ ํ ํด์ผ ํ ์ผ์ด ๋ง์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ๋ก์ ํธ์ ๋ฌธ์ ์์ญ์ ํ์ ํ๊ณ ๋จผ์ ํด๊ฒฐํด์ผ ํ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ์ดํดํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ธ ๋ด๋ถ ์ฌ์ฉ์ ์ค๋ฌธ ์กฐ์ฌ๋ฅผ ์ํํ๊ธฐ ์์ํ์ต๋๋ค(์ด ๊ดํ์ ์ค๋๋ ์๋ ํ์ฌ์์ ์ฌ์ ํ ์ฌ์ฉ๋ฉ๋๋ค). ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ ๊ฐ์ง ์์ ์ด์์ต๋๋ค. ์ฒซ์งธ, ์ฝ๋์ ๋ ๋ง์ ์ ํ ๋ฒ์๊ฐ ํ์ํ๊ณ , ๋์งธ, ๋ ๋น ๋ฅด๊ฒ ์๋ํ๋ ค๋ฉด mypy๊ฐ ํ์ํ์ต๋๋ค. mypy์ ์๋๋ฅผ ๋์ด๊ณ ์ด๋ฅผ ํ์ฌ ํ๋ก์ ํธ์ ๊ตฌํํ๊ธฐ ์ํ ์์ ์ด ์์ง ์๋ฃ๋์ง ์์๋ค๋ ๊ฒ์ ๋ถ๋ช ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด ๋ ๊ฐ์ง ๊ณผ์ ์ ์ค์์ฑ์ ์ถฉ๋ถํ ์ธ์ํ๊ณ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์์ํ์ต๋๋ค.
์์ฐ์ฑ์ด ํฅ์๋ฉ๋๋ค!
์ฆ๋ถ ๊ฒ์ฌ๋ฅผ ํตํด mypy๊ฐ ๋ ๋นจ๋ผ์ก์ง๋ง ๋๊ตฌ๋ ์ฌ์ ํ ์ถฉ๋ถํ ๋น ๋ฅด์ง ์์์ต๋๋ค. ๋ง์ ์ฆ๋ถ ๊ฒ์ฌ๊ฐ ์ฝ XNUMX๋ถ ๋์ ์ง์๋์์ต๋๋ค. ๊ทธ ์ด์ ๋ ์ฃผ๊ธฐ์ ์์ ๋๋ฌธ์ด์์ต๋๋ค. ์ด๋ ์๋ง๋ Python์ผ๋ก ์์ฑ๋ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค๋ก ์์ ํด ๋ณธ ์ฌ๋์ด๋ผ๋ฉด ๋๋ ์ผ์ด ์๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์๋ฐฑ ๊ฐ์ ๋ชจ๋ ์ธํธ๋ฅผ ๊ฐ๊ณ ์์๊ณ , ๊ฐ ๋ชจ๋์ ๋ค๋ฅธ ๋ชจ๋ ๋ชจ๋์ ๊ฐ์ ์ ์ผ๋ก ๊ฐ์ ธ์์ต๋๋ค. ๊ฐ์ ธ์ค๊ธฐ ๋ฃจํ์ ํ์ผ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ mypy๋ ํด๋น ๋ฃจํ์ ๋ชจ๋ ํ์ผ๊ณผ ์ข ์ข ํด๋น ๋ฃจํ์์ ๋ชจ๋์ ๊ฐ์ ธ์จ ๋ชจ๋ ๋ชจ๋์ ์ฒ๋ฆฌํด์ผ ํ์ต๋๋ค. ๊ทธ๋ฌํ ์ ์ํ ์ค ํ๋๋ Dropbox์์ ๋ง์ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ ์ ๋ช ๋์ โ์์กด์ฑ ์ฝํโ์ด์์ต๋๋ค. ์ด ๊ตฌ์กฐ์๋ ์๋ฐฑ ๊ฐ์ ๋ชจ๋์ด ํฌํจ๋์ด ์์๊ณ ์ง์ ๋๋ ๊ฐ์ ์ ์ผ๋ก ๋ง์ ํ ์คํธ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ํ๋ก๋์ ์ฝ๋์๋ ์ฌ์ฉ๋์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ํ ์ข
์์ฑ์ "ํ ์ ์๋" ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ์ง๋ง ์ด๋ฅผ ์ํํ ๋ฆฌ์์ค๊ฐ ์์์ต๋๋ค. ์ฐ๋ฆฌ์๊ฒ ์ต์ํ์ง ์์ ์ฝ๋๊ฐ ๋๋ฌด ๋ง์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ฐ๋ฆฌ๋ ๋์์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์๊ฐํด ๋์ต๋๋ค. ์ฐ๋ฆฌ๋ "์์กด์ฑ ์ํด"์ด ์๋ ๊ฒฝ์ฐ์๋ mypy๊ฐ ๋น ๋ฅด๊ฒ ์๋ํ๋๋ก ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ mypy ๋ฐ๋ชฌ์ ์ฌ์ฉํ์ฌ ์ด ๋ชฉํ๋ฅผ ๋ฌ์ฑํ์ต๋๋ค. ๋ฐ๋ชฌ์ ๋ ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ์๋ฒ ํ๋ก์ธ์ค์
๋๋ค. ์ฒซ์งธ, ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค์ ๋ํ ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํฉ๋๋ค. ์ด๋ mypy๋ฅผ ์คํํ ๋๋ง๋ค ๊ฐ์ ธ์จ ์์ฒ ๊ฐ์ ์ข
์์ฑ๊ณผ ๊ด๋ จ๋ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ ํ์๊ฐ ์์์ ์๋ฏธํฉ๋๋ค. ๋์งธ, ๊ทธ๋ ์์ ๊ตฌ์กฐ ๋จ์ ์์ค์์ ๊ธฐ๋ฅ๊ณผ ๋ค๋ฅธ ๊ฐ์ฒด ๊ฐ์ ์ข
์์ฑ์ ์ฃผ์ ๊น๊ฒ ๋ถ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํจ์๊ฐ foo
ํจ์๋ฅผ ํธ์ถํ๋ค bar
, ๊ทธ๋ฌ๋ฉด ์์กด์ฑ์ด ์์ต๋๋ค foo
๋ถํฐ bar
. ํ์ผ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ฐ๋ชฌ์ ๋จผ์ ๋ณ๊ฒฝ๋ ํ์ผ๋ง ๊ฒฉ๋ฆฌํ์ฌ ์ฒ๋ฆฌํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ณ๊ฒฝ๋ ํจ์ ์๋ช
๊ณผ ๊ฐ์ด ํด๋น ํ์ผ์ ๋ํด ์ธ๋ถ์์ ๋ณผ ์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ดํด๋ด
๋๋ค. ๋ฐ๋ชฌ์ ์์ ๋ ๊ธฐ๋ฅ์ ์ค์ ๋ก ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ๋ค์ ํ์ธํ๊ธฐ ์ํด์๋ง ๊ฐ์ ธ์ค๊ธฐ์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๊ฒ์ฌํด์ผ ํ๋ ๊ธฐ๋ฅ์ด ๊ฑฐ์ ์์ต๋๋ค.
์๋ mypy ๊ตฌํ์ ํ ๋ฒ์ ํ๋์ ํ์ผ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ค์ ์ ๋์๊ธฐ ๋๋ฌธ์ ์ด ๋ชจ๋ ๊ฒ์ ๊ตฌํํ๋ ๊ฒ์ ์ฝ์ง ์์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฝ๋์์ ๋ฌด์ธ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ๋ฐ๋ณต์ ์ธ ํ์ธ์ด ํ์ํ ์ฌ๋ฌ ๊ฒฝ๊ณ์ ์ํฉ์ ์ฒ๋ฆฌํด์ผ ํ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํด๋์ค์ ์ ๊ธฐ๋ณธ ํด๋์ค๊ฐ ํ ๋น๋๋ฉด ์ด๋ฐ ์ผ์ด ๋ฐ์ํฉ๋๋ค. ์ํ๋ ๋๋ก ์์ ์ ์ํํ ํ์๋ ๋๋ถ๋ถ์ ์ฆ๋ถ ๊ฒ์ฌ ์คํ ์๊ฐ์ ๋จ ๋ช ์ด๋ก ์ค์ผ ์ ์์์ต๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ํฐ ์น๋ฆฌ์ฒ๋ผ ๋ณด์์ต๋๋ค.
์์ฐ์ฑ์ด ๋์ฑ ํฅ์๋ฉ๋๋ค!
์์์ ๋ ผ์ํ ์๊ฒฉ ์บ์ฑ๊ณผ ํจ๊ป mypy ๋ฐ๋ชฌ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฃผ ์ ํ ๊ฒ์ฌ๋ฅผ ์คํํ์ฌ ์์์ ํ์ผ์ ๋ณ๊ฒฝํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ๊ฑฐ์ ์๋ฒฝํ๊ฒ ํด๊ฒฐํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ฅ ๋ถ๋ฆฌํ ์ฌ์ฉ ์ฌ๋ก์ ์์คํ ์ฑ๋ฅ์ ์ฌ์ ํ โโ์ต์ ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ์์ต๋๋ค. mypy๋ฅผ ๊นจ๋ํ๊ฒ ์์ํ๋ ๋ฐ 15๋ถ ์ด์์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋ง์กฑํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ์ผ์ด์์ต๋๋ค. ํ๋ก๊ทธ๋๋จธ๋ค์ด ๊ณ์ํด์ ์๋ก์ด ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๊ธฐ์กด ์ฝ๋์ ์ฃผ์์ ์ถ๊ฐํจ์ ๋ฐ๋ผ ๋งค์ฃผ ์ํฉ์ ๋์ฑ ์ ํ๋์์ต๋๋ค. ์ฐ๋ฆฌ ์ฌ์ฉ์๋ค์ ์ฌ์ ํ โโ๋ ๋์ ์ฑ๋ฅ์ ์ํ๊ณ ์์ง๋ง ์ค๊ฐ์ ๋ง๋์ ๊ธฐ๋ปค์ต๋๋ค.
์ฐ๋ฆฌ๋ mypy์ ๊ดํ ์ด์ ์์ด๋์ด ์ค ํ๋๋ก ๋์๊ฐ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ฆ, Python ์ฝ๋๋ฅผ C ์ฝ๋๋ก ๋ณํํ๋ ๊ฒ์ ๋๋ค. Cython(Python์ผ๋ก ์์ฑ๋ ์ฝ๋๋ฅผ C ์ฝ๋๋ก ๋ณํํ ์ ์๋ ์์คํ )์ ์ฌ์ฉํด ์คํํด๋ ๋์ ๋๋ ์๋ ํฅ์์ด ์์๊ธฐ ๋๋ฌธ์ ์์ฒด ์ปดํ์ผ๋ฌ๋ฅผ ์์ฑํ๋ค๋ ์์ด๋์ด๋ฅผ ๋์ด๋ฆฌ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. mypy ์ฝ๋๋ฒ ์ด์ค(Python์ผ๋ก ์์ฑ๋จ)์๋ ์ด๋ฏธ ํ์ํ ๋ชจ๋ ์ ํ ์ฃผ์์ด ํฌํจ๋์ด ์์ผ๋ฏ๋ก ์ด๋ฌํ ์ฃผ์์ ์ฌ์ฉํ์ฌ ์์คํ ์๋๋ฅผ ๋์ด๋ ๊ฒ์ด ๊ฐ์น ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋๋ ์ด ์์ด๋์ด๋ฅผ ํ ์คํธํ๊ธฐ ์ํด ์ ์ํ๊ฒ ํ๋กํ ํ์ ์ ๋ง๋ค์์ต๋๋ค. ๋ค์ํ ๋ง์ดํฌ๋ก ๋ฒค์น๋งํฌ์์ 10๋ฐฐ ์ด์์ ์ฑ๋ฅ ํฅ์์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ์ฐ๋ฆฌ์ ์์ด๋์ด๋ Cython์ ์ฌ์ฉํ์ฌ Python ๋ชจ๋์ C ๋ชจ๋๋ก ์ปดํ์ผํ๊ณ ์ ํ ์ฃผ์์ ๋ฐํ์ ์ ํ ๊ฒ์ฌ๋ก ๋ฐ๊พธ๋ ๊ฒ์ด์์ต๋๋ค(์ผ๋ฐ์ ์ผ๋ก ์ ํ ์ฃผ์์ ๋ฐํ์ ์ ๋ฌด์๋๊ณ ์ ํ ๊ฒ์ฌ ์์คํ ์์๋ง ์ฌ์ฉ๋ฉ๋๋ค). ์ฐ๋ฆฌ๋ ์ค์ ๋ก Python์ mypy ๊ตฌํ์ ์ ์ ์ผ๋ก ์ ๋ ฅ๋๋๋ก ์ค๊ณ๋ ์ธ์ด๋ก ๋ณํํ ๊ณํ์ ์ธ์ ๋๋ฐ, ์ด ์ธ์ด๋ Python๊ณผ ๋๊ฐ์ ๋ณด์ด๊ณ ๋๋ถ๋ถ ์๋ํฉ๋๋ค. (์ด๋ฐ ์ข ๋ฅ์ ์ธ์ด ๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ์ mypy ํ๋ก์ ํธ์ ์ ํต์ด ๋์์ต๋๋ค. ์๋ mypy ๊ตฌํ์ Alore๋ก ์์ฑ๋์์ผ๋ฉฐ Java์ Python์ ๊ตฌ๋ฌธ ํ์ด๋ธ๋ฆฌ๋๊ฐ ์์์ต๋๋ค.)
CPython ํ์ฅ API์ ์ง์คํ๋ ๊ฒ์ด ํ๋ก์ ํธ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์์ง ์๋ ํต์ฌ์ด์์ต๋๋ค. mypy์ ํ์ํ ๊ฐ์ ๋จธ์ ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌํํ ํ์๊ฐ ์์์ต๋๋ค. ๋ํ ์ ์ฒด Python ์ํ๊ณ์ ๋ชจ๋ ๋๊ตฌ(์: pytest)์ ๊ณ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ ์ค์ ํด์๋ Python ์ฝ๋๋ฅผ ๊ณ์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, ์ฝ๋๊ฐ ์ปดํ์ผ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ณ ํ ์คํธํ๋ ๋งค์ฐ ๋น ๋ฅธ ํจํด์ผ๋ก ๊ณ์ ์์ ํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋งํ์๋ฉด ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ ์์์ ์์ ์ผ์ ํ๋ฅญํ๊ฒ ์ํํ๋ ๊ฒ์ฒ๋ผ ๋ณด์๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ข์ํ์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ mypyc๋ผ๊ณ ๋ถ๋ฅด๋ ์ปดํ์ผ๋ฌ(์ ํ ๋ถ์์ ์ํ ํ๋ฐํธ ์๋๋ก mypy๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์)๋ ๋งค์ฐ ์ฑ๊ณต์ ์ธ ํ๋ก์ ํธ๋ก ํ๋ช ๋์์ต๋๋ค. ์ ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์บ์ฑ ์์ด ๋น๋ฒํ mypy ์คํ์ ๋ํด ์ฝ 4๋ฐฐ์ ์๋ ํฅ์์ ๋ฌ์ฑํ์ต๋๋ค. mypyc ํ๋ก์ ํธ์ ํต์ฌ์ ๊ฐ๋ฐํ๋ ๋ฐ์๋ Michael Sullivan, Ivan Levkivsky, Hugh Hahn ๋ฐ ๋๋ก ๊ตฌ์ฑ๋ ์๊ท๋ชจ ํ์ด ์ฝ 4๊ฐ์์ด ๊ฑธ๋ ธ์ต๋๋ค. ์ด ์์ ๋์ ์๋ฅผ ๋ค์ด C++ ๋๋ Go์์ mypy๋ฅผ ๋ค์ ์์ฑํ๋ ๋ฐ ํ์ํ ์์ ๋๋ณด๋ค ํจ์ฌ ์ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ๋ฅผ ๋ค๋ฅธ ์ธ์ด๋ก ๋ค์ ์์ฑํ ๋๋ณด๋ค ํจ์ฌ ์ ์ ์์ ๋ณ๊ฒฝ ์์ ์ ์ํํด์ผ ํ์ต๋๋ค. ๋ํ ์ฐ๋ฆฌ๋ mypyc์ ๋ค๋ฅธ Dropbox ํ๋ก๊ทธ๋๋จธ๋ค์ด mypyc์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ ์๋๋ฅผ ๋์ผ ์ ์๋ ์์ค์ผ๋ก ๋์ด์ฌ๋ฆด ์ ์๊ธฐ๋ฅผ ๋ฐ๋์ต๋๋ค.
์ด๋ฌํ ์์ค์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ๋ช ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ์์ง๋์ด๋ง ์๋ฃจ์ ์ ์ ์ฉํด์ผ ํ์ต๋๋ค. ๋ฐ๋ผ์ ์ปดํ์ผ๋ฌ๋ ๋น ๋ฅด๊ณ ๋ฎ์ ์์ค์ C ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ง์ ์์ ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํ์ผ๋ ํจ์ ํธ์ถ์ C ํจ์ ํธ์ถ๋ก ๋ณํ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฌํ ํธ์ถ์ ํด์๋ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฆ ๋๋ค. ์ฌ์ ์กฐํ์ ๊ฐ์ ์ผ๋ถ ์์ ์๋ ์ฌ์ ํ CPython์ ์ผ๋ฐ C-API ํธ์ถ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ ์ปดํ์ผ ์ ์๋๊ฐ ์ฝ๊ฐ ๋ ๋นจ๋ผ์ก์ต๋๋ค. ํด์์ผ๋ก ์ธํด ๋ฐ์ํ๋ ์์คํ ์ ์ถ๊ฐ ๋ถํ๋ฅผ ์ ๊ฑฐํ ์ ์์์ง๋ง ์ด ๊ฒฝ์ฐ์๋ ์ฑ๋ฅ ์ธก๋ฉด์์ ์ฝ๊ฐ์ ์ด๋๋ง ์ป์์ต๋๋ค.
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ "๋๋ฆฐ" ์์ ์ ์๋ณํ๊ธฐ ์ํด ์ฝ๋ ํ๋กํ์ผ๋ง์ ์ํํ์ต๋๋ค. ์ด ๋ฐ์ดํฐ๋ก ๋ฌด์ฅํ์ฌ ์ฐ๋ฆฌ๋ mypyc๋ฅผ ์กฐ์ ํ์ฌ ํด๋น ์์ ์ ๋ํด ๋ ๋น ๋ฅธ C ์ฝ๋๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ ๋น ๋ฅธ ์์ ์ ์ฌ์ฉํ์ฌ ํด๋น Python ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ๋ ค๊ณ ํ์ต๋๋ค(๋๋๋ก ํด๋น ๋ฌธ์ ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ๋ํ ์ถฉ๋ถํ ๊ฐ๋จํ ์๋ฃจ์ ์ด ์์์ต๋๋ค). . Python ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ๋ ๊ฒ์ด ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ๋์ผํ ๋ณํ์ ์ํํ๋๋ก ํ๋ ๊ฒ๋ณด๋ค ๋ฌธ์ ์ ๋ํ ๋ ์ฌ์ด ํด๊ฒฐ์ฑ ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ฅ๊ธฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๋ณํ ์ค ๋ง์ ๋ถ๋ถ์ ์๋ํํ๊ณ ์ถ์์ง๋ง ๋น์์๋ ์ต์ํ์ ๋ ธ๋ ฅ์ผ๋ก mypy ์๋๋ฅผ ๋์ด๋ ๋ฐ ์ค์ ์ ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์ด ๋ชฉํ๋ฅผ ํฅํด ๋์๊ฐ๋ฉด์ ์ฌ๋ฌ ๋ชจํ์ด๋ฅผ ์๋ผ๋์ต๋๋ค.
๊ณ์ ๋ ...
๋ ์ ์ฌ๋ฌ๋ถ! mypy ํ๋ก์ ํธ๊ฐ ์กด์ฌํ๋ค๋ ์ฌ์ค์ ์์์ ๋ ๊ทธ์ ๋ํ ์ธ์์ ์ด๋ ๋์?
์ถ์ฒ : habr.com